最近公司有項目須要導出數據到excel,
首先想到了,tablib,xlwt,xlrd,xlwings,win32com[還能夠操做word],openpyxl,等模塊
可是 實際操做中
tablib 寫入數據速度慢,操做簡單,支持xlsx,[文件生成較大],貌似一次最多寫入65536條行
xlwt 寫入速度比tablib 約快一倍,一次最大寫入行數65536條,不支持xlsx 後綴文件,
xlwings 寫入速度和tablib貌似差很少,
以上測試一次性寫入65536條,45列
win32com 寫入速度較快可是不支持跨平臺,只能在win環境下
openpyxl 簡單看了下沒有測試
xlsxWriter 寫入較快[貌似只有xlwt一半時間],支持設置樣式,各類表格,函數等,測試數據8w條35列。 最大寫入貌似1048576行16384列,只支持建立文件,
因此筆者選擇了xlsxwriter,實際學習中發現官方文檔仍是一如既往是英文的。如下是筆者本身整理的教程,不喜勿噴
以上是筆者本身測試所得,實際效果要視應用場景,運行環境,數據量,機器配置,有所不一樣。
如若讀者本身所測 數據有所不一樣,歡迎指正。
XlsxWriter是一個Python模塊,可用於在Excel 2007+ XLSX文件中將文本,數字,公式和超連接寫入多個工做表。它支持格式化等功能,包括: 100%兼容的Excel XLSX文件。 完整格式化。 合併細胞。 定義名稱。 圖表。 自動篩選。 數據驗證和下拉列表。 條件格式。 工做表PNG / JPEG / BMP / WMF / EMF圖像。 豐富的多格式字符串。 細胞評論。 文本框。 與熊貓整合。 用於寫入大文件的內存優化模式。 它支持Python 2.5,2.6,2.7,3.1,3.2,3.3,3.4,3.5,3.6,Jython和PyPy,僅使用標準庫。
#英文文檔:https://xlsxwriter.readthedocs.io/
安裝
pip install XlsxWrite
or
pip install --user XlsxWriter
若是pip 沒法使用可使用easy_install
easy_install XlsxWriter
#easy_install 百度百科:https://baike.baidu.com/item/easy_install
#更多:http://peak.telecommunity.com/DevCenter/EasyInstall
使用GitHub
$ curl -O -L http://github.com/jmcnamara/XlsxWriter/archive/master.tar.gz $ tar zxvf master.tar.gz $ cd XlsxWriter-master/ $ python setup.py install
#Sample demo 建立一個excel文件
import xlsxwriter as xw workbook = xw.Workbook('hello_world.xlsx') worksheet=workbook.add_worksheet("sheet 名稱")#還能夠設置樣式worksheet_class worksheet.write('A1','HelloWorld') row=1 col=1 worksheet.write(row,col,'第二種方式!') workbook.close()
#會在當前目錄生成一個hello_world.xlsx 文件
#XlsxWriter只能建立新文件,不能讀取或者修改現有文件
#方法支持兩種形式的表示法來指定單元格的位置:行列表示法和A1表示法:write()
excel 中方法的使用 excel函數的使用
workbook=xw.Workbook('Expenses01.xlsx') worksheet=workbook.add_worksheet('sheet 名稱') expenses = ( ['Rent', 1000], ['Gas', 100], ['Food', 300], ['Gym', 50], )
#在XlsxWriter 中 行和列 都是零 索引,A1 是(0,0) ; (0,0)是A1 row=0 col=0 # for item,cost in (expenses): # worksheet.write(row,col,item) # worksheet.write(row,col+1,cost) # row+=1 for item,cost in expenses: worksheet.write(row,col,item) worksheet.write(row,col+1,cost) row+=1 worksheet.write(row,0,'合計:') worksheet.write(row,1,'=SUM(B1:B4)')
worksheet_2=workbook.add_worksheet('sheet_2')#在添加一個工做表
worksheet_2.write(0,0,'寫入內容')
#關閉excel 文件 釋放資源
workbook.close()
Smaple:添加樣式
workbook=xw.Workbook('Expenses01.xlsx') worksheet=workbook.add_worksheet('sheet 名稱') expenses = ( ['Rent', 1000], ['Gas', 100], ['Food', 300], ['Gym', 50], ) row=0 col=0 #添加樣式 style = workbook.add_format( { 'bold':True,#粗體 'bg_color':'yellow',#背景顏色 'align':'left',#水平方向:居左, 'valign':'top'#垂直方向:頂部 } ) style_2 =workbook.add_format( { 'bold': True, # 粗體 'bg_color': 'yellow', # 背景顏色 } )
#美圓符號
money_style = workbook.add_format(
{
'num_format':'$#,##0'
}
) for item,cost in expenses: worksheet.write(row,col,item) worksheet.write(row,col+1,cost) row+=1 worksheet.write(row,0,'合計:',style) #worksheet.write(row,1,'=SUM(B1:B4)',style_2)
worksheet.write(row,1,'=SUM(B1:B4)',money_style) worksheet_2=workbook.add_worksheet('sheet_2') worksheet_2.write(0,0,'寫入內容') workbook.close()
from datetime import datetime import xlsxwriter workbook = xlsxwriter.Workbook('Expenses03.xlsx') worksheet = workbook.add_worksheet() # 添加格式 bold = workbook.add_format({'bold': 1}) # 添加格式 money_format = workbook.add_format({'num_format': '$#,##0'}) # 添加格式 date_format = workbook.add_format({'num_format': 'mmmm d yyyy'}) # 設置列的寬度 worksheet.set_column(1, 1, 15) worksheet.write('A1', 'Item', bold) worksheet.write('B1', 'Date', bold) worksheet.write('C1', 'Cost', bold) expenses = ( ['Rent', '2013-01-13', 1000], ['Gas', '2013-01-14', 100], ['Food', '2013-01-16', 300], ['Gym', '2013-01-20', 50], ) row = 1 col = 0 for item, date_str, cost in (expenses): # 將日期字符串轉換爲datetime對象。 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 worksheet.write(row, 0, '總和', bold) worksheet.write(row, 2, '=SUM(C2:C5)', money_format) workbook.close()
更多方法:
write_string()
write_number()
write_blank()
write_formula()
write_datetime()
write_boolean()
write_url()
處理數據的規則write()
以下:html
float
,int
,long
,decimal.Decimal
和 fractions.Fraction
使用寫write_number()
。datetime.datetime
,或使用寫入 。datetime.date
datetime.time
datetime.timedelta
write_datetime()
None
和空字符串""
使用write_blank()
。bool
使用write_boolean()
。
#excel 合併單元格,設置行高,設置樣式python
import xlsxwriter as xwgit
workbook = xw.Workbook('hello_world.xlsx')
worksheet=workbook.add_worksheet("sheet 名稱")#還能夠設置樣式worksheet_classgithub
merge_format = workbook.add_format({
'bold': True,
'border': 6,
'align': 'center',#水平居中
'valign': 'vcenter',#垂直居中
'fg_color': '#D7E4BC',#顏色填充
})curl
#合併單元格
worksheet.merge_range('B3:D4', 'Hello World !', merge_format)函數
or學習
first_row=4測試
first_col=4優化
last_row=8url
last_col=8
worksheet.merge_range(first_row,first_col,last_row,last_col,write_content,merge_format)
worksheet.set_column('B:D', 12)#設置B-D的單元格寬度爲12
worksheet.set_row(3, 30)#設置第4行的高度爲30
worksheet.set_row(6, 30)#設置第7行的高度爲30
worksheet.set_row(7, 30)#設置第8行的高度爲30
workbook.close()
因爲筆者項目 業務 只須要用到以上知識,由於項目進度,因此就沒有接着學習下去了,你們能夠本身去官網深刻學習。https://xlsxwriter.readthedocs.io/