Python中的模块--XlsxWriter

如何将Python中的数据保存到Excel展现出来?我们可以使用XlsxWriter模块来实现。

首先是使用pip来直接安装:(Centos系统)

pip install XlsxWriter

我们做个实验来验证是否安装成功:

import xlsxwriter

workbook = xlsxwriter.Workbook('hello.xlsx')
worksheet = workbook.add_worksheet()

worksheet.write('A1', 'Hello world')

workbook.close()

将文件保存为hello.py并且运行:

python hello.py

运行成功后将输出文件hello.xlsx,文件应该和下图类似:

Paste_Image.png

官网教程一:创建一个简单的XLSX文件


假设我们有一些月度支出的数据,我们希望将其转换为Excel XLSX文件:

expenses = (
    ['Rent', 1000],
    ['Gas',   100],
    ['Food',  300],
    ['Gym',    50],
)

为了做到这一点,我们写个小程序吧:

import xlsxwriter

#创建一个工作簿并添加一张工作表,当然工作表是可以命名的
workbook = xlsxwriter.Workbook('Expenses01.xlsx')
worksheet = workbook.add_worksheet()

# 下面是我们要插入的数据
expenses = (
    ['Rent', 1000],
    ['Gas',   100],
    ['Food',  300],
    ['Gym',    50],
)

# 从第一个单元格开始,行和列的索引均为0
row = 0
col = 0

# 迭代数据并逐行写入
for item, cost in (expenses):
    worksheet.write(row, col,     item)
    worksheet.write(row, col + 1, cost)
    row += 1

# 写一个公式,计算出总和
worksheet.write(row, 0, 'Total')
worksheet.write(row, 1, '=SUM(B1:B4)')

workbook.close()

这是一个简单的例子,但涉及的步骤代表使用XlsxWriter的所有程序:

我们使用Workbook()来创建工作簿,里面必须有一个参数即我们要创建的工作簿的名字:

workbook = xlsxwriter.Workbook('Expenses01.xlsx')

注意:XlsxWriter只能创建文件,不能读取或修改现有的文件。
然后使用工作簿对象通过该add_worksheet()方法添加新工作表 :

worksheet = workbook.add_worksheet()

默认情况下,电子表格中的工作表名称将是Sheet1,Sheet2等,但我们也可以指定名称:

worksheet1 = workbook.add_worksheet()        # Defaults to Sheet1.
worksheet2 = workbook.add_worksheet('Data')  # Data.
worksheet3 = workbook.add_worksheet()        # Defaults to Sheet3.

然后我们可以使用工作表对象通过write() 方法写入数据:

worksheet.write(row, col, some_data)

在XlsxWriter中,行和列都是零索引。工作表中的第一个单元格A1是(0, 0)。

在栗子中我们通过迭代将数据写入表中:

# Iterate over the data and write it out row by row.
for item, cost in (expenses):
    worksheet.write(row, col,     item)
    worksheet.write(row, col + 1, cost)
    row += 1

我们添加一个公式来计算第二列中的项目总和:

worksheet.write(row, 1, '=SUM(B1:B4)')

最后,我们通过close()方法关闭Excel文件:

workbook.close()

现在,我们现在有一个文件,可以通过Excel和其他电子表格应用程序读取。


教程2:向XLSX文件添加格式
在上一节中,我们使用Python和XlsxWriter模块创建了一个简单的电子表格。

这将所需的数据转换为Excel文件,但它看起来有点裸。为了使信息更清晰,我们想添加一些简单的格式,如下所示:

Paste_Image.png

这里的区别是,我们已经以粗体字体添加了项目和成本列标题,我们已在第二列中设置了货币格式,并且我们将总字符串加粗。

为此,我们可以扩展我们的程序如下:

 import xlsxwriter

 # Create a workbook and add a worksheet.
 workbook = xlsxwriter.Workbook('Expenses02.xlsx')
 worksheet = workbook.add_worksheet()

 # 添加用于突出显示单元格的粗体格式。
 bold = workbook.add_format({'bold': True})

 # 为显式钱的单元格添加数字格式。
 money = workbook.add_format({'num_format': '$#,##0'})

 # Write some data headers.
 worksheet.write('A1', 'Item', bold)
 worksheet.write('B1', 'Cost', bold)

 # Some data we want to write to the worksheet.
 expenses = (
     ['Rent', 1000],
     ['Gas',   100],
     ['Food',  300],
     ['Gym',    50],
 )

 # Start from the first cell below the headers.
 row = 1
 col = 0

 # Iterate over the data and write it out row by row.
 for item, cost in (expenses):
     worksheet.write(row, col,     item)
     worksheet.write(row, col + 1, cost, money)
     row += 1

 # Write a total using a formula.
 worksheet.write(row, 0, 'Total',       bold)
 worksheet.write(row, 1, '=SUM(B2:B5)', money)

 workbook.close()

这个和以前的程序的主要区别是,我们添加了两个Format对象,我们可以使用它们来格式化电子表格中的单元格。
格式对象表示可应用于Excel中单元格的所有格式属性,例如字体,数字格式,颜色和边框。这在“格式类”部分中有更详细的解释。
现在我们将避免进入细节,只使用有限的格式功能添加一些简单的格式:

 # 添加用于突出显示单元格的粗体格式。
 bold = workbook.add_format({'bold': True})

 # 为显式钱的单元格添加数字格式。
 money = workbook.add_format({'num_format': '$#,##0'})

然后我们将这些格式作为可选的第三个参数传递到worksheet.write()方法来格式化单元格中的数据:

write(row, column, token, [format])

例如这样:

worksheet.write(row, 0, 'Total', bold)

教程3:将不同类型的数据写入XLSX文件

在上一节中,我们创建了一个使用Python和XlsxWriter模块格式化的简单电子表格。

这次让我们扩展我们要写的数据,以包括一些日期:

expenses  =  (
    [ 'Rent' , '2017-01-13' , 1000 ],
    [ 'Gas' ,  '2017-01-14' ,  100 ],
    [ 'Food' , '2017-01-16' ,  300 ] ,
    [ 'Gym' ,  '2017-01-20' ,   50 ],
)

相应的电子表格将如下所示:

Paste_Image.png

这里的区别是,我们添加了一个带有格式的日期列,并使该列稍宽以适应日期。

为此,我们可以扩展我们的程序如下:

 from datetime import datetime
 import xlsxwriter

 # Create a workbook and add a worksheet.
 workbook = xlsxwriter.Workbook('Expenses03.xlsx')
 worksheet = workbook.add_worksheet()

 # Add a bold format to use to highlight cells.
 bold = workbook.add_format({'bold': 1})

 # Add a number format for cells with money.
 money_format = workbook.add_format({'num_format': '$#,##0'})

 # 添加Excel日期格式。
 date_format = workbook.add_format({'num_format': 'mmmm d yyyy'})

 # 调整列宽。
 worksheet.set_column(1, 1, 15)

 # Write some data headers.
 worksheet.write('A1', 'Item', bold)
 worksheet.write('B1', 'Date', bold)
 worksheet.write('C1', 'Cost', bold)

 # Some data we want to write to the worksheet.
 expenses = (
     ['Rent', '2017-01-13', 1000],
     ['Gas',  '2017-01-14',  100],
     ['Food', '2017-01-16',  300],
     ['Gym',  '2017-01-20',   50],
 )

 # Start from the first cell below the headers.
 row = 1
 col = 0

 for item, date_str, cost in (expenses):
     # Convert the date string into a datetime object.
     date = datetime.strptime(date_str, "%Y-%m-%d")

     worksheet.write_string  (row, col,     item              )
     worksheet.write_datetime(row, col + 1, date, date_format )
     worksheet.write_number  (row, col + 2, cost, money_format)
     row += 1

 # Write a total using a formula.
 worksheet.write(row, 0, 'Total', bold)
 worksheet.write(row, 2, '=SUM(C2:C5)', money_format)

 workbook.close()

这个和以前的程序的主要区别是我们为日期添加了一个新的Format对象,我们对数据类型有额外的处理。
Excel不同地处理不同类型的输入数据,例如字符串和数字,虽然它通常对用户透明。XlsxWriter试图在工作表中模拟这 一点。write()方法通过将Python数据类型映射到Excel支持的类型。
该write()方法作为几个更具体方法的通用别名:

  • write_string()
  • write_number()
  • write_blank()
  • write_formula()
  • write_datetime()
  • write_boolean()
  • write_url()

In this version of our program we have used some of these explicit write_ methods for different types of data:

worksheet.write_string  (row, col,     item              )
worksheet.write_datetime(row, col + 1, date, date_format )
worksheet.write_number  (row, col + 2, cost, money_format)

This is mainly to show that if you need more control over the type of data you write to a worksheet you can use the appropriate method. In this simplified example the write() method would actually have worked just as well.
The handling of dates is also new to our program.

Excel中的日期和时间是应用了数字格式的浮点数,以便以正确的格式显示它们。如果日期和时间是Python datetime对象,XlsxWriter会自动进行所需的数字转换。但是,我们还需要添加数字格式以确保Excel将其显示为日期:

from datetime import datetime
...

date_format = workbook.add_format({'num_format': 'mmmm d yyyy'})
...

for item, date_str, cost in (expenses):
    # Convert the date string into a datetime object.
    date = datetime.strptime(date_str, "%Y-%m-%d")
    ...
    worksheet.write_datetime(row, col + 1, date, date_format )
    ...

The last addition to our program is the set_column() method to adjust the width of column ‘B’ so that the dates are more clearly visible:

# Adjust the column width.
worksheet.set_column('B:B', 15)
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 200,612评论 5 471
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,345评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 147,625评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,022评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,974评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,227评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,688评论 3 392
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,358评论 0 255
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,490评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,402评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,446评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,126评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,721评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,802评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,013评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,504评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,080评论 2 341

推荐阅读更多精彩内容