SlideShare uma empresa Scribd logo
1 de 81
Baixar para ler offline
Creating Excel files
with Python and
XlsxWriter
John McNamara
Emutex Ltd
whoami
John McNamara
Software developer at Emutex Ltd
http://www.emutex.com
http://github.com/jmcnamara
Why Excel
•
•
•
•
•

Bosses like it
Useful as a data source
More useful with formatting
Input/output source for Pandas
Can be misused: Excel as a database
Available Python modules
•

csv.py
Readers and writers in core libs

•

xlwt/xlrd
Mature, stable modules, mainly XLS support

•

openpyxl
Reads and writes XLSX files

•

xlsxwriter
New module from early 2013
Excel File Formats
Excel 2003 : xls

Excel 2007 : xlsx

xlwt

xlsxwriter

Write
Read

openpyxl

xlrd
XlsxWriter
•
•
•
•
•

Write Excel XLSX files only
Doesn’t read or re-write Excel files
Adds many new features
Uses core modules only
Python 2.5, 2.6, 2.7, 3.1, 3.2, 3.3, PyPy, Jython
Why another module
•
•

Why not?

•

XlsxWriter adds support for:

Other modules support some but not all
features
charts, autofilters, tables, data validation,
merged cells, rich text, conditional
formatting, defined names, images, cell
comments, sparklines, outlines
Getting Started
•

Install:
$ sudo pip install xlsxwriter

•

Clone or fork:
$ git clone git@github.com:jmcnamara/XlsxWriter.git
$ cd XlsxWriter
$ make test
$ sudo python setup.py install

•

Read:
https://xlsxwriter.readthedocs.org
Hello World.xlsx
Hello World.xlsx
import xlsxwriter
workbook = xlsxwriter.Workbook('hello_world.xlsx')
worksheet = workbook.add_worksheet()
worksheet.write(0, 0, 'Hello world')
workbook.close()
Hello World.xlsx
import xlsxwriter
workbook = xlsxwriter.Workbook('hello_world.xlsx')
worksheet = workbook.add_worksheet()
worksheet.write(0, 0, 'Hello world')
workbook.close()
Hello World.xlsx
import xlsxwriter
workbook = xlsxwriter.Workbook('hello_world.xlsx')
worksheet = workbook.add_worksheet()
worksheet.write(0, 0, 'Hello world')
worksheet.write(2, 1, 'Hello world')
workbook.close()
Hello World.xlsx
import xlsxwriter
workbook = xlsxwriter.Workbook('hello_world.xlsx')
worksheet = workbook.add_worksheet()
worksheet.write(0, 0, 'Hello world')
worksheet.write(2, 1, 'Hello world')
worksheet.write('C5', 'Hello world')
workbook.close()
Cell Formatting
Cell Formatting
import xlsxwriter
workbook = xlsxwriter.Workbook('formatting.xlsx')
worksheet = workbook.add_worksheet()
italic = workbook.add_format({'italic': True})
bold
= workbook.add_format({'bold':
True, 'font_color': '#9CB640'})
worksheet.write(0, 0, 'Hello')
workbook.close()
Cell Formatting
import xlsxwriter
workbook = xlsxwriter.Workbook('formatting.xlsx')
worksheet = workbook.add_worksheet()
italic = workbook.add_format({'italic': True})
bold
= workbook.add_format({'bold':
True, 'font_color': '#9CB640'})
worksheet.write(0, 0, 'Hello')
worksheet.write(1, 0, 'Hello', italic)
workbook.close()
Cell Formatting
import xlsxwriter
workbook = xlsxwriter.Workbook('formatting.xlsx')
worksheet = workbook.add_worksheet()
italic = workbook.add_format({'italic': True})
bold
= workbook.add_format({'bold':
True, 'font_color': '#9CB640'})
worksheet.write(0, 0, 'Hello')
worksheet.write(1, 0, 'Hello', italic)
worksheet.write(2, 0, 'Hello', bold)
workbook.close()
Cell Formatting
set_font_name()

set_text_wrap()

set_border_color()

set_font_size()

set_rotation()

set_bottom_color()

set_font_color()

set_indent()

set_top_color()

set_bold()

set_shrink()

set_left_color()

set_italic()

set_text_justlast()

set_right_color()

set_underline()

set_pattern()

set_font_strikeout()

set_bg_color()

set_font_script()

set_fg_color()

set_num_format()

set_border()

set_locked()

set_bottom()

set_hidden()

set_top()

set_align()

set_left()

set_center_across()

set_right()
Types
Types
from datetime import date
import xlsxwriter
workbook
= xlsxwriter.Workbook('types.xlsx')
worksheet
= workbook.add_worksheet()
date_format = workbook.add_format({'num_format': 'd mmm yyyy'})
worksheet.write(0, 0, 'Hello world')
workbook.close()
Types
from datetime import date
import xlsxwriter
workbook
= xlsxwriter.Workbook('types.xlsx')
worksheet
= workbook.add_worksheet()
date_format = workbook.add_format({'num_format': 'd mmm yyyy'})
worksheet.write(0, 0, 'Hello world')
workbook.close()
Types
from datetime import date
import xlsxwriter
workbook
= xlsxwriter.Workbook('types.xlsx')
worksheet
= workbook.add_worksheet()
date_format = workbook.add_format({'num_format': 'd mmm yyyy'})
worksheet.write(0, 0, 'Hello world')
worksheet.write(1, 0, 'Это фраза на русском!')
workbook.close()
Types
from datetime import date
import xlsxwriter
workbook
= xlsxwriter.Workbook('types.xlsx')
worksheet
= workbook.add_worksheet()
date_format = workbook.add_format({'num_format': 'd mmm yyyy'})
worksheet.write(0, 0, 'Hello world')
worksheet.write(1, 0, 'Это фраза на русском!')
worksheet.write(2, 0, 123)
workbook.close()
Types
from datetime import date
import xlsxwriter
workbook
= xlsxwriter.Workbook('types.xlsx')
worksheet
= workbook.add_worksheet()
date_format = workbook.add_format({'num_format': 'd mmm yyyy'})
worksheet.write(0,
worksheet.write(1,
worksheet.write(2,
worksheet.write(3,
workbook.close()

0,
0,
0,
0,

'Hello world')
'Это фраза на русском!')
123)
123.456)
Types
from datetime import date
import xlsxwriter
workbook
= xlsxwriter.Workbook('types.xlsx')
worksheet
= workbook.add_worksheet()
date_format = workbook.add_format({'num_format': 'd mmm yyyy'})
worksheet.write(0,
worksheet.write(1,
worksheet.write(2,
worksheet.write(3,
worksheet.write(4,
workbook.close()

0,
0,
0,
0,
0,

'Hello world')
'Это фраза на русском!')
123)
123.456)
date(2013, 10, 13), date_format)
Types
from datetime import date
import xlsxwriter
workbook
= xlsxwriter.Workbook('types.xlsx')
worksheet
= workbook.add_worksheet()
date_format = workbook.add_format({'num_format': 'd mmm yyyy'})
worksheet.write(0,
worksheet.write(1,
worksheet.write(2,
worksheet.write(3,
worksheet.write(4,
worksheet.write(5,
workbook.close()

0,
0,
0,
0,
0,
0,

'Hello world')
'Это фраза на русском!')
123)
123.456)
date(2013, 10, 13), date_format)
'=PI()')
Types
from datetime import date
import xlsxwriter
workbook
= xlsxwriter.Workbook('types.xlsx')
worksheet
= workbook.add_worksheet()
date_format = workbook.add_format({'num_format': 'd mmm yyyy'})
worksheet.write(0,
worksheet.write(1,
worksheet.write(2,
worksheet.write(3,
worksheet.write(4,
worksheet.write(5,
worksheet.write(6,
workbook.close()

0,
0,
0,
0,
0,
0,
0,

'Hello world')
'Это фраза на русском!')
123)
123.456)
date(2013, 10, 13), date_format)
'=PI()')
'http://python.com')
Types
from datetime import date
import xlsxwriter
workbook
= xlsxwriter.Workbook('types.xlsx')
worksheet
= workbook.add_worksheet()
date_format = workbook.add_format({'num_format': 'd mmm yyyy'})
worksheet.write(0,
worksheet.write(1,
worksheet.write(2,
worksheet.write(3,
worksheet.write(4,
worksheet.write(5,
worksheet.write(6,
worksheet.write(7,
workbook.close()

0,
0,
0,
0,
0,
0,
0,
0,

'Hello world')
'Это фраза на русском!')
123)
123.456)
date(2013, 10, 13), date_format)
'=PI()')
'http://python.com')
True)
Types
from datetime import date
import xlsxwriter
workbook
= xlsxwriter.Workbook('types.xlsx')
worksheet
= workbook.add_worksheet()
date_format = workbook.add_format({'num_format': 'd mmm yyyy'})
worksheet.write(0,
worksheet.write(1,
worksheet.write(2,
worksheet.write(3,
worksheet.write(4,
worksheet.write(5,
worksheet.write(6,
worksheet.write(7,
workbook.close()

0,
0,
0,
0,
0,
0,
0,
0,

'Hello world')
'Это фраза на русском!')
123)
123.456)
date(2013, 10, 13), date_format)
'=PI()')
'http://python.com')
True)
Types
from datetime import date
import xlsxwriter
workbook
= xlsxwriter.Workbook('types.xlsx')
worksheet
= workbook.add_worksheet()
date_format = workbook.add_format({'num_format': 'd mmm yyyy'})
worksheet.write
worksheet.write
worksheet.write
worksheet.write
worksheet.write
worksheet.write
worksheet.write
worksheet.write
workbook.close()

(0,
(1,
(2,
(3,
(4,
(5,
(6,
(7,

0,
0,
0,
0,
0,
0,
0,
0,

'Hello world')
'Это фраза на русском!')
123)
123.456)
date(2013, 10, 13), date_format)
'=PI()')
'http://python.com')
True)
Types
from datetime import date
import xlsxwriter
workbook
= xlsxwriter.Workbook('types.xlsx')
worksheet
= workbook.add_worksheet()
date_format = workbook.add_format({'num_format': 'd mmm yyyy'})
worksheet.write_string (0,
worksheet.write_string (1,
worksheet.write_number (2,
worksheet.write_number (3,
worksheet.write_datetime(4,
worksheet.write_formula (5,
worksheet.write_url
(6,
worksheet.write_boolean (7,
workbook.close()

0,
0,
0,
0,
0,
0,
0,
0,

'Hello world')
'Это фраза на русском!')
123)
123.456)
date(2013, 10, 13), date_format)
'=PI()')
'http://python.com')
True)
Formulas
Formulas
worksheet.write_formula('A1', '=1+2')
worksheet.write_formula('A2', '=A1')
worksheet.write_formula('A3', '{=SUM(B1:C1*B2:C2)}')
worksheet.write_formula('A4', '=VLOOKUP("Acme", A2:D6, 3, FALSE)')
Images
Images
import xlsxwriter
workbook = xlsxwriter.Workbook('image.xlsx')
worksheet = workbook.add_worksheet()
worksheet.insert_image(0, 0, 'logo.png')
workbook.close()
Conditional Formatting
Conditional Formatting
import xlsxwriter
wb = xlsxwriter.Workbook('conditional_format.xlsx')
ws = wb.add_worksheet()
high = wb.add_format({'bg_color': '#FFC7CE', 'font_color': '#9C0006'})
low = wb.add_format({'bg_color': '#C6EFCE', 'font_color': '#006100'})
data = [
[88,
[24,
[6,
[73,
[36,
]

25,
100,
57,
78,
54,

33,
20,
88,
1,
22,

23,
88,
28,
96,
66,

67,
29,
10,
26,
81,

13],
33],
26],
45],
90],

for row, row_data in enumerate(data):
ws.write_row(row, 0, row_data)
ws.conditional_format('A1:F5', {'type':
'criteria':
'value':
'format':

'cell',
'>=',
50,
high})

ws.conditional_format('A1:F5', {'type':
'criteria':
'value':
'format':

'cell',
'<',
50,
low})

wb.close()
Charts
Charts
Area
stacked
percent_stacked
Bar
stacked
percent_stacked

Pie
Radar
with_markers
filled

Column
stacked
percent_stacked

Scatter
straight_with_markers
straight
smooth_with_markers
smooth

Line

Stock
Charts
import xlsxwriter
workbook = xlsxwriter.Workbook('chart.xlsx')
worksheet = workbook.add_worksheet()
# Add the worksheet data to be plotted.
data = [10, 40, 50, 20, 10, 50]
worksheet.write_column('A1', data)
# Create a new chart object.
chart = workbook.add_chart({'type': 'area'})
# Add a series to the chart.
chart.add_series({'values': '=Sheet1!$A$1:$A$6'})
# Insert the chart into the worksheet.
worksheet.insert_chart('C1', chart)
workbook.close()
Charts
chart = workbook.add_chart({'type': 'area'})
Charts
chart = workbook.add_chart({'type': 'bar'})
Charts
chart = workbook.add_chart({'type': 'column'})
Charts
chart = workbook.add_chart({'type': 'line'})
Charts
chart = workbook.add_chart({'type': 'pie'})
Charts
chart = workbook.add_chart({'type': 'radar'})
Charts
•

Configurability
Charts
Stacked chart with captions
Charts
Change chart styles
Charts
Add trendlines to charts
Charts
Format data points
Charts
Secondary axes
Autofilters
Autofilters
import xlsxwriter
workbook = xlsxwriter.Workbook('autofilter.xlsx')
worksheet = workbook.add_worksheet()
# Add a format for the headers.
header_format = workbook.add_format({'bold': 1, 'bg_color': '#C6EFCE'})
# Populate the worksheet data.
# See the xlsxwriter docs for a full example.
...
# Make the columns wider.
worksheet.set_column('A:D', 12)
# Format the header row.
worksheet.set_row(0, 20, header_format)
# Set the autofilter.
worksheet.autofilter('A1:D51')
workbook.close()
Tables
Tables
•
•
•

Group a range of cells into a single entity
Apply a uniform formatting across the cells
Refer to the table in formulas
worksheet.add_table('B3:F7', {options})
Data Validation
Data Validation
•
•
•

Restrict data entry to certain ranges
Raise errors/warning within Excel
Allow selection from drop down lists

data_validation(
'B25',
{'validate': 'integer',
'criteria': 'between',
'minimum': 1,
'maximum': 10})
Cell Comments
Cell Comments
•

Add comments to cells
worksheet.write('A1', 'Hello')
worksheet.write_comment('A1', 'This is a comment')
Sparklines
Sparklines
•
•

Mini charts within cells to show trends
Invented by Edward Tufte
Code All the Things!
•

Lots of features
Code All the Things!
•
•
•
•

Lots of features
Useful when you need them
Ignore them when you don’t
Plenty of examples and documentation to
get you started
How does it work
How does it work
•

20% of a studio audience guessed Witchcraft
How does it work
•
•
•
•

20% of a studio audience guessed Witchcraft
Actually a collection of XML files in a Zip file
Can be unzipped using standard utilities
Even modified in-place (if you are desperate)
How does it work
$ unzip -o -d hello_world hello_world.xlsx
Archive:

hello_world.xlsx

inflating: hello_world/[Content_Types].xml
inflating: hello_world/_rels/.rels
inflating: hello_world/docProps/app.xml
inflating: hello_world/docProps/core.xml
inflating: hello_world/xl/sharedStrings.xml
inflating: hello_world/xl/styles.xml
inflating: hello_world/xl/workbook.xml
inflating: hello_world/xl/_rels/workbook.xml.rels
inflating: hello_world/xl/theme/theme1.xml
inflating: hello_world/xl/worksheets/sheet1.xml
How does it work
$ unzip -o -d hello_world hello_world.xlsx
Archive:

hello_world.xlsx

inflating: hello_world/[Content_Types].xml
inflating: hello_world/_rels/.rels
inflating: hello_world/docProps/app.xml
inflating: hello_world/docProps/core.xml
inflating: hello_world/xl/sharedStrings.xml
inflating: hello_world/xl/styles.xml
inflating: hello_world/xl/workbook.xml
inflating: hello_world/xl/_rels/workbook.xml.rels
inflating: hello_world/xl/theme/theme1.xml
inflating: hello_world/xl/worksheets/sheet1.xml
How does it work
$ unzip -o -d hello_world hello_world.xlsx
Archive:

hello_world.xlsx

inflating: hello_world/[Content_Types].xml
inflating: hello_world/_rels/.rels
inflating: hello_world/docProps/app.xml
inflating: hello_world/docProps/core.xml
inflating: hello_world/xl/sharedStrings.xml
inflating: hello_world/xl/styles.xml
inflating: hello_world/xl/workbook.xml
inflating: hello_world/xl/_rels/workbook.xml.rels
inflating: hello_world/xl/theme/theme1.xml
inflating: hello_world/xl/worksheets/sheet1.xml
How does it work
$ unzip -o -d hello_world hello_world.xlsx
Archive:

hello_world.xlsx

inflating: hello_world/[Content_Types].xml
inflating: hello_world/_rels/.rels
inflating: hello_world/docProps/app.xml
inflating: hello_world/docProps/core.xml
inflating: hello_world/xl/sharedStrings.xml
inflating: hello_world/xl/styles.xml
inflating: hello_world/xl/workbook.xml
inflating: hello_world/xl/_rels/workbook.xml.rels
inflating: hello_world/xl/theme/theme1.xml
inflating: hello_world/xl/worksheets/sheet1.xml
$ xmllint --format hello_world/xl/worksheets/sheet1.xml
How does it work
$ unzip -o -d hello_world hello_world.xlsx
...
$ xmllint --format hello_world/xl/worksheets/sheet1.xml
How does it work
$ unzip -o -d hello_world hello_world.xlsx
...
$ xmllint --format hello_world/xl/worksheets/sheet1.xml
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<worksheet xmlns="..." xmlns:r="...">
<dimension ref="A1"/>
<sheetViews>
<sheetView tabSelected="1" workbookViewId="0"/>
</sheetViews>
<sheetFormatPr defaultRowHeight="15"/>
<sheetData>
<row r="1" spans="1:1">
<c r="A1" t="s">
<v>0</v>
</c>
</row>
</sheetData>
<pageMargins left="0.7" right="0.7" top="0.75" bottom="0.75" header="0.3" footer="0.3"/>
</worksheet>
How does it work
$ unzip -o -d hello_world hello_world.xlsx
...
$ xmllint --format hello_world/xl/worksheets/sheet1.xml
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<worksheet xmlns="..." xmlns:r="...">
<dimension ref="A1"/>
<sheetViews>
<sheetView tabSelected="1" workbookViewId="0"/>
</sheetViews>
<sheetFormatPr defaultRowHeight="15"/>
<sheetData>
<row r="1" spans="1:1">
<c r="A1" t="s">
<v>0</v>
</c>
</row>
</sheetData>
<pageMargins left="0.7" right="0.7" top="0.75" bottom="0.75" header="0.3" footer="0.3"/>
</worksheet>
How does it work
$ unzip -o -d hello_world hello_world.xlsx
...
$ xmllint --format hello_world/xl/worksheets/sheet1.xml
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<worksheet xmlns="..." xmlns:r="...">
<dimension ref="A1"/>
<sheetViews>
<sheetView tabSelected="1" workbookViewId="0"/>
</sheetViews>
<sheetFormatPr defaultRowHeight="15"/>
<sheetData>
<row r="1" spans="1:1">
<c r="A1" t="s">
<v>0</v>
</c>
</row>
</sheetData>
<pageMargins left="0.7" right="0.7" top="0.75" bottom="0.75" header="0.3" footer="0.3"/>
</worksheet>
How does it work
$ unzip -o -d hello_world hello_world.xlsx
...
$ xmllint --format hello_world/xl/worksheets/sheet1.xml
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<worksheet xmlns="..." xmlns:r="...">
<dimension ref="A1"/>
<sheetViews>
<sheetView tabSelected="1" workbookViewId="0"/>
</sheetViews>
<sheetFormatPr defaultRowHeight="15"/>
<sheetData>
<row r="1" spans="1:1">
<c r="A1" t="s">
<v>0</v>
</c>
</row>
</sheetData>
<pageMargins left="0.7" right="0.7" top="0.75" bottom="0.75" header="0.3" footer="0.3"/>
</worksheet>
How does it work
$ unzip -o -d hello_world hello_world.xlsx
...
$ xmllint --format hello_world/xl/worksheets/sheet1.xml
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<worksheet xmlns="..." xmlns:r="...">
<dimension ref="A1"/>
<sheetViews>
<sheetView tabSelected="1" workbookViewId="0"/>
</sheetViews>
<sheetFormatPr defaultRowHeight="15"/>
<sheetData>
<row r="1" spans="1:1">
<c r="A1" t="s">
<v>0</v>
</c>
</row>
</sheetData>
<pageMargins left="0.7" right="0.7" top="0.75" bottom="0.75" header="0.3" footer="0.3"/>
</worksheet>
How does it work
$ unzip -o -d hello_world hello_world.xlsx
...
$ xmllint --format hello_world/xl/worksheets/sheet1.xml
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<worksheet xmlns="..." xmlns:r="...">
<dimension ref="A1"/>
<sheetViews>
<sheetView tabSelected="1" workbookViewId="0"/>
</sheetViews>
<sheetFormatPr defaultRowHeight="15"/>
<sheetData>
<row r="1" spans="1:1">
<c r="A1" t="s">
<v>0</v>
</c>
</row>
</sheetData>
<pageMargins left="0.7" right="0.7" top="0.75" bottom="0.75" header="0.3" footer="0.3"/>
</worksheet>
How does it work
•
•

It works well
XlsxWriter does the hard work so you
don’t have to
close()
•

Next time you need to write an Excel file with
Python try XlsxWriter

•

Clone it on Github, submit issues, add stars
http://github.com/jmcnamara/XlsxWriter

•

Read the documentation
https://xlsxwriter.readthedocs.org
PDF tutorial, cookbook and manual
Thank You

John McNamara
Emutex Ltd

Mais conteúdo relacionado

Mais procurados

Preprocessor directives in c language
Preprocessor directives in c languagePreprocessor directives in c language
Preprocessor directives in c languagetanmaymodi4
 
Exception Handling in C#
Exception Handling in C#Exception Handling in C#
Exception Handling in C#Abid Kohistani
 
Chapter Introduction to Modular Programming.ppt
Chapter Introduction to Modular Programming.pptChapter Introduction to Modular Programming.ppt
Chapter Introduction to Modular Programming.pptAmanuelZewdie4
 
Exception handling c++
Exception handling c++Exception handling c++
Exception handling c++Jayant Dalvi
 
Classes, objects in JAVA
Classes, objects in JAVAClasses, objects in JAVA
Classes, objects in JAVAAbhilash Nair
 
CSharp Presentation
CSharp PresentationCSharp Presentation
CSharp PresentationVishwa Mohan
 
Inline function
Inline functionInline function
Inline functionTech_MX
 
Lambdas and Streams Master Class Part 2
Lambdas and Streams Master Class Part 2Lambdas and Streams Master Class Part 2
Lambdas and Streams Master Class Part 2José Paumard
 
Function overloading and overriding
Function overloading and overridingFunction overloading and overriding
Function overloading and overridingRajab Ali
 
Tkinter Python Tutorial | Python GUI Programming Using Tkinter Tutorial | Pyt...
Tkinter Python Tutorial | Python GUI Programming Using Tkinter Tutorial | Pyt...Tkinter Python Tutorial | Python GUI Programming Using Tkinter Tutorial | Pyt...
Tkinter Python Tutorial | Python GUI Programming Using Tkinter Tutorial | Pyt...Edureka!
 
Abstraction in c++ and Real Life Example of Abstraction in C++
Abstraction in c++ and Real Life Example of Abstraction in C++Abstraction in c++ and Real Life Example of Abstraction in C++
Abstraction in c++ and Real Life Example of Abstraction in C++Hitesh Kumar
 
Function overloading(c++)
Function overloading(c++)Function overloading(c++)
Function overloading(c++)Ritika Sharma
 

Mais procurados (20)

Preprocessor directives in c language
Preprocessor directives in c languagePreprocessor directives in c language
Preprocessor directives in c language
 
Exception Handling in C#
Exception Handling in C#Exception Handling in C#
Exception Handling in C#
 
Java packages
Java packagesJava packages
Java packages
 
Chapter Introduction to Modular Programming.ppt
Chapter Introduction to Modular Programming.pptChapter Introduction to Modular Programming.ppt
Chapter Introduction to Modular Programming.ppt
 
Function
FunctionFunction
Function
 
Function in C program
Function in C programFunction in C program
Function in C program
 
Functions in C++
Functions in C++Functions in C++
Functions in C++
 
Oops ppt
Oops pptOops ppt
Oops ppt
 
Exception handling c++
Exception handling c++Exception handling c++
Exception handling c++
 
Classes, objects in JAVA
Classes, objects in JAVAClasses, objects in JAVA
Classes, objects in JAVA
 
CSharp Presentation
CSharp PresentationCSharp Presentation
CSharp Presentation
 
Inline function
Inline functionInline function
Inline function
 
Lambdas and Streams Master Class Part 2
Lambdas and Streams Master Class Part 2Lambdas and Streams Master Class Part 2
Lambdas and Streams Master Class Part 2
 
Function overloading and overriding
Function overloading and overridingFunction overloading and overriding
Function overloading and overriding
 
Operators in C++
Operators in C++Operators in C++
Operators in C++
 
[OOP - Lec 18] Static Data Member
[OOP - Lec 18] Static Data Member[OOP - Lec 18] Static Data Member
[OOP - Lec 18] Static Data Member
 
Tkinter Python Tutorial | Python GUI Programming Using Tkinter Tutorial | Pyt...
Tkinter Python Tutorial | Python GUI Programming Using Tkinter Tutorial | Pyt...Tkinter Python Tutorial | Python GUI Programming Using Tkinter Tutorial | Pyt...
Tkinter Python Tutorial | Python GUI Programming Using Tkinter Tutorial | Pyt...
 
Abstraction in c++ and Real Life Example of Abstraction in C++
Abstraction in c++ and Real Life Example of Abstraction in C++Abstraction in c++ and Real Life Example of Abstraction in C++
Abstraction in c++ and Real Life Example of Abstraction in C++
 
Function overloading(c++)
Function overloading(c++)Function overloading(c++)
Function overloading(c++)
 
Functions in C++
Functions in C++Functions in C++
Functions in C++
 

Destaque

xlwings – Make Excel Fly with Python
xlwings – Make Excel Fly with Pythonxlwings – Make Excel Fly with Python
xlwings – Make Excel Fly with Pythonodsc
 
Python + Excel
Python + Excel Python + Excel
Python + Excel POSTECH
 
xlwings - Connecting Python with Excel
xlwings - Connecting Python with Excelxlwings - Connecting Python with Excel
xlwings - Connecting Python with Excelxlwings
 
Python. Finance. Excel. - The Thalesians
Python. Finance. Excel. - The ThalesiansPython. Finance. Excel. - The Thalesians
Python. Finance. Excel. - The Thalesiansxlwings
 
xlwings Presentation (Excel & Python) Swiss FinteCH event
xlwings Presentation (Excel & Python) Swiss FinteCH eventxlwings Presentation (Excel & Python) Swiss FinteCH event
xlwings Presentation (Excel & Python) Swiss FinteCH eventxlwings
 
Scraping in 60 minutes
Scraping in 60 minutesScraping in 60 minutes
Scraping in 60 minutesPaul Bradshaw
 
Lobbycloud .- how they are writing your laws
Lobbycloud .- how they are writing your lawsLobbycloud .- how they are writing your laws
Lobbycloud .- how they are writing your lawsMartin Virtel
 
Don Bailey - A Million Little Tracking Devices
Don Bailey  - A Million Little Tracking DevicesDon Bailey  - A Million Little Tracking Devices
Don Bailey - A Million Little Tracking DevicesSource Conference
 
29c3 OpenBTS workshop - Mini-Workshop
29c3 OpenBTS workshop - Mini-Workshop29c3 OpenBTS workshop - Mini-Workshop
29c3 OpenBTS workshop - Mini-WorkshopAlexander Chemeris
 
How To Automate Part 1
How To Automate Part 1How To Automate Part 1
How To Automate Part 1Sean Durocher
 
DAB+ for local and community radio
DAB+ for local and community radioDAB+ for local and community radio
DAB+ for local and community radioradioradioradio
 
Python高级编程(二)
Python高级编程(二)Python高级编程(二)
Python高级编程(二)Qiangning Hong
 
Python在豆瓣的应用
Python在豆瓣的应用Python在豆瓣的应用
Python在豆瓣的应用Qiangning Hong
 
Python Advanced – Building on the foundation
Python Advanced – Building on the foundationPython Advanced – Building on the foundation
Python Advanced – Building on the foundationKevlin Henney
 
The new Odoo warehouse management system
The new Odoo warehouse management systemThe new Odoo warehouse management system
The new Odoo warehouse management systemOdoo
 

Destaque (20)

xlwings – Make Excel Fly with Python
xlwings – Make Excel Fly with Pythonxlwings – Make Excel Fly with Python
xlwings – Make Excel Fly with Python
 
Python + Excel
Python + Excel Python + Excel
Python + Excel
 
xlwings - Connecting Python with Excel
xlwings - Connecting Python with Excelxlwings - Connecting Python with Excel
xlwings - Connecting Python with Excel
 
Python. Finance. Excel. - The Thalesians
Python. Finance. Excel. - The ThalesiansPython. Finance. Excel. - The Thalesians
Python. Finance. Excel. - The Thalesians
 
xlwings Presentation (Excel & Python) Swiss FinteCH event
xlwings Presentation (Excel & Python) Swiss FinteCH eventxlwings Presentation (Excel & Python) Swiss FinteCH event
xlwings Presentation (Excel & Python) Swiss FinteCH event
 
Scraping in 60 minutes
Scraping in 60 minutesScraping in 60 minutes
Scraping in 60 minutes
 
Lobbycloud .- how they are writing your laws
Lobbycloud .- how they are writing your lawsLobbycloud .- how they are writing your laws
Lobbycloud .- how they are writing your laws
 
Don Bailey - A Million Little Tracking Devices
Don Bailey  - A Million Little Tracking DevicesDon Bailey  - A Million Little Tracking Devices
Don Bailey - A Million Little Tracking Devices
 
29c3 OpenBTS workshop - Mini-Workshop
29c3 OpenBTS workshop - Mini-Workshop29c3 OpenBTS workshop - Mini-Workshop
29c3 OpenBTS workshop - Mini-Workshop
 
How To Automate Part 1
How To Automate Part 1How To Automate Part 1
How To Automate Part 1
 
DAB+ for local and community radio
DAB+ for local and community radioDAB+ for local and community radio
DAB+ for local and community radio
 
Python高级编程(二)
Python高级编程(二)Python高级编程(二)
Python高级编程(二)
 
Python and ArcGIS 10.1
Python and ArcGIS 10.1Python and ArcGIS 10.1
Python and ArcGIS 10.1
 
ArcGIS Python Programming (3Nov11)
ArcGIS Python Programming (3Nov11)ArcGIS Python Programming (3Nov11)
ArcGIS Python Programming (3Nov11)
 
Python在豆瓣的应用
Python在豆瓣的应用Python在豆瓣的应用
Python在豆瓣的应用
 
20 cool things python
20 cool things python20 cool things python
20 cool things python
 
Biz plan
Biz planBiz plan
Biz plan
 
Mixing Python and Java
Mixing Python and JavaMixing Python and Java
Mixing Python and Java
 
Python Advanced – Building on the foundation
Python Advanced – Building on the foundationPython Advanced – Building on the foundation
Python Advanced – Building on the foundation
 
The new Odoo warehouse management system
The new Odoo warehouse management systemThe new Odoo warehouse management system
The new Odoo warehouse management system
 

Semelhante a Creating Excel files with Python and XlsxWriter

JavaScript - Chapter 12 - Document Object Model
  JavaScript - Chapter 12 - Document Object Model  JavaScript - Chapter 12 - Document Object Model
JavaScript - Chapter 12 - Document Object ModelWebStackAcademy
 
PYTHON FOR SPREADSHEET USERS.pptx
PYTHON FOR SPREADSHEET USERS.pptxPYTHON FOR SPREADSHEET USERS.pptx
PYTHON FOR SPREADSHEET USERS.pptxrmlkmrPphtt
 
The Ring programming language version 1.7 book - Part 17 of 196
The Ring programming language version 1.7 book - Part 17 of 196The Ring programming language version 1.7 book - Part 17 of 196
The Ring programming language version 1.7 book - Part 17 of 196Mahmoud Samir Fayed
 
AD215 - Practical Magic with DXL
AD215 - Practical Magic with DXLAD215 - Practical Magic with DXL
AD215 - Practical Magic with DXLStephan H. Wissel
 
Session 3.2 Your first excel and word automations
Session 3.2 Your first excel and word automationsSession 3.2 Your first excel and word automations
Session 3.2 Your first excel and word automationsCristina Vidu
 
Microsoft Excel Tutorial
Microsoft Excel TutorialMicrosoft Excel Tutorial
Microsoft Excel TutorialFaHaD .H. NooR
 
Introduction to Python for Plone developers
Introduction to Python for Plone developersIntroduction to Python for Plone developers
Introduction to Python for Plone developersJim Roepcke
 
Making WorkFlows XML Report Output Work For You
Making WorkFlows XML Report Output Work For YouMaking WorkFlows XML Report Output Work For You
Making WorkFlows XML Report Output Work For YouLOUIS Libraries
 
Getting Started With Xsl Templates
Getting Started With Xsl TemplatesGetting Started With Xsl Templates
Getting Started With Xsl TemplatesWill Trillich
 
The Ring programming language version 1.6 book - Part 16 of 189
The Ring programming language version 1.6 book - Part 16 of 189The Ring programming language version 1.6 book - Part 16 of 189
The Ring programming language version 1.6 book - Part 16 of 189Mahmoud Samir Fayed
 
Exploiting JXL using Selenium
Exploiting JXL using SeleniumExploiting JXL using Selenium
Exploiting JXL using SeleniumOSSCube
 
The Ring programming language version 1.5.3 book - Part 18 of 184
The Ring programming language version 1.5.3 book - Part 18 of 184The Ring programming language version 1.5.3 book - Part 18 of 184
The Ring programming language version 1.5.3 book - Part 18 of 184Mahmoud Samir Fayed
 
XMLPublisher
XMLPublisherXMLPublisher
XMLPublisherJAYAARC
 

Semelhante a Creating Excel files with Python and XlsxWriter (20)

Apache poi tutorial
Apache poi tutorialApache poi tutorial
Apache poi tutorial
 
Apachepoitutorial
ApachepoitutorialApachepoitutorial
Apachepoitutorial
 
JavaScript - Chapter 12 - Document Object Model
  JavaScript - Chapter 12 - Document Object Model  JavaScript - Chapter 12 - Document Object Model
JavaScript - Chapter 12 - Document Object Model
 
PHP - Introduction to PHP Date and Time Functions
PHP -  Introduction to  PHP Date and Time FunctionsPHP -  Introduction to  PHP Date and Time Functions
PHP - Introduction to PHP Date and Time Functions
 
PYTHON FOR SPREADSHEET USERS.pptx
PYTHON FOR SPREADSHEET USERS.pptxPYTHON FOR SPREADSHEET USERS.pptx
PYTHON FOR SPREADSHEET USERS.pptx
 
VSTO
VSTOVSTO
VSTO
 
The Ring programming language version 1.7 book - Part 17 of 196
The Ring programming language version 1.7 book - Part 17 of 196The Ring programming language version 1.7 book - Part 17 of 196
The Ring programming language version 1.7 book - Part 17 of 196
 
AD215 - Practical Magic with DXL
AD215 - Practical Magic with DXLAD215 - Practical Magic with DXL
AD215 - Practical Magic with DXL
 
Python openpyxl
Python openpyxlPython openpyxl
Python openpyxl
 
Session 3.2 Your first excel and word automations
Session 3.2 Your first excel and word automationsSession 3.2 Your first excel and word automations
Session 3.2 Your first excel and word automations
 
Part 7
Part 7Part 7
Part 7
 
Microsoft Excel Tutorial
Microsoft Excel TutorialMicrosoft Excel Tutorial
Microsoft Excel Tutorial
 
Introduction to Python for Plone developers
Introduction to Python for Plone developersIntroduction to Python for Plone developers
Introduction to Python for Plone developers
 
Making WorkFlows XML Report Output Work For You
Making WorkFlows XML Report Output Work For YouMaking WorkFlows XML Report Output Work For You
Making WorkFlows XML Report Output Work For You
 
Introduction to Microsoft Excel
Introduction to Microsoft ExcelIntroduction to Microsoft Excel
Introduction to Microsoft Excel
 
Getting Started With Xsl Templates
Getting Started With Xsl TemplatesGetting Started With Xsl Templates
Getting Started With Xsl Templates
 
The Ring programming language version 1.6 book - Part 16 of 189
The Ring programming language version 1.6 book - Part 16 of 189The Ring programming language version 1.6 book - Part 16 of 189
The Ring programming language version 1.6 book - Part 16 of 189
 
Exploiting JXL using Selenium
Exploiting JXL using SeleniumExploiting JXL using Selenium
Exploiting JXL using Selenium
 
The Ring programming language version 1.5.3 book - Part 18 of 184
The Ring programming language version 1.5.3 book - Part 18 of 184The Ring programming language version 1.5.3 book - Part 18 of 184
The Ring programming language version 1.5.3 book - Part 18 of 184
 
XMLPublisher
XMLPublisherXMLPublisher
XMLPublisher
 

Último

Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Victor Rentea
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxRustici Software
 
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Orbitshub
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century educationjfdjdjcjdnsjd
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWERMadyBayot
 
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...apidays
 
Platformless Horizons for Digital Adaptability
Platformless Horizons for Digital AdaptabilityPlatformless Horizons for Digital Adaptability
Platformless Horizons for Digital AdaptabilityWSO2
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Victor Rentea
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodJuan lago vázquez
 
Exploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusExploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusZilliz
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FMESafe Software
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native ApplicationsWSO2
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MIND CTI
 
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot ModelMcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot ModelDeepika Singh
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businesspanagenda
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...apidays
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsNanddeep Nachan
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAndrey Devyatkin
 
WSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering DevelopersWSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering DevelopersWSO2
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...Zilliz
 

Último (20)

Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptx
 
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
 
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
 
Platformless Horizons for Digital Adaptability
Platformless Horizons for Digital AdaptabilityPlatformless Horizons for Digital Adaptability
Platformless Horizons for Digital Adaptability
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
Exploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusExploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with Milvus
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot ModelMcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectors
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
WSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering DevelopersWSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering Developers
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
 

Creating Excel files with Python and XlsxWriter

  • 1. Creating Excel files with Python and XlsxWriter John McNamara Emutex Ltd
  • 2. whoami John McNamara Software developer at Emutex Ltd http://www.emutex.com http://github.com/jmcnamara
  • 3. Why Excel • • • • • Bosses like it Useful as a data source More useful with formatting Input/output source for Pandas Can be misused: Excel as a database
  • 4. Available Python modules • csv.py Readers and writers in core libs • xlwt/xlrd Mature, stable modules, mainly XLS support • openpyxl Reads and writes XLSX files • xlsxwriter New module from early 2013
  • 5. Excel File Formats Excel 2003 : xls Excel 2007 : xlsx xlwt xlsxwriter Write Read openpyxl xlrd
  • 6. XlsxWriter • • • • • Write Excel XLSX files only Doesn’t read or re-write Excel files Adds many new features Uses core modules only Python 2.5, 2.6, 2.7, 3.1, 3.2, 3.3, PyPy, Jython
  • 7. Why another module • • Why not? • XlsxWriter adds support for: Other modules support some but not all features charts, autofilters, tables, data validation, merged cells, rich text, conditional formatting, defined names, images, cell comments, sparklines, outlines
  • 8. Getting Started • Install: $ sudo pip install xlsxwriter • Clone or fork: $ git clone git@github.com:jmcnamara/XlsxWriter.git $ cd XlsxWriter $ make test $ sudo python setup.py install • Read: https://xlsxwriter.readthedocs.org
  • 10. Hello World.xlsx import xlsxwriter workbook = xlsxwriter.Workbook('hello_world.xlsx') worksheet = workbook.add_worksheet() worksheet.write(0, 0, 'Hello world') workbook.close()
  • 11. Hello World.xlsx import xlsxwriter workbook = xlsxwriter.Workbook('hello_world.xlsx') worksheet = workbook.add_worksheet() worksheet.write(0, 0, 'Hello world') workbook.close()
  • 12. Hello World.xlsx import xlsxwriter workbook = xlsxwriter.Workbook('hello_world.xlsx') worksheet = workbook.add_worksheet() worksheet.write(0, 0, 'Hello world') worksheet.write(2, 1, 'Hello world') workbook.close()
  • 13. Hello World.xlsx import xlsxwriter workbook = xlsxwriter.Workbook('hello_world.xlsx') worksheet = workbook.add_worksheet() worksheet.write(0, 0, 'Hello world') worksheet.write(2, 1, 'Hello world') worksheet.write('C5', 'Hello world') workbook.close()
  • 15. Cell Formatting import xlsxwriter workbook = xlsxwriter.Workbook('formatting.xlsx') worksheet = workbook.add_worksheet() italic = workbook.add_format({'italic': True}) bold = workbook.add_format({'bold': True, 'font_color': '#9CB640'}) worksheet.write(0, 0, 'Hello') workbook.close()
  • 16. Cell Formatting import xlsxwriter workbook = xlsxwriter.Workbook('formatting.xlsx') worksheet = workbook.add_worksheet() italic = workbook.add_format({'italic': True}) bold = workbook.add_format({'bold': True, 'font_color': '#9CB640'}) worksheet.write(0, 0, 'Hello') worksheet.write(1, 0, 'Hello', italic) workbook.close()
  • 17. Cell Formatting import xlsxwriter workbook = xlsxwriter.Workbook('formatting.xlsx') worksheet = workbook.add_worksheet() italic = workbook.add_format({'italic': True}) bold = workbook.add_format({'bold': True, 'font_color': '#9CB640'}) worksheet.write(0, 0, 'Hello') worksheet.write(1, 0, 'Hello', italic) worksheet.write(2, 0, 'Hello', bold) workbook.close()
  • 19. Types
  • 20. Types from datetime import date import xlsxwriter workbook = xlsxwriter.Workbook('types.xlsx') worksheet = workbook.add_worksheet() date_format = workbook.add_format({'num_format': 'd mmm yyyy'}) worksheet.write(0, 0, 'Hello world') workbook.close()
  • 21. Types from datetime import date import xlsxwriter workbook = xlsxwriter.Workbook('types.xlsx') worksheet = workbook.add_worksheet() date_format = workbook.add_format({'num_format': 'd mmm yyyy'}) worksheet.write(0, 0, 'Hello world') workbook.close()
  • 22. Types from datetime import date import xlsxwriter workbook = xlsxwriter.Workbook('types.xlsx') worksheet = workbook.add_worksheet() date_format = workbook.add_format({'num_format': 'd mmm yyyy'}) worksheet.write(0, 0, 'Hello world') worksheet.write(1, 0, 'Это фраза на русском!') workbook.close()
  • 23. Types from datetime import date import xlsxwriter workbook = xlsxwriter.Workbook('types.xlsx') worksheet = workbook.add_worksheet() date_format = workbook.add_format({'num_format': 'd mmm yyyy'}) worksheet.write(0, 0, 'Hello world') worksheet.write(1, 0, 'Это фраза на русском!') worksheet.write(2, 0, 123) workbook.close()
  • 24. Types from datetime import date import xlsxwriter workbook = xlsxwriter.Workbook('types.xlsx') worksheet = workbook.add_worksheet() date_format = workbook.add_format({'num_format': 'd mmm yyyy'}) worksheet.write(0, worksheet.write(1, worksheet.write(2, worksheet.write(3, workbook.close() 0, 0, 0, 0, 'Hello world') 'Это фраза на русском!') 123) 123.456)
  • 25. Types from datetime import date import xlsxwriter workbook = xlsxwriter.Workbook('types.xlsx') worksheet = workbook.add_worksheet() date_format = workbook.add_format({'num_format': 'd mmm yyyy'}) worksheet.write(0, worksheet.write(1, worksheet.write(2, worksheet.write(3, worksheet.write(4, workbook.close() 0, 0, 0, 0, 0, 'Hello world') 'Это фраза на русском!') 123) 123.456) date(2013, 10, 13), date_format)
  • 26. Types from datetime import date import xlsxwriter workbook = xlsxwriter.Workbook('types.xlsx') worksheet = workbook.add_worksheet() date_format = workbook.add_format({'num_format': 'd mmm yyyy'}) worksheet.write(0, worksheet.write(1, worksheet.write(2, worksheet.write(3, worksheet.write(4, worksheet.write(5, workbook.close() 0, 0, 0, 0, 0, 0, 'Hello world') 'Это фраза на русском!') 123) 123.456) date(2013, 10, 13), date_format) '=PI()')
  • 27. Types from datetime import date import xlsxwriter workbook = xlsxwriter.Workbook('types.xlsx') worksheet = workbook.add_worksheet() date_format = workbook.add_format({'num_format': 'd mmm yyyy'}) worksheet.write(0, worksheet.write(1, worksheet.write(2, worksheet.write(3, worksheet.write(4, worksheet.write(5, worksheet.write(6, workbook.close() 0, 0, 0, 0, 0, 0, 0, 'Hello world') 'Это фраза на русском!') 123) 123.456) date(2013, 10, 13), date_format) '=PI()') 'http://python.com')
  • 28. Types from datetime import date import xlsxwriter workbook = xlsxwriter.Workbook('types.xlsx') worksheet = workbook.add_worksheet() date_format = workbook.add_format({'num_format': 'd mmm yyyy'}) worksheet.write(0, worksheet.write(1, worksheet.write(2, worksheet.write(3, worksheet.write(4, worksheet.write(5, worksheet.write(6, worksheet.write(7, workbook.close() 0, 0, 0, 0, 0, 0, 0, 0, 'Hello world') 'Это фраза на русском!') 123) 123.456) date(2013, 10, 13), date_format) '=PI()') 'http://python.com') True)
  • 29. Types from datetime import date import xlsxwriter workbook = xlsxwriter.Workbook('types.xlsx') worksheet = workbook.add_worksheet() date_format = workbook.add_format({'num_format': 'd mmm yyyy'}) worksheet.write(0, worksheet.write(1, worksheet.write(2, worksheet.write(3, worksheet.write(4, worksheet.write(5, worksheet.write(6, worksheet.write(7, workbook.close() 0, 0, 0, 0, 0, 0, 0, 0, 'Hello world') 'Это фраза на русском!') 123) 123.456) date(2013, 10, 13), date_format) '=PI()') 'http://python.com') True)
  • 30. Types from datetime import date import xlsxwriter workbook = xlsxwriter.Workbook('types.xlsx') worksheet = workbook.add_worksheet() date_format = workbook.add_format({'num_format': 'd mmm yyyy'}) worksheet.write worksheet.write worksheet.write worksheet.write worksheet.write worksheet.write worksheet.write worksheet.write workbook.close() (0, (1, (2, (3, (4, (5, (6, (7, 0, 0, 0, 0, 0, 0, 0, 0, 'Hello world') 'Это фраза на русском!') 123) 123.456) date(2013, 10, 13), date_format) '=PI()') 'http://python.com') True)
  • 31. Types from datetime import date import xlsxwriter workbook = xlsxwriter.Workbook('types.xlsx') worksheet = workbook.add_worksheet() date_format = workbook.add_format({'num_format': 'd mmm yyyy'}) worksheet.write_string (0, worksheet.write_string (1, worksheet.write_number (2, worksheet.write_number (3, worksheet.write_datetime(4, worksheet.write_formula (5, worksheet.write_url (6, worksheet.write_boolean (7, workbook.close() 0, 0, 0, 0, 0, 0, 0, 0, 'Hello world') 'Это фраза на русском!') 123) 123.456) date(2013, 10, 13), date_format) '=PI()') 'http://python.com') True)
  • 33. Formulas worksheet.write_formula('A1', '=1+2') worksheet.write_formula('A2', '=A1') worksheet.write_formula('A3', '{=SUM(B1:C1*B2:C2)}') worksheet.write_formula('A4', '=VLOOKUP("Acme", A2:D6, 3, FALSE)')
  • 35. Images import xlsxwriter workbook = xlsxwriter.Workbook('image.xlsx') worksheet = workbook.add_worksheet() worksheet.insert_image(0, 0, 'logo.png') workbook.close()
  • 37. Conditional Formatting import xlsxwriter wb = xlsxwriter.Workbook('conditional_format.xlsx') ws = wb.add_worksheet() high = wb.add_format({'bg_color': '#FFC7CE', 'font_color': '#9C0006'}) low = wb.add_format({'bg_color': '#C6EFCE', 'font_color': '#006100'}) data = [ [88, [24, [6, [73, [36, ] 25, 100, 57, 78, 54, 33, 20, 88, 1, 22, 23, 88, 28, 96, 66, 67, 29, 10, 26, 81, 13], 33], 26], 45], 90], for row, row_data in enumerate(data): ws.write_row(row, 0, row_data) ws.conditional_format('A1:F5', {'type': 'criteria': 'value': 'format': 'cell', '>=', 50, high}) ws.conditional_format('A1:F5', {'type': 'criteria': 'value': 'format': 'cell', '<', 50, low}) wb.close()
  • 40. Charts import xlsxwriter workbook = xlsxwriter.Workbook('chart.xlsx') worksheet = workbook.add_worksheet() # Add the worksheet data to be plotted. data = [10, 40, 50, 20, 10, 50] worksheet.write_column('A1', data) # Create a new chart object. chart = workbook.add_chart({'type': 'area'}) # Add a series to the chart. chart.add_series({'values': '=Sheet1!$A$1:$A$6'}) # Insert the chart into the worksheet. worksheet.insert_chart('C1', chart) workbook.close()
  • 54. Autofilters import xlsxwriter workbook = xlsxwriter.Workbook('autofilter.xlsx') worksheet = workbook.add_worksheet() # Add a format for the headers. header_format = workbook.add_format({'bold': 1, 'bg_color': '#C6EFCE'}) # Populate the worksheet data. # See the xlsxwriter docs for a full example. ... # Make the columns wider. worksheet.set_column('A:D', 12) # Format the header row. worksheet.set_row(0, 20, header_format) # Set the autofilter. worksheet.autofilter('A1:D51') workbook.close()
  • 56. Tables • • • Group a range of cells into a single entity Apply a uniform formatting across the cells Refer to the table in formulas worksheet.add_table('B3:F7', {options})
  • 58. Data Validation • • • Restrict data entry to certain ranges Raise errors/warning within Excel Allow selection from drop down lists data_validation( 'B25', {'validate': 'integer', 'criteria': 'between', 'minimum': 1, 'maximum': 10})
  • 60. Cell Comments • Add comments to cells worksheet.write('A1', 'Hello') worksheet.write_comment('A1', 'This is a comment')
  • 62. Sparklines • • Mini charts within cells to show trends Invented by Edward Tufte
  • 63. Code All the Things! • Lots of features
  • 64. Code All the Things! • • • • Lots of features Useful when you need them Ignore them when you don’t Plenty of examples and documentation to get you started
  • 65. How does it work
  • 66. How does it work • 20% of a studio audience guessed Witchcraft
  • 67. How does it work • • • • 20% of a studio audience guessed Witchcraft Actually a collection of XML files in a Zip file Can be unzipped using standard utilities Even modified in-place (if you are desperate)
  • 68. How does it work $ unzip -o -d hello_world hello_world.xlsx Archive: hello_world.xlsx inflating: hello_world/[Content_Types].xml inflating: hello_world/_rels/.rels inflating: hello_world/docProps/app.xml inflating: hello_world/docProps/core.xml inflating: hello_world/xl/sharedStrings.xml inflating: hello_world/xl/styles.xml inflating: hello_world/xl/workbook.xml inflating: hello_world/xl/_rels/workbook.xml.rels inflating: hello_world/xl/theme/theme1.xml inflating: hello_world/xl/worksheets/sheet1.xml
  • 69. How does it work $ unzip -o -d hello_world hello_world.xlsx Archive: hello_world.xlsx inflating: hello_world/[Content_Types].xml inflating: hello_world/_rels/.rels inflating: hello_world/docProps/app.xml inflating: hello_world/docProps/core.xml inflating: hello_world/xl/sharedStrings.xml inflating: hello_world/xl/styles.xml inflating: hello_world/xl/workbook.xml inflating: hello_world/xl/_rels/workbook.xml.rels inflating: hello_world/xl/theme/theme1.xml inflating: hello_world/xl/worksheets/sheet1.xml
  • 70. How does it work $ unzip -o -d hello_world hello_world.xlsx Archive: hello_world.xlsx inflating: hello_world/[Content_Types].xml inflating: hello_world/_rels/.rels inflating: hello_world/docProps/app.xml inflating: hello_world/docProps/core.xml inflating: hello_world/xl/sharedStrings.xml inflating: hello_world/xl/styles.xml inflating: hello_world/xl/workbook.xml inflating: hello_world/xl/_rels/workbook.xml.rels inflating: hello_world/xl/theme/theme1.xml inflating: hello_world/xl/worksheets/sheet1.xml
  • 71. How does it work $ unzip -o -d hello_world hello_world.xlsx Archive: hello_world.xlsx inflating: hello_world/[Content_Types].xml inflating: hello_world/_rels/.rels inflating: hello_world/docProps/app.xml inflating: hello_world/docProps/core.xml inflating: hello_world/xl/sharedStrings.xml inflating: hello_world/xl/styles.xml inflating: hello_world/xl/workbook.xml inflating: hello_world/xl/_rels/workbook.xml.rels inflating: hello_world/xl/theme/theme1.xml inflating: hello_world/xl/worksheets/sheet1.xml $ xmllint --format hello_world/xl/worksheets/sheet1.xml
  • 72. How does it work $ unzip -o -d hello_world hello_world.xlsx ... $ xmllint --format hello_world/xl/worksheets/sheet1.xml
  • 73. How does it work $ unzip -o -d hello_world hello_world.xlsx ... $ xmllint --format hello_world/xl/worksheets/sheet1.xml <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <worksheet xmlns="..." xmlns:r="..."> <dimension ref="A1"/> <sheetViews> <sheetView tabSelected="1" workbookViewId="0"/> </sheetViews> <sheetFormatPr defaultRowHeight="15"/> <sheetData> <row r="1" spans="1:1"> <c r="A1" t="s"> <v>0</v> </c> </row> </sheetData> <pageMargins left="0.7" right="0.7" top="0.75" bottom="0.75" header="0.3" footer="0.3"/> </worksheet>
  • 74. How does it work $ unzip -o -d hello_world hello_world.xlsx ... $ xmllint --format hello_world/xl/worksheets/sheet1.xml <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <worksheet xmlns="..." xmlns:r="..."> <dimension ref="A1"/> <sheetViews> <sheetView tabSelected="1" workbookViewId="0"/> </sheetViews> <sheetFormatPr defaultRowHeight="15"/> <sheetData> <row r="1" spans="1:1"> <c r="A1" t="s"> <v>0</v> </c> </row> </sheetData> <pageMargins left="0.7" right="0.7" top="0.75" bottom="0.75" header="0.3" footer="0.3"/> </worksheet>
  • 75. How does it work $ unzip -o -d hello_world hello_world.xlsx ... $ xmllint --format hello_world/xl/worksheets/sheet1.xml <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <worksheet xmlns="..." xmlns:r="..."> <dimension ref="A1"/> <sheetViews> <sheetView tabSelected="1" workbookViewId="0"/> </sheetViews> <sheetFormatPr defaultRowHeight="15"/> <sheetData> <row r="1" spans="1:1"> <c r="A1" t="s"> <v>0</v> </c> </row> </sheetData> <pageMargins left="0.7" right="0.7" top="0.75" bottom="0.75" header="0.3" footer="0.3"/> </worksheet>
  • 76. How does it work $ unzip -o -d hello_world hello_world.xlsx ... $ xmllint --format hello_world/xl/worksheets/sheet1.xml <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <worksheet xmlns="..." xmlns:r="..."> <dimension ref="A1"/> <sheetViews> <sheetView tabSelected="1" workbookViewId="0"/> </sheetViews> <sheetFormatPr defaultRowHeight="15"/> <sheetData> <row r="1" spans="1:1"> <c r="A1" t="s"> <v>0</v> </c> </row> </sheetData> <pageMargins left="0.7" right="0.7" top="0.75" bottom="0.75" header="0.3" footer="0.3"/> </worksheet>
  • 77. How does it work $ unzip -o -d hello_world hello_world.xlsx ... $ xmllint --format hello_world/xl/worksheets/sheet1.xml <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <worksheet xmlns="..." xmlns:r="..."> <dimension ref="A1"/> <sheetViews> <sheetView tabSelected="1" workbookViewId="0"/> </sheetViews> <sheetFormatPr defaultRowHeight="15"/> <sheetData> <row r="1" spans="1:1"> <c r="A1" t="s"> <v>0</v> </c> </row> </sheetData> <pageMargins left="0.7" right="0.7" top="0.75" bottom="0.75" header="0.3" footer="0.3"/> </worksheet>
  • 78. How does it work $ unzip -o -d hello_world hello_world.xlsx ... $ xmllint --format hello_world/xl/worksheets/sheet1.xml <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <worksheet xmlns="..." xmlns:r="..."> <dimension ref="A1"/> <sheetViews> <sheetView tabSelected="1" workbookViewId="0"/> </sheetViews> <sheetFormatPr defaultRowHeight="15"/> <sheetData> <row r="1" spans="1:1"> <c r="A1" t="s"> <v>0</v> </c> </row> </sheetData> <pageMargins left="0.7" right="0.7" top="0.75" bottom="0.75" header="0.3" footer="0.3"/> </worksheet>
  • 79. How does it work • • It works well XlsxWriter does the hard work so you don’t have to
  • 80. close() • Next time you need to write an Excel file with Python try XlsxWriter • Clone it on Github, submit issues, add stars http://github.com/jmcnamara/XlsxWriter • Read the documentation https://xlsxwriter.readthedocs.org PDF tutorial, cookbook and manual