久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

更棒的Excel操作模塊xlwings

 gexian 2018-06-03


  說到Python操作Excel,,有好多模塊都可以支持這個(gè)工作,。比如最底層的win32模塊不僅可以操作Excel,,還可以操作其他一眾windows的軟件,。

  其他的比較熟悉的有xlrd,,xlwt和xlutils這三個(gè)。分別負(fù)責(zé)Excel文件的讀,、寫,、讀寫轉(zhuǎn)換工作。雖然一般情況下的Excel操作都可以通過這三個(gè)模塊來完成,,但是還是有很多不便的地方,。比如單元格格式的寫入和讀取很麻煩,通過xlutils將一個(gè)Excel讀取再寫入到一個(gè)新文件中時(shí)格式也不會(huì)被一起復(fù)制過去,。

  另外最近我遇到的需求就是,,基于一個(gè)Excel模板,往里面填充數(shù)據(jù),。雖然可以將模板轉(zhuǎn)化為xlwt的代碼寫死在生成腳本中,,但是每次都要重新生成一個(gè)文件未免太過麻煩,而且一個(gè)格子一個(gè)格子地寫入會(huì)讓代碼量飛速上漲,。,。無奈之下另尋他路,嘗試著用了xlwings這個(gè)模塊,。

 

■  基本使用

  和xlrd等不同,,xlwings設(shè)計(jì)的基礎(chǔ)理念不是面向單個(gè)的Excel文檔進(jìn)行的,而是可以處理一個(gè)包含了多個(gè)Excel文檔的“Excel項(xiàng)目”,。通過建立其app等邏輯組分概念,,可以讓整個(gè)Excel項(xiàng)目可以更加有序方便地進(jìn)行計(jì)算和互相通訊。xlwings中設(shè)計(jì)的各個(gè)模型的概念層級(jí)如下圖所示:

技術(shù)分享圖片

  其中App是作為一個(gè)邏輯的分組,,一個(gè)Book可以認(rèn)為對(duì)應(yīng)一個(gè)Excel文檔,,Sheet對(duì)應(yīng)一張工作表,Range對(duì)應(yīng)具體表中的一片區(qū)域的內(nèi)容,。首先,,下面是一個(gè)最為常見的,打開一個(gè)Excel文檔并進(jìn)行處理的簡(jiǎn)單過程:

import xlwings as xw

book = xw.Book(/path/to/test.xlsx)
# 此時(shí)界面上會(huì)彈出Excel窗口,如果test.xlsx文件不存在則會(huì)報(bào)錯(cuò),,如果test.xlsx已經(jīng)被打開,,直接返回這個(gè)文件對(duì)象

print book.name,book.fullname    # 打印文件名和絕對(duì)路徑
print book.app    # 可以查看book所在哪個(gè)APP
print book.sheets    # 又是一個(gè)類列表結(jié)構(gòu),存放各種Sheet對(duì)象
book.activate()    # 如果Excel沒有獲得當(dāng)前系統(tǒng)的焦點(diǎn),,調(diào)用這個(gè)方法可以回到Excel中去
book.close()    # 關(guān)閉Excel文檔,,但只是關(guān)閉文件本身,不關(guān)閉excel程序,。,。若要關(guān)閉Excel程序則需要調(diào)用響應(yīng)APP實(shí)例的kill方法。經(jīng)過試驗(yàn),,先調(diào)用close會(huì)導(dǎo)致默認(rèn)創(chuàng)建的app實(shí)例自動(dòng)消失,,從而無法調(diào)用kill,從而關(guān)不掉Excel
所以最好的辦法不是調(diào)用這個(gè)close而是調(diào)用app.kill(),。
sheet = book.sheets[0] # 其他獲取sheet對(duì)象的方法還有book.sheets[‘sheet_name‘]

 

  上面說到了獲取一個(gè)具體的sheet,,然一個(gè)sheet可以調(diào)用的方法有:

 sheet.activate       sheet.charts         sheet.index
 sheet.api            sheet.clear          sheet.name
 sheet.autofit        sheet.clear_contents sheet.names
 sheet.book           sheet.delete         sheet.pictures
 sheet.cells          sheet.impl           sheet.range
...等等

 

  其中activate,autofit,cliear_content等這些方法都還挺有意思的。最為核心的方法應(yīng)該就是range了,,通過它可以獲取到具體的某一段范圍的數(shù)據(jù),。

  例如sheet.range(‘A1‘)獲取到A1單元格的對(duì)象,通過調(diào)取此對(duì)象的value屬性,,就可以讀取/改變單元格的值,,并且這一切都不會(huì)影響單元格本身的格式。

  更加imba的一種做法是sheet.range(‘A1:C3‘)這樣的形式可以一次性獲取到一個(gè)區(qū)域內(nèi)所有單元格的對(duì)象,。調(diào)取其value對(duì)象的話得到的也是一個(gè)二維列表形式的數(shù)據(jù)集合,,可以形象方便地把Excel中的數(shù)據(jù)映射到python中來。對(duì)于設(shè)置數(shù)據(jù)時(shí),,傳入數(shù)據(jù)可以是一個(gè)不符合指出區(qū)域規(guī)定的結(jié)構(gòu),,但是這樣結(jié)果會(huì)比較微妙。,。建議實(shí)驗(yàn)

  需要指出的是和xlrd一樣,,讀取value時(shí)合并單元格只在其左上角的子單元格中有值,其余的和未填寫的單元格一樣,,都是None,。

 

■  對(duì)于range,能做的還有更多

  除了簡(jiǎn)單的調(diào)用value和為value賦值來讀寫Excel外,,還有如下接口可以使用

 range.add_hyperlink  range.clear_contents range.count
 range.address        range.color          range.current_region
 range.api            range.column         range.end
 range.autofit        range.column_width   range.expand
 range.clear          range.columns        range.formula
...等等

 

  一些接口的用法提示:

  range.add_hyperlink(‘https://www.baidu.com‘,‘百度‘)

       range.color = (128,128,128)    RGB通道顏色,,可獲取or設(shè)置

  range.row/column  獲取第幾行/列,注意是第幾而不是下標(biāo)

  range.formula  可以設(shè)置計(jì)算表達(dá)式,,用來進(jìn)行表內(nèi)計(jì)算

  range.current_region  返回當(dāng)前range所在區(qū)域的區(qū)域表達(dá),,這個(gè)比較難描述,,好比一個(gè)Excel中互相連接的單元格都是連城一片,兩個(gè)片之間沒有任何相鄰就是互相獨(dú)立的,。

  range.count  返回這個(gè)range中共有多少單元格,,合并單元格仍然按未合并的算

  range.offset(a,b)  獲取到當(dāng)前range向右a格,向下移動(dòng)b格同樣大小的那片區(qū)域,,ab可以為負(fù)值

  range.rows/columns  返回行/列的各個(gè)range對(duì)象

  

■  關(guān)于App

  其實(shí)App還沒有仔細(xì)研究過,,簡(jiǎn)單來說,當(dāng)通過xw.Book創(chuàng)建一個(gè)實(shí)例的時(shí)候,,默認(rèn)向xw.apps中添加一個(gè)App實(shí)例,,而book就屬于這個(gè)App。

  如上面所說,,解決Excel程序無法關(guān)閉的問題可以用這個(gè)app實(shí)例的kill方法,。app.kill()可以把Excel程序連同文件一并關(guān)閉。另外,,如果不想讓Excel程序跳出來則可以置app.visible=False,,即時(shí)設(shè)置即時(shí)生效

  

 

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多