今天學(xué)習(xí)了下xlwings這個庫桶现,目的是為了讓計算機(jī)自動化操作excel表,當(dāng)某天需要做一些很繁瑣的事情卖词,就可以派上用場啦。
網(wǎng)上刮來的圖,很好此蜈。
- 大概就是xlwings中可以有多個excel程序即横。
- 一個excel程序中可以有多個工作簿。
- 一個工作簿中可以有多張表格裆赵。
- 一張表格中的內(nèi)容就看你寫什么了东囚。
1.包肯定是要導(dǎo)入的
import xlwings as xw
2. 先創(chuàng)建一個app對象,就是打開一個excel程序战授。
>>>app = xw.App(visible=True,add_book=True)
>>>app
<Excel App 39156>
提醒:
- 創(chuàng)建一個excel程序页藻,默認(rèn)會創(chuàng)建一個工作簿(book對象)。
- 里面主要的兩個參數(shù),visible可不可見植兰,add_book添不添加book份帐,默認(rèn) 都是 True 。
看下app有什么方法
[ 'activate', 'api', 'books', 'calculate', 'calculation',
'display_alerts', 'hwnd', 'impl', 'kill', 'macro', 'pid', 'quit', 'range',
'screen_updating', 'selection', 'version', 'visible']
activate(steal_focus=False)
:激活工作簿楣导,里面有個參數(shù)废境,steal_focus,默認(rèn)為False,選擇True時筒繁,會獲取工作簿的焦點噩凹。-
api
:應(yīng)該是返回本地對象所使用引擎,我是window的office就跟下圖的結(jié)果.
books
:所有book對象的集合毡咏。calculate()
:計算所有打開的books驮宴。calculation
:選擇或設(shè)置計算模式:manual(手動),automatic(自動)semiautomatic(半自動)。display_alerts
:默認(rèn)值為True,但為False時:當(dāng)excel響應(yīng)呕缭,會選擇默認(rèn)響應(yīng)堵泽。hwnd
:返回window的句柄。kill()
:終止進(jìn)程臊旭,強制退出落恼。macro(name)
:python調(diào)用excel中的自定義的Sub和function。pid
:返回app的pid离熏。quit()
:在不保存的情況下佳谦,退出excel程序。-
range
:獲取當(dāng)前工作簿中的當(dāng)前表格中的范圍滋戳。
screen_updating
:屏幕更新奸鸯,就是說你在excel表中的操作會實時更新咪笑,關(guān)閉實時更新可以加快腳本運行。默認(rèn)是True娄涩。-
selection
:將所選定的單元格(cells)以Range對象返回窗怒。
-
version
:顯示xlwings版本映跟。 -
visiable
:設(shè)置可不可見,默認(rèn)是True扬虚。
3. app中的book對象
我們就用剛剛app中創(chuàng)建的book對象
>>>wb = app.books[0]
>>>wb
<Book [工作簿1]>
當(dāng)然也可以這樣創(chuàng)建book對象
>>>wb =xw.Book()
比較下兩種創(chuàng)建對象方式
xw.Book | xw.books | |
---|---|---|
創(chuàng)建工作簿 | xw.Book() |
xw.books.add() |
還沒保存的工作簿 | xw.Book('Book1') |
xw.books['Book1'] |
根據(jù)路徑打開工作簿 | xw.Book(r'C:/path/to/file.xlsx') |
xw.books.open(r'C:/path/to/file.xlsx') |
已經(jīng)打開的book數(shù)量 | xw.books.count |
在來看看book對象有什么方法
['activate', 'api', 'app', 'caller', 'close',
'fullname', 'impl', 'macro', 'name','names',
'open_template', 'save', 'selection', 'set_mock_caller', 'sheets']
activate(steal_focus=False)
:激活book努隙,可以選擇獲不獲取焦點。api
:返回正在使用的引擎的本地對象辜昵。app
:返回創(chuàng)建這個book的app對象荸镊。caller()
:當(dāng)通過runpython從excel中調(diào)用python函數(shù)時,引用這個book堪置,還會將其打包成excel中的函數(shù)躬存。
例子:
import xlwings as xw
def my_macro():
wb = xw.Book.caller()
wb.sheets[0].range('A1').value = 1
當(dāng)需要在調(diào)試的時候可以使用xw.set_mock_caller()函數(shù)。
*close()
:在沒有保存的情況下關(guān)閉舀锨。
*fullname
:以字符串的形式返回對象的名稱跟路徑岭洲。
macro
(name):python調(diào)用excel中的自定義的Sub和function。name
:返回book的名稱雁竞。names
:返回一個Names對象集合钦椭。open_template
:創(chuàng)建一個已經(jīng)包含xlwings VBA模塊的Excel文件(必須從交互式python shell中調(diào)用此方法)save(path=None)
:保存工作簿,若為指定路徑碑诉,保存在當(dāng)前工作目錄彪腔。selection
:將所選定的單元格(cells)以Range對象返回。set_mock_caller
:設(shè)置用于調(diào)試caller()的excel文件进栽,可以直接在python里運行德挣。
例子:
def my_macro():
sht = xw.Book.caller().sheets[0]
sht.range('A1').value = 'Hello xlwings!'
if __name__ == '__main__':
xw.Book().set_mock_caller()
my_macro()
調(diào)用函數(shù)會在A1格子上打印,hello xlwings.
-
sheets:返回所有的工作表(sheet)的集合快毛。
4.book中的sheet對象
同樣的格嗅,我們使用上面那個book對象。
>>>sht = wb.sheets[0]
>>>sht
<Sheet [工作簿1]Sheet1>
看下sheet中有什么方法
['activate', 'api', 'autofit', 'book', 'cells',
'charts', 'clear', 'clear_contents', 'delete',
'impl', 'index', 'name', 'names', 'pictures',
'range', 'select', 'shapes', 'used_range']
activate(steal_focus=False)
:激活sheet,并返回唠帝,可以選擇獲不獲取焦點屯掖。api
:返回正在使用的引擎的本地對象。autofit(axis=None)
:自動調(diào)整表中的行襟衰,列或兩者的寬度
wb.sheets[0].autofit(axis='r'):自動匹配行
wb.sheets[0].autofit(axis= 'c')自動匹配列
wb.sheets[0].autofit()book
:返回創(chuàng)建這個表格的book對象贴铜。cells
:返回表示Sheet上所有單元格的Range對象(不僅僅是當(dāng)前使用的單元格)。charts
:sheet中的所有圖表集合瀑晒。clear()
:清除整個sheet的內(nèi)容和格式绍坝。clear_contents()
:清除整個sheet的內(nèi)容,但格式還在苔悦。delete()
:刪除sheet轩褐。index
:返回sheet的索引。name
:獲取或設(shè)置sheet的名字玖详。names
:返回一個Names對象集合把介。pictures
:返回所有Pictures對象的集合勤讽。range(cell1,cell2=None)
:在活動的sheet中返回一個Range對象。select()
:選擇工作表拗踢。shapes
:返回所有Shapes對象的集合地技。-
used_range
:返回sheet中所有使用過的Range。
5.sheet中Range對象
選了A1單元格
>>>r = sht.range('A1')
>>>r
<Range [工作簿1]Sheet1!1>
看看Range對象的方法
[ 'add_hyperlink', 'address', 'api', 'autofit', 'clear', 'clear_contents',
'color', 'column', 'column_width', 'columns', 'count', 'current_region', 'end',
'expand', 'formula', 'formula_array', 'get_address', 'height', 'hyperlink',
'impl', 'last_cell', 'left', 'name', 'number_format', 'offset', 'options',
'raw_value', 'resize', 'row', 'row_height', 'rows', 'select', 'shape', 'sheet',
'size', 'top', 'value', 'width']
-
add_hyperlink(address, text_to_display=None, screen_tip=None):
在單元格上添加超鏈接秒拔。
address:'超鏈接地址'。
text_to_display:在單元格上顯示的文本飒硅。
screen_tip:當(dāng)鼠標(biāo)懸停時砂缩,出現(xiàn)的提示。
address
:以字符串的形式返回范圍
>>> r.address
'$A$1'
返回了我們A1這個單元格的名稱三娩。api
:返回正在使用的引擎的本地對象庵芭。autofit()
:
自動調(diào)整Range內(nèi)所有單元格的寬度和高度
自動調(diào)整列寬:xw.Range('A2:G9').columns.autofit()
自動調(diào)整行寬:xw.Range('A2:G9').rows.autofit()clear()
:刪除Range里的內(nèi)容和格式。clear_contents()
:刪除Range里的內(nèi)容雀监,保留格式双吆。-
color
:獲取或者設(shè)置范圍里單元額的背景顏色。
設(shè)置顏色時会前,可以使用RGB元組好乐,就像下面這樣。
>>> r.color = (0,23,234)
-
column
:返回Range對象的第一列編號瓦宜。
column_width
:獲取或設(shè)置Range的寬度蔚万。
如果范圍中的所有列具有相同的寬度,則返回寬度临庇。
如果范圍中的列具有不同的寬度反璃,則返回None。columns
:返回一個RangeColumns對象,該對象表示指定范圍內(nèi)的列.count
返回單元格數(shù)量current_region
:返回一個Range對象假夺。選取的范圍跟在window中Ctrl- *
一樣淮蜈。end(direction):
返回一個Range對象。相當(dāng)于window中的Ctrl+Up
,Ctrl+down
,Ctrl+left
, 或Ctrl+right
.expand(mode='table')
:根據(jù)選定的模式已卷,擴(kuò)展范圍梧田。
A1單元格選擇'right'會擴(kuò)展成A1~B1。
A1單元格選擇down會擴(kuò)展成A1~A2悼尾。
>>> import xlwings as xw
>>> wb = xw.Book()
>>> xw.Range('A1').value = [[None, 1], [2, 3]]
>>> xw.Range('A1').expand().address
$A$1:$B$2
>>> xw.Range('A1').expand('right').address
$A$1:$B$1
>>>xw.Range('A1').expand('down').address
$A$1:$A$2
-
formula
:獲取或設(shè)置Range的公式柿扣。
>>> app.range('A4').formula`
'=SUM(A1:A3)'
-
formula_array
:獲取或設(shè)置給定Range的數(shù)組公式。 -
get_address(row_absolute=True, column_absolute=True, include_sheetname=False, external=False)
:
>>> r.get_address()
'$A$1'
row_absolute :布爾型, 默認(rèn)為True
設(shè)置成False闺魏,將不會在地址上返回行的名稱未状。
>>> r.get_address(row_absolute=False)
'$A1'
column_aosolute:布爾型, 默認(rèn)為True
設(shè)置成false,將不會在地址上返回列的名稱。
>>> r.get_address(column_absolute=False)
'A$1'
include_sheetname:布爾型析桥,默認(rèn)為False
設(shè)置成True,會在地址上返回表名司草。
>>> r.get_address(True,True,True)
'Sheet1!$A$1'
external :布爾型, 默認(rèn)為False
設(shè)置成True,會在地址上返回工作簿和表的名稱艰垂。
>>> r.get_address(external=True)
'[工作簿1]Sheet1!$A$1'
-
height
:返回Range的高度。 -
hyperlink
: 返回指定Range的超鏈接地址(僅限單個單元格)
>>> import xlwings as xw
>>> wb = xw.Book()
>>> xw.Range('A1').value
'www.xlwings.org'
>>> xw.Range('A1').hyperlink
'http://www.xlwings.org'
如果單元格里沒有超鏈接會報錯埋虹。
-
last_cell
:返回指定Rnage右下角的單元格(只讀)
>>> app.range('A1','C3').last_cell
<Range [工作簿1]Sheet1!$C$3>
-
left
:返回從第一列到Range第一列的距離猜憎。
>>> app.range('C1','C3').left
108.0
如果我把第一列拉長
>>> app.range('C1','C3').left
138.0
name
:設(shè)置或獲取Range的名稱。number_format
:獲取或設(shè)置Range的內(nèi)容格式搔课。offset(row_offset=0, column_offset=0)
:返回一個偏移后的Range
現(xiàn)在是第一行胰柑,第一列
>>> r
<Range [工作簿1]Sheet1!$A$1>
A1偏移到右下角,B2
>>> r.offset(1,1)
<Range [工作簿1]Sheet1!$B$2>
A1偏移到下一行爬泥,A2
>>> r.offset(1,0)
<Range [工作簿1]Sheet1!$A$2>
也可以輸入負(fù)數(shù)柬讨,例如offset(-1,-1):偏移到左上方一個單元格。
-
options(convert=None, **options)
: 允許設(shè)置轉(zhuǎn)換器及其選項. 返Range對象袍啡。
參數(shù):
ndim: int類型,維數(shù)踩官,比如ndim=1,ndim=2。
numbers:數(shù)字類型:比如numbers=int,numbers=float境输。
>>> app.range('A1','C3').value
[[1.0, 2.0, 3.0], [3.0, 3.0, 3.0], [3.0, 3.0, 3.0]]
>>> app.range('A1','C3').options(numbers=int).value
[[1, 2, 3], [3, 3, 3], [3, 3, 3]]
empty:object蔗牡,空單元格的轉(zhuǎn)換 。
transpose: 默認(rèn)為False,轉(zhuǎn)置Range的values嗅剖。
設(shè)置為True辩越,會把矩陣轉(zhuǎn)置了在來獲取value。
>>> app.range('A1','C3').options(transpose=Flase) .value
[[1.0, 4.0, 7.0], [2.0, 5.0, 8.0], [3.0, 6.0, 9.0]]
>>> app.range('A1','C3').options(transpose=True) .value
[[1.0, 2.0, 3.0], [4.0, 5.0, 6.0], [7.0, 8.0, 9.0]]
expand:str型,默認(rèn)為None.可以為:'table'(右下),'down','right'信粮。
>>> app.range('A1').options(expand ='right') .value
[1.0, 4.0, 7.0]
>>> app.range('A1').options(expand ='down') .value
[1.0, 2.0, 3.0, ' ']
>>> app.range('A1').options(expand ='table') .value
[[1.0, 4.0, 7.0], [2.0, 5.0, 8.0], [3.0, 6.0, 9.0], [' ', None, None]]
>>> app.range('A1','A3').options(expand ='right') .value
[[1.0, 4.0, 7.0], [2.0, 5.0, 8.0], [3.0, 6.0, 9.0]]
>>> app.range('A1','C1').options(expand ='down') .value
[[1.0, 4.0, 7.0], [2.0, 5.0, 8.0], [3.0, 6.0, 9.0], [' ', None, None]]
raw_value:
直接獲取或設(shè)置傳遞的值区匣,可以加快速度,但可能會不能跨平臺蒋院。resize(row_size=None, column_size=None)`:
row
:返回指定Range第一行編號亏钩。row_height
:獲取或設(shè)置Range的高度(以磅為單位).如果Range中的所有行具有相同的高度,則返回高度,否則返回None.rows
:返回表示指定Range內(nèi)的RangeRows對象。select()
:選擇范圍欺旧,相當(dāng)于用鼠標(biāo)選取范圍姑丑。shape
:返回Range的維數(shù),以元組的形式辞友,比如:(1,3) 代表1*3的矩陣栅哀,(4,2)代表4*2的矩陣。sheet
: 返回Range所屬的Sheet對象称龙。size
:Range中元素數(shù)量留拾。top
:返回第一行到Range第一行的距離,跟left很像鲫尊。value
:獲取和設(shè)置給定Range的值痴柔。width
:返回Range的寬度。
6.apps,books,sheets異同
apps:app集合疫向。
books:工作簿集合咳蔚。
sheets:表格集合豪嚎。
apps | books | sheets | |
---|---|---|---|
add(增添對象) | √ | √ | √ |
active(激活) | √ | √ | √ |
count(數(shù)量) | √ | √ | √ |
keys | √ | × | × |
api | × | √ | √ |
open | × | √ | × |
7.總結(jié)
看了很多函數(shù)后,會發(fā)現(xiàn)這些對象很多相似的地方谈火,還有事層層遞進(jìn)的 app----book---sheet--Range侈询。
如果有父集可以找到父集,有子集可以找到子集糯耍,沒有可以創(chuàng)建扔字,能查詢名稱,能找到對應(yīng)的集合温技。
1.要創(chuàng)建excel工作簿:(app對象或book對象)
xw.Book()
xw.App()
要打開已經(jīng)存在的工作簿:
xw.books.open(路徑)
2.選定sheet:(Sheet對象)
xw.books[0].sheets[0]
3.選定單元格兩種方式:
- xw.App().books[0].sheets[0].range(cells,cells)
可以構(gòu)造列表進(jìn)行excel表的存取啦租。 - xw.App().books[0].sheets[0][0,1]
可以用for循環(huán),來進(jìn)行讀取荒揣。
當(dāng)然還有一些問題,自己也沒弄懂焊刹,希望下次可以解決系任。
如果有錯誤或者疑問的話,歡迎指點虐块。
最后最后俩滥,如果有幫助的話,不妨點個喜歡:氐臁K伞!