Python中的模塊--XlsxWriter

如何將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)該和下圖類似:

Paste_Image.png

官網(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文件窃躲,但它看起來有點裸。為了使信息更清晰钦睡,我們想添加一些簡單的格式,如下所示:

Paste_Image.png

這里的區(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)的電子表格將如下所示:

Paste_Image.png

這里的區(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)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市姿骏,隨后出現(xiàn)的幾起案子稽荧,更是在濱河造成了極大的恐慌,老刑警劉巖工腋,帶你破解...
    沈念sama閱讀 221,820評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件姨丈,死亡現(xiàn)場離奇詭異,居然都是意外死亡擅腰,警方通過查閱死者的電腦和手機蟋恬,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,648評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來趁冈,“玉大人歼争,你說我怎么就攤上這事拜马。” “怎么了沐绒?”我有些...
    開封第一講書人閱讀 168,324評論 0 360
  • 文/不壞的土叔 我叫張陵俩莽,是天一觀的道長。 經(jīng)常有香客問我乔遮,道長扮超,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,714評論 1 297
  • 正文 為了忘掉前任蹋肮,我火速辦了婚禮出刷,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘坯辩。我一直安慰自己馁龟,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,724評論 6 397
  • 文/花漫 我一把揭開白布漆魔。 她就那樣靜靜地躺著坷檩,像睡著了一般。 火紅的嫁衣襯著肌膚如雪改抡。 梳的紋絲不亂的頭發(fā)上矢炼,一...
    開封第一講書人閱讀 52,328評論 1 310
  • 那天,我揣著相機與錄音雀摘,去河邊找鬼。 笑死八拱,一個胖子當(dāng)著我的面吹牛阵赠,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播肌稻,決...
    沈念sama閱讀 40,897評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼清蚀,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了爹谭?” 一聲冷哼從身側(cè)響起枷邪,我...
    開封第一講書人閱讀 39,804評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎诺凡,沒想到半個月后东揣,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,345評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡腹泌,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,431評論 3 340
  • 正文 我和宋清朗相戀三年嘶卧,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片凉袱。...
    茶點故事閱讀 40,561評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡芥吟,死狀恐怖侦铜,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情钟鸵,我是刑警寧澤钉稍,帶...
    沈念sama閱讀 36,238評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站棺耍,受9級特大地震影響贡未,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜烈掠,卻給世界環(huán)境...
    茶點故事閱讀 41,928評論 3 334
  • 文/蒙蒙 一羞秤、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧左敌,春花似錦瘾蛋、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,417評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至叼风,卻和暖如春取董,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背无宿。 一陣腳步聲響...
    開封第一講書人閱讀 33,528評論 1 272
  • 我被黑心中介騙來泰國打工茵汰, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人孽鸡。 一個月前我還...
    沈念sama閱讀 48,983評論 3 376
  • 正文 我出身青樓蹂午,卻偏偏與公主長得像,于是被迫代替她去往敵國和親彬碱。 傳聞我的和親對象是個殘疾皇子豆胸,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,573評論 2 359

推薦閱讀更多精彩內(nèi)容