人生苦短,我學(xué)python,! python處理excel的特點(diǎn)說(shuō)到操作excel,,很多時(shí)候單一表格的數(shù)據(jù)處理直接使用公式即可解決問(wèn)題,稍微復(fù)雜一點(diǎn)使用自帶的VBA也是個(gè)不錯(cuò)的選擇,。 但是對(duì)于數(shù)據(jù)量大,,操作步驟繁瑣,還涉及第三方的數(shù)據(jù)接入或者對(duì)接的話,,使用python絕對(duì)可以起飛,。python的pandas庫(kù)處理數(shù)據(jù)可以非常快速,,而且python可以使用多線程運(yùn)行程序(io密集型的數(shù)據(jù)處理效率更高),。 python操作excel的庫(kù)常用的有幾個(gè),這邊主要接觸了xlrd,、xlwt和openpyxl,,前兩個(gè)庫(kù)分別是讀取和寫(xiě)入xls文件的(也就是不支持xlsx文件);如果要操作xlsx文件的話建議使用openpyxl庫(kù)(可支持讀寫(xiě)),,但是讀寫(xiě)效率并不高,。如果再不寫(xiě)入數(shù)據(jù)的情況下要提升數(shù)據(jù)處理效率的話,使用xlrd單獨(dú)讀取文件是最快的,。 操作excel文件操作excel之前一定要了解整個(gè)處理步驟,,基本上表格操作都是針對(duì)單元格的,也就是需要定位到具體的單元格,,我們就可以實(shí)現(xiàn)值的讀取,、修改和寫(xiě)入。 記住具體的excel用wb表示,,具體的sheet表用ws表示,,單元格用cell屬性、也可以使用行列定位具體的單元格,,詳細(xì)的使用方法如下介紹,,更多的使用方法可以參考官方文檔,包括修改單元格顏色和字體,、合并單元格,、自動(dòng)換行等: #導(dǎo)入對(duì)應(yīng)的庫(kù),下面兩個(gè)庫(kù)分別用來(lái)創(chuàng)建表格和載入已有表格 from openpyxl import Workbook from openpyxl import load_workbook #wb是代表一個(gè)excel表格,,可以創(chuàng)建,,也可以是load本地表格 wb = Workbook() wb = load_workbook(filename ='empty.xlsx') #ws是代表一個(gè)sheet表,'sheet name'是已有的表格名,,也可使用create_sheet創(chuàng)建表格,,0代表第一個(gè)表格,,1代表第二個(gè)表格 ws_sheet = wb['sheet name'] ws_support = wb.create_sheet('support',0) ws_product = wb.create sheet('product',1) #實(shí)際賦值都是針對(duì)單元格處理的,可使用cell(row= ,column= ).value= #也可使用ws['A1'] for i in range(9): ws_support.cell(row=i//3+2, column=i%3+2).value=list[i] #迭代查看單元格,,可用value屬性查看具體的值,,cell.value for row in ws.iter_rows(min_row=1, max_col=3, max_row=2): for cell in row: print(cell) <Cell Sheet1.A1> <Cell Sheet1.B1> <Cell Sheet1.C1> <Cell Sheet1.A2> <Cell Sheet1.B2> <Cell Sheet1.C2> for col in ws.iter_cols(min_row=1, max_col=3, max_row=2): for cell in col: print(cell) <Cell Sheet1.A1> <Cell Sheet1.A2> <Cell Sheet1.B1> <Cell Sheet1.B2> <Cell Sheet1.C1> <Cell Sheet1.C2> 創(chuàng)建圖表下面主要介紹兩種excel圖表的創(chuàng)建,分別是3D柱狀圖和餅圖,,其余圖表可參考官方文檔。 #導(dǎo)入圖表的相關(guān)庫(kù) from openpyxl.chart import ( BarChart3D, LineChart, Series, PieChart, Reference ) #3D柱狀圖 rows = [ (None, 2013, 2014), ('Apples', 5, 4), ('Oranges', 6, 2), ('Pears', 8, 3) ] for row in rows: ws.append(row) data = Reference(ws, min_col=2, min_row=1, max_col=3, max_row=4) titles = Reference(ws, min_col=1, min_row=2, max_row=4) chart = BarChart3D() chart.title = '3D Bar Chart' chart.add_data(data=data, titles_from_data=True) chart.set_categories(titles) ws.add_chart(chart, 'E5') #餅圖 data = [ ['Page', 'Views'], ['Search', 95], ['Products', 4], ['Offers', 0.5], ['Sales', 0.5], ] for row in data: ws.append(row) projected_pie = ProjectedPieChart() projected_pie.type = 'pie' projected_pie.splitType = 'val' # 根據(jù)值分割 labels = Reference(ws, min_col=1, min_row=2, max_row=5) data = Reference(ws, min_col=2, min_row=1, max_row=5) projected_pie.add_data(data, titles_from_data=True) projected_pie.set_categories(labels) ws.add_chart(projected_pie, 'A10') |
|