天天看點

python子產品之xlsxwriter

Xlsx是python用來構造xlsx檔案的子產品,可以向excel2007+中寫text,numbers,formulas 公式以及hyperlinks超連結。

可以完成xlsx檔案的自動化構造,包括:

合并單元格,制作excel圖表等功能:

python子產品之xlsxwriter

1,Introduction:

xlsxWriter支援多種excle功能;與excel完美相容;寫大檔案,速度快且隻占用很小的記憶體空間

不支援讀或者改現有的excel檔案

2, Installing:

sudo pip install XlsxWriter;

sudo easy_install XlsxWriter;

3,使用:

<code>import</code> <code>xlsxwriter</code>

<code>workbook </code><code>=</code> <code>xlsxwriter.Workbook(</code><code>'hello.xlsx'</code><code>) </code><code># 建立檔案</code>

<code>worksheet </code><code>=</code> <code>workbook.add_worksheet() </code><code># 建立sheet, 可以work.add_worksheet('employee')來指定sheet名,但中文名會報UnicodeDecodeErro的錯誤</code>

<code>worksheet.write(</code><code>'A1'</code><code>, </code><code>'Hello world'</code><code>) </code><code># 向A1寫入</code>

<code>workbook.close()</code>

excel公式計算

<code># Some data we want to write to the worksheet.</code>

<code>expenses </code><code>=</code> <code>(</code>

<code>    </code><code>[</code><code>'Rent'</code><code>, </code><code>1000</code><code>],</code>

<code>    </code><code>[</code><code>'Gas'</code><code>,   </code><code>100</code><code>],</code>

<code>    </code><code>[</code><code>'Food'</code><code>,  </code><code>300</code><code>],</code>

<code>    </code><code>[</code><code>'Gym'</code><code>,    </code><code>50</code><code>],</code>

<code>)</code>

<code> </code> 

<code># Start from the first cell. Rows and columns are zero indexed. 按标号寫入是從0開始的,按絕對位置'A1'寫入是從1開始的</code>

<code>row </code><code>=</code> <code>0</code>

<code>col </code><code>=</code> <code>0</code>

<code># Iterate over the data and write it out row by row.</code>

<code>for</code> <code>item, cost </code><code>in</code> <code>(expenses):</code>

<code>    </code><code>worksheet.write(row, col,     item)</code>

<code>    </code><code>worksheet.write(row, col </code><code>+</code> <code>1</code><code>, cost)</code>

<code>    </code><code>row </code><code>+</code><code>=</code> <code>1</code>

<code># Write a total using a formula.</code>

<code>worksheet.write(row, </code><code>0</code><code>, </code><code>'Total'</code><code>)</code>

<code>worksheet.write(row, </code><code>1</code><code>, </code><code>'=SUM(B1:B4)'</code><code>)    </code><code># 調用excel的公式表達式</code>

excel自定義格式:

<code>import</code> <code>xlsxwriter </code><code># 建檔案及sheet.</code>

<code> </code><code>workbook </code><code>=</code> <code>xlsxwriter.Workbook(</code><code>'Expenses02.xlsx'</code><code>)</code>

<code> </code><code>worksheet </code><code>=</code> <code>workbook.add_worksheet() </code><code># Add a bold format to use to highlight cells. 設定粗體,預設是False</code>

<code> </code><code>bold </code><code>=</code> <code>workbook.add_format({</code><code>'bold'</code><code>: </code><code>True</code><code>}) </code><code># Add a number format for cells with money.  定義數字格式</code>

<code> </code><code>money </code><code>=</code> <code>workbook.add_format({</code><code>'num_format'</code><code>: </code><code>'$#,##0'</code><code>}) # Write some data headers. 帶自定義粗體blod格式寫表頭</code>

<code> </code><code>worksheet.write(</code><code>'A1'</code><code>, </code><code>'Item'</code><code>, bold)</code>

<code> </code><code>worksheet.write(</code><code>'B1'</code><code>, </code><code>'Cost'</code><code>, bold) </code><code># Some data we want to write to the worksheet.</code>

<code> </code><code>expenses </code><code>=</code> <code>(</code>

<code>     </code><code>[</code><code>'Rent'</code><code>, </code><code>1000</code><code>],</code>

<code>     </code><code>[</code><code>'Gas'</code><code>,   </code><code>100</code><code>],</code>

<code>     </code><code>[</code><code>'Food'</code><code>,  </code><code>300</code><code>],</code>

<code>     </code><code>[</code><code>'Gym'</code><code>,    </code><code>50</code><code>],</code>

<code> </code><code>) </code><code># Start from the first cell below the headers.</code>

<code> </code><code>row </code><code>=</code> <code>1</code>

<code> </code><code>col </code><code>=</code> <code>0</code> <code># Iterate over the data and write it out row by row.</code>

<code> </code><code>for</code> <code>item, cost </code><code>in</code> <code>(expenses):</code>

<code>     </code><code>worksheet.write(row, col,     item)    </code><code># 帶預設格式寫入</code>

<code>     </code><code>worksheet.write(row, col </code><code>+</code> <code>1</code><code>, cost, money)  </code><code># 帶自定義money格式寫入</code>

<code>     </code><code>row </code><code>+</code><code>=</code> <code>1</code> <code># Write a total using a formula.</code>

<code> </code><code>worksheet.write(row, </code><code>0</code><code>, </code><code>'Total'</code><code>,       bold)</code>

<code> </code><code>worksheet.write(row, </code><code>1</code><code>, </code><code>'=SUM(B2:B5)'</code><code>, money)</code>

<code> </code><code>workbook.close()</code>

excel寫入時間格式

<code>from</code> <code>datetime </code><code>import</code> <code>datetime</code>

<code> </code><code>import</code> <code>xlsxwriter</code>

<code> </code><code># Create a workbook and add a worksheet.</code>

<code> </code><code>workbook </code><code>=</code> <code>xlsxwriter.Workbook(</code><code>'Expenses03.xlsx'</code><code>)</code>

<code> </code><code>worksheet </code><code>=</code> <code>workbook.add_worksheet()</code>

<code> </code><code># Add a bold format to use to highlight cells.</code>

<code> </code><code>bold </code><code>=</code> <code>workbook.add_format({</code><code>'bold'</code><code>: </code><code>1</code><code>})</code>

<code> </code><code># Add a number format for cells with money.</code>

<code> </code><code>money_format </code><code>=</code> <code>workbook.add_format({</code><code>'num_format'</code><code>: </code><code>'$#,##0'</code><code>})</code>

<code> </code><code># Add an Excel date format.</code>

<code> </code><code>date_format </code><code>=</code> <code>workbook.add_format({</code><code>'num_format'</code><code>: </code><code>'mmmm d yyyy'</code><code>})</code>

<code> </code><code># Adjust the column width.</code>

<code> </code><code>worksheet.set_column(</code><code>1</code><code>, </code><code>1</code><code>, </code><code>15</code><code>)</code>

<code> </code><code># Write some data headers.</code>

<code> </code><code>worksheet.write(</code><code>'B1'</code><code>, </code><code>'Date'</code><code>, bold)</code>

<code> </code><code>worksheet.write(</code><code>'C1'</code><code>, </code><code>'Cost'</code><code>, bold)</code>

<code> </code><code># Some data we want to write to the worksheet.</code>

<code>     </code><code>[</code><code>'Rent'</code><code>, </code><code>'2013-01-13'</code><code>, </code><code>1000</code><code>],</code>

<code>     </code><code>[</code><code>'Gas'</code><code>,  </code><code>'2013-01-14'</code><code>,  </code><code>100</code><code>],</code>

<code>     </code><code>[</code><code>'Food'</code><code>, </code><code>'2013-01-16'</code><code>,  </code><code>300</code><code>],</code>

<code>     </code><code>[</code><code>'Gym'</code><code>,  </code><code>'2013-01-20'</code><code>,   </code><code>50</code><code>],</code>

<code> </code><code>)</code>

<code> </code><code># Start from the first cell below the headers.</code>

<code> </code><code>col </code><code>=</code> <code>0</code>

<code> </code><code>for</code> <code>item, date_str, cost </code><code>in</code> <code>(expenses):</code>

<code>     </code><code># Convert the date string into a datetime object.</code>

<code>     </code><code>date </code><code>=</code> <code>datetime.strptime(date_str, </code><code>"%Y-%m-%d"</code><code>)</code>

<code>     </code><code>worksheet.write_string  (row, col,     item              )</code>

<code>     </code><code>worksheet.write_datetime(row, col </code><code>+</code> <code>1</code><code>, date, date_format )</code>

<code>     </code><code>worksheet.write_number  (row, col </code><code>+</code> <code>2</code><code>, cost, money_format)</code>

<code>     </code><code>row </code><code>+</code><code>=</code> <code>1</code>

<code> </code><code># Write a total using a formula.</code>

<code> </code><code>worksheet.write(row, </code><code>0</code><code>, </code><code>'Total'</code><code>, bold)</code>

<code> </code><code>worksheet.write(row, </code><code>2</code><code>, </code><code>'=SUM(C2:C5)'</code><code>, money_format)</code>

 @@@ write方法提供了python類型到excel類型的轉換, XlsxWriter支援excel工作表最大1048576行記錄,16384條列記錄,超出可以選擇再建新sheet

<code>worksheet.write(</code><code>0</code><code>, </code><code>0</code><code>, </code><code>'Hello'</code><code>)          </code><code># write_string()</code>

<code>worksheet.write(</code><code>1</code><code>, </code><code>0</code><code>, </code><code>'World'</code><code>)          </code><code># write_string()</code>

<code>worksheet.write(</code><code>2</code><code>, </code><code>0</code><code>, </code><code>2</code><code>)                </code><code># write_number()</code>

<code>worksheet.write(</code><code>3</code><code>, </code><code>0</code><code>, </code><code>3.00001</code><code>)          </code><code># write_number()</code>

<code>worksheet.write(</code><code>4</code><code>, </code><code>0</code><code>, </code><code>'=SIN(PI()/4)'</code><code>)   </code><code># write_formula()</code>

<code>worksheet.write(</code><code>5</code><code>, </code><code>0</code><code>, '')               </code><code># write_blank()</code>

<code>worksheet.write(</code><code>6</code><code>, </code><code>0</code><code>, </code><code>None</code><code>)             </code><code># write_blank()</code>

4, 圖示

這個是我比較關注的利用excel工具進行圖示統計的功能

相比較python的matplotlib的畫圖子產品,excel的圖示更加漂亮靈活一些

Chart: Area, Bar, Column, Doughnut, Line, Pie, Scatter, Stock, Radar

workbook = xlswriter.Workbook('chart.xls')

worksheet = workbook.add_sheet('First_example')  # 普通工作表

建立Chart對象: chart = workbook.add_chart({type, 'column'})

 将圖插入到sheet中: worksheet.insert_chart('A7', chart)

或者可以建立圖表工作表chartsheet 

chartsheet = workbook.add_charsheet()

chartsheet.set_char(chart)

柱狀圖:

<code>workbook </code><code>=</code> <code>xlsxwriter.Workbook(</code><code>'chart.xlsx'</code><code>)</code>

<code>worksheet </code><code>=</code> <code>workbook.add_worksheet()</code>

<code># Create a new Chart object.</code>

<code>chart </code><code>=</code> <code>workbook.add_chart({</code><code>'type'</code><code>: </code><code>'column'</code><code>})</code>

<code># Write some data to add to plot on the chart.</code>

<code>data </code><code>=</code> <code>[</code>

<code>    </code><code>[</code><code>1</code><code>, </code><code>2</code><code>, </code><code>3</code><code>, </code><code>4</code><code>, </code><code>5</code><code>],</code>

<code>    </code><code>[</code><code>2</code><code>, </code><code>4</code><code>, </code><code>6</code><code>, </code><code>8</code><code>, </code><code>10</code><code>],</code>

<code>    </code><code>[</code><code>3</code><code>, </code><code>6</code><code>, </code><code>9</code><code>, </code><code>12</code><code>, </code><code>15</code><code>],</code>

<code>]</code>

<code>worksheet.write_column(</code><code>'A1'</code><code>, data[</code><code>0</code><code>])  </code><code># 按列插入</code>

<code>worksheet.write_column(</code><code>'B1'</code><code>, data[</code><code>1</code><code>])</code>

<code>worksheet.write_column(</code><code>'C1'</code><code>, data[</code><code>2</code><code>])</code>

<code># Configure the chart. In simplest case we add one or more data series.</code>

<code>chart.add_series({</code><code>'values'</code><code>: </code><code>'=Sheet1!$A$1:$A$5'</code><code>})</code>

<code>chart.add_series({</code><code>'values'</code><code>: </code><code>'=Sheet1!$B$1:$B$5'</code><code>})</code>

<code>chart.add_series({</code><code>'values'</code><code>: </code><code>'=Sheet1!$C$1:$C$5'</code><code>})</code>

<code># Insert the chart into the worksheet.</code>

<code>worksheet.insert_chart(</code><code>'A7'</code><code>, chart)</code>

workbook.add_chart({'type':'column'}) # 預設格式

workbook.add_chart({'type':'column', 'substyle':'percent_stacked'})  # 按百分比展示

workbook.add_chart({'type':'column', 'substyle':'stacked'})

其他類型chart也是這樣:

python子產品之xlsxwriter

本文轉自 326647452 51CTO部落格,原文連結:http://blog.51cto.com/svsky/1944131,如需轉載請自行聯系原作者