xlwings API


一、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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM