朱昱光+王立翔+賈浩松
摘要:Excel 是一款極其成功的電子表格軟件——所見即所得的編輯方式,豐富可擴(kuò)展的公式系統(tǒng),功能齊全的圖表,邏輯清晰易于操作,保證了它在商業(yè)上的霸主地位??晒┒伍_發(fā)的 VBA,為 Excel 提供了更強大的技術(shù)后盾,為 Excel 擴(kuò)展出無限種可能。不過,VBA 雖然強大,卻有著無法克服的缺點:核心函數(shù)庫不夠完善,第三方庫引入困難。本文從 xlwings 入手,通過在 Excel 中使用 Python,提供了另一種 Excel 擴(kuò)展方式。
Abstract: Excel is an extremely successful spreadsheet software-WYSIWYG editing, rich and scalable formula system, full-featured charts, logical clear and easy to operate, to ensure its commercial dominance. For the secondary development of the VBA, Excel provides a more powerful technical support for Excel to expand out of infinite possibilities. However, VBA, although powerful, but it has insurmountable shortcomings: the core library is not perfect, the introduction of third-party library difficult. This article from the xlwings, through the use of Python in Excel, Excel provides another way to expand.
關(guān)鍵詞:xlwings;Excel 擴(kuò)展;文檔管理
Key words: xlwings;Excel extensions;document management
中圖分類號:TP317.2 文獻(xiàn)標(biāo)識碼:A 文章編號:1006-4311(2017)07-0175-03
0 引言
傳統(tǒng)上,擴(kuò)展Excel主要使用VBA,VBA功能強大,在微軟生態(tài)圈應(yīng)用廣泛。不過,VBA雖然強大,但也存在著一些缺點:核心函數(shù)庫不夠完善,第三方庫種類較少、引入困難,其弱類型的特點也使得程序難于調(diào)試。本文從Python庫xlwings入手,通過xlwings在Excel中使用Python,提供了另一種Excel擴(kuò)展方式,提高了擴(kuò)展效率。
1 xlwings 簡介
xlwings是一個Python庫。Python語言簡潔的語法,完善的基礎(chǔ)庫,豐富的web組件,強大的科學(xué)計算庫,可以為Excel提供超越VBA和Office的擴(kuò)展能力。
xlwings封裝了Excel的工作表、工作簿、單元格以及Range和Selection等的調(diào)用支持,并提供了從Python調(diào)用宏,從宏調(diào)用Python,以及Python函數(shù)作為Excel公式的調(diào)用方法,滿足各種層次的操作需求。
1.1 xlwings引入方法
使用import xlwings as xw,即可在Python中操作 Excel。在VBA中調(diào)用Python,則需要在Excel開發(fā)工具中的VBA編輯器中導(dǎo)入xlwings.bas,該文件位于xlwings庫目錄中,該目錄可通過xw.__path__查詢。另外,通過命令行xlwings quickstart xlsname可直接創(chuàng)建包含了xlwings.bas的工作簿。
1.2 xlwings基礎(chǔ)操作
xlwings提供了多個層次的操作,大致分為App、Book、Sheet、Range以及Sharp、Chart、Picture、Name等其它操作。
App層次對應(yīng)了Excel實例,App間互不干擾,可破除Excel不能同時打開同名工作簿限制。Book層次對應(yīng)工作簿實例,Sheet層次對應(yīng)工作表實例。以上三個層次均實現(xiàn)了Python和VBA形式,以下操作等價:Python形式,VB[1]A形式;xw.apps[0],xw.apps(1);xw.books[0],xw.books(1);xw.sheets[0],xw.sheets(1)。
除使用上述形式外,還可以通過Book('bookname')或Book('fullpath')的方式指定工作薄,通過Sheet('sheetname')的方式指定工作表。
Range是對Excel操作的主力,選擇方式如下:Python形式,VBA形式;Range((1,1)),Range('A1');Range((1,1),(3,3)),Range('A1:C3');Range(Range((1,1)),Range((3,3))),Range('A1:C3')。此外,VBA形式還支持Range('A:B')、Range('2:4')、Range('Name')、Range('A1,C:C,A8')。
使用end函數(shù)可在相應(yīng)方向上將選框移動到末尾,參數(shù)'up''down''left''right'分別相當(dāng)于Ctrl+Up,Ctrl+down,Ctrl+left,Ctrl+right。
使用expand函數(shù)可在相應(yīng)方向上擴(kuò)展選區(qū),參數(shù)'down','right','table'分別相當(dāng)于向下方擴(kuò)展選區(qū),向右方擴(kuò)展選區(qū),向下方和右方同時擴(kuò)展選區(qū)。
Range(rng).value對應(yīng)rng的值。Range(rng).formula對應(yīng)rng的Excel公式。
Name分為兩種,工作簿級和工作表級,可通過Book('bookname').names和Sheet('sheetname').names操作。Name的refers_to屬性對應(yīng)Excel公式,refers_to_range對應(yīng)相應(yīng)的Range。
在VBA中調(diào)用Python必須引入xlwings.bas,在VBA中調(diào)用RunPython('import model;model.functions')即可。
在Python中調(diào)用VBA,可在App,Book或Sheet中使用macro('macroname')來獲得VBA macro函數(shù)。
Sharp、Chart、Picture等篇幅所限,不再介紹。
2 以文檔管理為例
由于GUI程序天然的復(fù)雜性,即使使用了MVC技術(shù),也難于應(yīng)用在快速變化,且不需要特別嚴(yán)格管理的信息系統(tǒng)。而數(shù)據(jù)庫過于笨重,在形成一套穩(wěn)定,完整,容錯,靈活性兼具的流程之前,使用擴(kuò)展的Excel,可以顯著減少人為操作的失誤。用Excel所見即所得的特性,以及自帶的編輯功能,加上Python,即可將一張Excel表格,變成簡單,實用,擴(kuò)展性大大加強的綜合信息管理程序。
使用三張表管理文檔,info存放文檔項目信息,config存放配置和自動編號信息,log存放文檔生成記錄。數(shù)據(jù)以二維方式存放,每行為一個項目,每列為一種分項。在Excel中,把每一列定義為一個名稱,xlwings自Excel操作數(shù)據(jù)時,先選定行,對每一個必須的名稱,定位至該行,讀取或?qū)懭霐?shù)據(jù),然后操作下一個。
數(shù)據(jù)查看、查詢、修改,均在Excel中完成。
在防雷工作中,存在著大量中間文檔,包括卷宗、受理通知書、受理回執(zhí)、技術(shù)評價、核準(zhǔn)審批表、審核證書、辦結(jié)通知、送達(dá)回證、辦結(jié)報告等。這些文檔共享著項目名稱、申報單位、項目地址、受理編號等等信息,若每次都手工編排,會浪費大量時間,通過使用xlwings和python docx模板庫,可以自動生成這樣的文檔。
數(shù)據(jù)添加,由于文檔需要自動編號,設(shè)置“創(chuàng)建項目文件夾”按紐,點擊后自動編號,根據(jù)編號創(chuàng)建項目文件夾,添加受理日期等信息。如圖1管理界面所示。
數(shù)據(jù)按行錄入,錄入完成后,可以點擊“打印”按鈕,呼出生成界面,如圖2所示。選擇相應(yīng)文檔后,點擊“更新并打開”,可將相應(yīng)信息通過事先設(shè)置好的模板(如圖3所示),生成相應(yīng)的docx文檔(如圖3所示),并自動保存,生成記錄保存在log表中。
文檔查看,使用vba功能實現(xiàn)文檔查看。
3 總結(jié)與展望
本文利用xlwings擴(kuò)展Excel,基本實現(xiàn)了對防雷文檔的管理工作,可極大減少人為操作,以及人為操作帶來的失誤。由于python完善的基礎(chǔ)庫,豐富的web組件,下一步可配合使用微軟VTSO技術(shù),為Excel制訂專用標(biāo)簽欄;在數(shù)據(jù)中包含geojson,配合flask等python Web框架,直觀顯示帶地理信息的項目情況。
參考文獻(xiàn):
[1]薛江蕓.EXCEL在中小企業(yè)會計工作中的應(yīng)用和創(chuàng)新[J].價值工程,2013.
[2]費春梅.Excel在信息管理方面的應(yīng)用[J].價值工程,2010,01.
[3]李曉玫,楊小平.Excel中的VBA程序設(shè)計[J].四川師范大學(xué)學(xué)報(自然科學(xué)版),2004(04).
[4]劉雍,李蘊.Excel的功能擴(kuò)展方法初探[J].瓊州學(xué)院學(xué)報,2007(05).
[5]馬倩.電子表格在商務(wù)辦公中的拓展應(yīng)用研究[J].價值工程,2012(06).