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

What Is Kali Nethunter?
What Is Kali Nethunter?What Is Kali Nethunter?
What Is Kali Nethunter?
Simplilearn
 
Docker Compose | Docker Compose Tutorial | Docker Tutorial For Beginners | De...
Docker Compose | Docker Compose Tutorial | Docker Tutorial For Beginners | De...Docker Compose | Docker Compose Tutorial | Docker Tutorial For Beginners | De...
Docker Compose | Docker Compose Tutorial | Docker Tutorial For Beginners | De...
Simplilearn
 

Mais procurados (20)

Git & git hub
Git & git hubGit & git hub
Git & git hub
 
Workshop on Git and GitHub
Workshop on Git and GitHubWorkshop on Git and GitHub
Workshop on Git and GitHub
 
OpenDaylight 소개
OpenDaylight 소개OpenDaylight 소개
OpenDaylight 소개
 
Introduction to Django
Introduction to DjangoIntroduction to Django
Introduction to Django
 
What Is Kali Nethunter?
What Is Kali Nethunter?What Is Kali Nethunter?
What Is Kali Nethunter?
 
Go Programming language, golang
Go Programming language, golangGo Programming language, golang
Go Programming language, golang
 
Lvm advanced topics
Lvm advanced topicsLvm advanced topics
Lvm advanced topics
 
Go lang
Go langGo lang
Go lang
 
XSS 에 대해서 알아보자. [실습 포함]
XSS 에 대해서 알아보자. [실습 포함]XSS 에 대해서 알아보자. [실습 포함]
XSS 에 대해서 알아보자. [실습 포함]
 
Web develop in flask
Web develop in flaskWeb develop in flask
Web develop in flask
 
CI/CD for React Native
CI/CD for React NativeCI/CD for React Native
CI/CD for React Native
 
Three Lessons about Gatling and Microservices
Three Lessons about Gatling and MicroservicesThree Lessons about Gatling and Microservices
Three Lessons about Gatling and Microservices
 
Taller docker _es-cl
Taller docker _es-clTaller docker _es-cl
Taller docker _es-cl
 
The Javascript Ecosystem
The Javascript EcosystemThe Javascript Ecosystem
The Javascript Ecosystem
 
Top 5 Frameworks In Python | Django, Web2Py, Flask, Bottle, CherryPy | Edureka
Top 5 Frameworks In Python | Django, Web2Py, Flask, Bottle, CherryPy | EdurekaTop 5 Frameworks In Python | Django, Web2Py, Flask, Bottle, CherryPy | Edureka
Top 5 Frameworks In Python | Django, Web2Py, Flask, Bottle, CherryPy | Edureka
 
Git & GitHub for Beginners
Git & GitHub for BeginnersGit & GitHub for Beginners
Git & GitHub for Beginners
 
Github basics
Github basicsGithub basics
Github basics
 
Docker Compose | Docker Compose Tutorial | Docker Tutorial For Beginners | De...
Docker Compose | Docker Compose Tutorial | Docker Tutorial For Beginners | De...Docker Compose | Docker Compose Tutorial | Docker Tutorial For Beginners | De...
Docker Compose | Docker Compose Tutorial | Docker Tutorial For Beginners | De...
 
FlutterでのWidgetツリーへの状態伝播とアクセス制限の基本戦略
FlutterでのWidgetツリーへの状態伝播とアクセス制限の基本戦略FlutterでのWidgetツリーへの状態伝播とアクセス制限の基本戦略
FlutterでのWidgetツリーへの状態伝播とアクセス制限の基本戦略
 
Web technologies: HTTP
Web technologies: HTTPWeb technologies: HTTP
Web technologies: HTTP
 

Destaque

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
Source Conference
 
The new Odoo warehouse management system
The new Odoo warehouse management systemThe new Odoo warehouse management system
The new Odoo warehouse management system
Odoo
 

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

Getting Started With Xsl Templates
Getting Started With Xsl TemplatesGetting Started With Xsl Templates
Getting Started With Xsl Templates
Will Trillich
 

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

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
Safe Software
 
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
panagenda
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
?#DUbAI#??##{{(☎️+971_581248768%)**%*]'#abortion pills for sale in dubai@
 
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
Victor Rentea
 

Último (20)

Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
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...
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024
 
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
Apidays New York 2024 - APIs in 2030: The Risk of Technological Sleepwalk by ...
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
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
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
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
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
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
 
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
 
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
 
AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024
 
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
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
Cyberprint. Dark Pink Apt Group [EN].pdf
Cyberprint. Dark Pink Apt Group [EN].pdfCyberprint. Dark Pink Apt Group [EN].pdf
Cyberprint. Dark Pink Apt Group [EN].pdf
 

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