如何將Python中的數(shù)據(jù)保存到Excel展現(xiàn)出來敲茄?我們可以使用XlsxWriter模塊來實現(xiàn)。
首先是使用pip來直接安裝:(Centos系統(tǒng))
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多柑,文件應(yīng)該和下圖類似:
官網(wǎng)教程一:創(chuàng)建一個簡單的XLSX文件
假設(shè)我們有一些月度支出的數(shù)據(jù),我們希望將其轉(zhuǎn)換為Excel XLSX文件:
expenses = (
['Rent', 1000],
['Gas', 100],
['Food', 300],
['Gym', 50],
)
為了做到這一點楣责,我們寫個小程序吧:
import xlsxwriter
#創(chuàng)建一個工作簿并添加一張工作表竣灌,當(dāng)然工作表是可以命名的
workbook = xlsxwriter.Workbook('Expenses01.xlsx')
worksheet = workbook.add_worksheet()
# 下面是我們要插入的數(shù)據(jù)
expenses = (
['Rent', 1000],
['Gas', 100],
['Food', 300],
['Gym', 50],
)
# 從第一個單元格開始,行和列的索引均為0
row = 0
col = 0
# 迭代數(shù)據(jù)并逐行寫入
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()來創(chuàng)建工作簿,里面必須有一個參數(shù)即我們要創(chuàng)建的工作簿的名字:
workbook = xlsxwriter.Workbook('Expenses01.xlsx')
注意:XlsxWriter只能創(chuàng)建文件沮趣,不能讀取或修改現(xiàn)有的文件屯烦。
然后使用工作簿對象通過該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() 方法寫入數(shù)據(jù):
worksheet.write(row, col, some_data)
在XlsxWriter中温眉,行和列都是零索引。工作表中的第一個單元格A1是(0, 0)翁狐。
在栗子中我們通過迭代將數(shù)據(jù)寫入表中:
# 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()方法關(guān)閉Excel文件:
workbook.close()
現(xiàn)在,我們現(xiàn)在有一個文件露懒,可以通過Excel和其他電子表格應(yīng)用程序讀取闯冷。
教程2:向XLSX文件添加格式
在上一節(jié)中,我們使用Python和XlsxWriter模塊創(chuàng)建了一個簡單的電子表格懈词。
這將所需的數(shù)據(jù)轉(zhuǎn)換為Excel文件窃躲,但它看起來有點裸。為了使信息更清晰钦睡,我們想添加一些簡單的格式,如下所示:
這里的區(qū)別是躁倒,我們已經(jīng)以粗體字體添加了項目和成本列標題荞怒,我們已在第二列中設(shè)置了貨幣格式,并且我們將總字符串加粗秧秉。
為此褐桌,我們可以擴展我們的程序如下:
import xlsxwriter
# Create a workbook and add a worksheet.
workbook = xlsxwriter.Workbook('Expenses02.xlsx')
worksheet = workbook.add_worksheet()
# 添加用于突出顯示單元格的粗體格式。
bold = workbook.add_format({'bold': True})
# 為顯式錢的單元格添加數(shù)字格式象迎。
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()
這個和以前的程序的主要區(qū)別是荧嵌,我們添加了兩個Format對象,我們可以使用它們來格式化電子表格中的單元格砾淌。
格式對象表示可應(yīng)用于Excel中單元格的所有格式屬性啦撮,例如字體,數(shù)字格式汪厨,顏色和邊框赃春。這在“格式類”部分中有更詳細的解釋。
現(xiàn)在我們將避免進入細節(jié)劫乱,只使用有限的格式功能添加一些簡單的格式:
# 添加用于突出顯示單元格的粗體格式织中。
bold = workbook.add_format({'bold': True})
# 為顯式錢的單元格添加數(shù)字格式。
money = workbook.add_format({'num_format': '$#,##0'})
然后我們將這些格式作為可選的第三個參數(shù)傳遞到worksheet.write()方法來格式化單元格中的數(shù)據(jù):
write(row, column, token, [format])
例如這樣:
worksheet.write(row, 0, 'Total', bold)
教程3:將不同類型的數(shù)據(jù)寫入XLSX文件
在上一節(jié)中衷戈,我們創(chuàng)建了一個使用Python和XlsxWriter模塊格式化的簡單電子表格狭吼。
這次讓我們擴展我們要寫的數(shù)據(jù),以包括一些日期:
expenses = (
[ 'Rent' 殖妇, '2017-01-13' 刁笙, 1000 ],
[ 'Gas' , '2017-01-14' 采盒, 100 ]旧乞,
[ 'Food' , '2017-01-16' 磅氨, 300 ] 尺栖,
[ 'Gym' , '2017-01-20' 烦租, 50 ]延赌,
)
相應(yīng)的電子表格將如下所示:
這里的區(qū)別是,我們添加了一個帶有格式的日期列叉橱,并使該列稍寬以適應(yīng)日期挫以。
為此,我們可以擴展我們的程序如下:
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'})
# 調(diào)整列寬掐松。
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()
這個和以前的程序的主要區(qū)別是我們?yōu)槿掌谔砑恿艘粋€新的Format對象,我們對數(shù)據(jù)類型有額外的處理粪小。
Excel不同地處理不同類型的輸入數(shù)據(jù)大磺,例如字符串和數(shù)字,雖然它通常對用戶透明探膊。XlsxWriter試圖在工作表中模擬這 一點杠愧。write()方法通過將Python數(shù)據(jù)類型映射到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中的日期和時間是應(yīng)用了數(shù)字格式的浮點數(shù)逞壁,以便以正確的格式顯示它們流济。如果日期和時間是Python datetime對象,XlsxWriter會自動進行所需的數(shù)字轉(zhuǎn)換腌闯。但是绳瘟,我們還需要添加數(shù)字格式以確保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)