一、apps
import xlwings as xw app1 = xw.App() # 新建一個Excel進程 app2 = xw.App() print(xw.apps) # Apps([<Excel App 64260>, <Excel App 58540>]) xw.apps.active # 返回活動工作簿 xw.apps.count # 計算app的進程數 xw.apps.add() # 新增一個app xw.apps.keys() # [49236, 64260, 58540]
for key in xw.apps.keys(): # 關閉所有程序 xw.apps(key).kill()
二、Book
for i in range(1,4): wb = xw.Book() print(wb) print(xw.books)
代碼輸出結果如下:
<Book [工作簿4]> <Book [工作簿5]> <Book [工作簿6]>
Books([<Book [工作簿1]>, <Book [工作簿2]>, <Book [工作簿3]>, ...])
可知:xw.Book()會新建工作簿,這里默認會新建一個App,即打開Excel程序,並新建工作簿。上面新建的3個工作簿 全部在一個進程下。
三、引用工作簿的兩種方法
xw.Book('工作簿1') xw.books['工作簿1']
wb.app.calculate() # calculates all open books
wb.app.calculation = 'manual' # 設置計算模式為手動計算,manual, automatic, semiautomatic
wb.app.display_alerts = True # 默認值為True, False 的情況下執行操作時會忽略Excel彈窗消息
wb.app.screen_updating = False # 禁止屏幕更新(刷新)
wb.app.range(cell1,cell2=None) # 獲取單元格
wb.app.selection # 將所選單元格作為Range返回
xw.App().version # 返回Excel 程序版本號
四、books
apps 是所有 App 的集合
books 是所有 Book 的集合
sheets 是所有 Sheet 的集合
import xlwings as xw app1 = xw.App() app2 = xw.App() print(xw.books) book_keys = xw.apps.keys() first_book = book_keys[0] # 取列表的第一個值 print(xw.apps[first_book].books) # 應用 print(app1.books.active) # 激活一個Book print('count1:',app1.books.count) # 先打印一下app1下Book的總數 app1.books.add() # 增加一個新的Book,此新建的Book將自動變成被激活的Book print('count1:',app1.books.count) # 再次打印app1下Book的總數 app1.books.open('1.xlsx') # 打開操作,如果工作簿未打開則打開,若它已經打開,則返回工作簿對象。 # 或指定絕對路徑打開文件 app1.books.open('D:\datafile\1.xlsx') print(app1.books.open('1.xlsx')) # 再一次打印app1下Book的總數 print('count1:',app1.books.count)
wb = xw.Book() # 新建工作簿 wb.activate(steal_focus=True) # True則激活最前面的窗口,並將焦點從python移交給excel wb.app # 獲取創建工作簿的app對象 wb.caller() # 當通過RunPython從Excel調用Python函數時引用調用的工作簿 wb.set_mock_caller() # 設置當前工作薄為Python代碼的調用者即set_mock_caller讓Python知道誰是調用者 wb.close() # 關閉工作簿而不進行保存 wb.selection # 返回選定的單元格作為Range wb.macro() # 在Excel VBA中運行Sub或Function wb.name # 返回工作簿的名稱 wb.names # 返回一個名稱集合 wb.save(path=None) # 保存工作簿,可傳入保存路徑,同名會直接覆蓋 wb.sheets # 返回表示工作簿中所有工作表的工作表集
五、sheets
apps/ App
books/ Book
sheets/ Sheet
Range
import xlwings as xw wb = xw.Book('1.xlsx') #以xw.Book()方式打開工作簿 print(wb.sheets) #查看當前工作簿的所有Sheet詳情 print(wb.sheets.active) #激活一個Sheet發現是Sheet1 # 在Sheet1前新增一個Sheet並命名 print(wb.sheets.add(name='Python知識學堂', before='Sheet1')) # print(wb.sheets.add(name='Python知識學堂', 1)) print(wb.sheets.active) #激活Sheet頁,這個Sheet是新增的
# 返回激活(活動)工作表 wb.sheets.active # 新增Sheet頁,參數默認均為None,其中name為名稱,before指在那個頁簽前插入,after為哪個頁簽之后插入。 wb.sheets.add(name= None,before = None,after = None)
import xlwings as xw wb = xw.Book('1.xlsx') wb.sheets[0] # 使用索引值引用"2.xlsx"文件的Sheet1 wb.sheets['Sheet1'] # 直接使用名稱引用"2.xlsx"文件的Sheet1 wb.sheets.add() # 新建一個Sheet。默認為Sheet3 wb.sheets.count # 獲得工作簿中工作表sheet的數量
sheets/Sheet 的其它方法或屬性
import xlwings as xw wb = xw.Book('1.xlsx') sheet = wb.sheets[0] # 引用工作表Sheet1 sheet.activate #獲取當前活躍的工作簿 sheet.autofit() #在整個工作表上自動調整寬度,可傳參數 sheet.autofit(axis='c') # 在整個工作表上自動調整列的寬度 sheet.autofit(axis='r') # 在整個工作表上自動調整行的寬度 sheet.book # 返回指定Sheet的book,輸出 <Book [2.xlsx]> sheet.cells # 返回一個Range對象,該對象表示Sheet上的所有單元格(而不僅僅是當前正在使用的單元格)輸出<Range [2.xlsx]Sheet1!$1:$1048576> sheet.name # 獲取工作表的名稱 sheet.name = '我愛python知識學堂'# 工作表重命名 sheet.clear() # 清空工作表中的內容和格式 sheet.index # 返回對應sheet的索引值,從0計數 sheet.delete() # 刪除工作表 sheet.clear_contents() # 清除工作表的內容,但保留格式 # 工作表sheet中有數據區域最大的行數,法1 sheet['a1048576'].end('up').row # 工作表sheet中有數據區域最大的行數,法2 sheet.used_range.last_cell.row # 工作表sheet中有數據區域最大的列數,法1 sheet['xfd1'].end('left').column # 工作表sheet中有數據區域最大的列數,法2 sheet.used_range.last_cell.column # 返回工作表中已經使用的單元格區域 sheet.api.UsedRange # 法1 sheet.used_range # 法2 sheet.api.row('2:4').insert # 插入行,在第2-4行插入空白行 sheet.api.row('2:4').delete # 刪除行 # 取值 sheet.cells(2,4).value
六、Range
import xlwings as xw wb = xw.Book('1.xlsx') range = xw.Range('A1') # 引用A1單元格 range.value # 取單元格的值 range.value = 12 # 設置單元格的值 range.raw_value # 直接獲取並設置所使用(pywin32)引擎發送/接受的值,而無需進行任何xlwings數據清理/轉換。 xw.Range('A1:C4').value # 引用區域值,以二維數組形式呈現 xw.Range((1,1),(2,2)) xw.Range('A1').add_hyperlink(address = 'www.baidu.com') # 添加超鏈接 xw.Range('A2').address # 返回表示范圍參考的字符串值,輸出為$a$2 xw.Range.api # 返回所使用引擎的本機對象 xw.Range('a1').autofit() # 自動調整范圍內所有單元格的寬度和高度 # 自動調整列寬 wb.sheets[0].range('A1:B2').columns.autofit() # 自動調整行高 wb.sheet[0].range('A1:B2').rows.autofit() xw.Range('A1').clear() # 清除所選單元格的內容和格式,可選擇范圍 xw.Range('A2').clear_contents() # 清除內容,但保留格式 xw.Range('A2').color # 獲取單元格的背景色 xw.Range('A1').color = (255,255,255) # 設置單元格的背景色 xw.Range('A1').color = None # 刪除背景色 xw.Range('B1:C3').column # 返回所選范圍第一列的列標 xw.Range('B1:C3').row # 返回所選范圍第一行的行標 xw.Range('a1:d4').count # 返回所選單元格的數量 xw.Range('A1').current_region # 返回一個Range對象,該對象表示由(但不包括)空白行和空白列或者工作表的邊緣的任意組合限制的范圍,好比是一片鏈接的區域 xw.Range('A1').delete() # 刪除單元格,可選參數left和up, 如省略,Excel 將根據范圍的形狀來決定 xw.Range('A2').end('down') # 返回一個Range對象,該對象表示包含源范圍的區域末尾的單元格。參數可傳down,up,left,right.其實也是ctrl+方向 xw.Range('A2').end('right') xw.Range('A2').formula = '=sum(a3:a7)' # 輸入公式 print(xw.Range('A2').formula) # 輸出公式 # 已制定格式返回Range的 地址 xw.Range('A1:B2').get_address() # '$A$1:$B$2' ''' 參數: row_absolute(bool, 默認為True) 設置為True 可以將 引用的行部分 作為絕對引用返回 column_absolute(bool,默認為True) 設置為True 可以將 引用的列部分 作為絕對引用返回 include_sheetname(bool,默認為Falsee)設置為True 可以在 地址中包含 工作表名稱 external(bool, 默認為False) 設置為True 可以返回帶有工作簿和工作表名稱的外部引用 ''' xw.Range('a1:c2').height # 返回range的高度 xw.Range('a1:b3').width # 返回range的寬度 xw.Range('a1:c4').row_height # 獲取range的高度 以磅為單位 xw.Range('a1:c34').row_height = 15 # 設置range的高度 # 獲取范圍行和范圍列 xw.Range ('B2:C4').rows # 返回一個RangeRows對象,該對象表示指定范圍內的行。 xw.Range ('B2:C4').columns # 返回一個RangeRows對象,該對象表示指定范圍內的列。 xw.Range('B2:C4').rows.count # 獲取范圍行 xw.Range('B2:C4').columns.count # 獲取范圍列 xw.Range ('B2').left # 返回從A列的左邊緣到范圍左邊緣的距離 xw.Range ('B2').top # 返回從第1行的頂部邊緣到范圍的頂部邊緣的距離 xw.Range ('A1').hyperlink # 返回單元格中的超鏈接(對多個單元格沒效) # 插入單元格 xw.Range ('A3').insert(shift='right') #返回指定范圍的右下角單元格 range = xw.Range ('A1:C4').last_cell range.last_cell.row # 4 range.last_cell.column # 3 xw.Range("A4:C4").api.merge() # 合並單元格通過pywin32的api調用merge xw.Range("A4:C4").api.unmerge()# 拆分單元格 xw.Range('A1').number_format # 獲取設置Range的number_format # 設置Range的number_format xw.Range('A1:C3').number_format = '0.00%' xw.Range('A1:A3').paste() # 將剪貼板中的范圍粘貼到指定范圍 # 調整指定范圍的大小 xw.Range('A1:A3').resize(row_size = None,column_size = None ) # 選定單元格進行移動 xw.Range('B2:C4').offset(row_offset=1,column_offset=1) #row_offset行偏移,column_offset列偏移 xw.Range('B2:C4').shape # 以數組的形式返回所選范圍的值 xw.Range('B2:C4').sheet # 返回Range所屬的Sheet對象 xw.Range('B2:C4').size # 返回所選范圍單元格個數(元素個數) xw.Range('B2:C4').options(ndim=2).value xw.Range('A1:C1').options(ndim=2).value