1.新建一個工作簿
# 創建Excel文件 import xlwings as xw wb = xw.Book() # 創建一個Excel進程App, 並在App中新建一個Book,Book下自動創建一個Sheet wb.save('new.xlsx') wb.close() # 創建Excel文件2 app = xw.App(visible=False, add_book=False) # 創建一個進程 App,不可見,不自動創建Book wb = app.books.add() # 在app下 創建一個Book wb.save('1.xlsx') wb.close() app.quit() # 結束進程
2.打開已有工作簿
# 打開已有Excel 文件 import xlwings as xw app = xw.App(visible = True, add_book = False) app.display_alerts = False # 不顯示Excel 消息框 app.screen_updating = False # 關閉屏幕更新,可加快宏的執行速度 wb = app.books.open('1.xlsx') print(wb.fullname) # 輸出文件的絕對路徑 wb.save() app.quit() # 退出程序 或者 使用 app.kill() 殺死進程 強制退出 # 以第一種方式創建Book時,打開文件的操作可如下: wb = xw.Book('1.xlsx') """ 注意: (1)每個App對應一個PID值,這個PID值可以認為是一個標簽,用來識別不同的App。 (2)創建工作簿之前要先創建App: app=xw.App(visible=Ture,add_book=False) (3)通過xlwings可以創建多個App,每個App又可以創建多個工作簿,每一個工作簿中又可以創建多個Sheet。 (4)需要注意的是這些App之間是相互獨立的,也就是操作不同的工作簿的時候就要找到對應的App。 建議使用 xw.Book('filename.xlsx')來打開工作簿或者引用工作簿,不容易出錯 """
3.獲取單元格值
import xlwings as xw wb = xw.Book('1.xlsx') # 實例化一個工作簿 ws = wb.sheets['sheet1'] # 實例化一個工作表 ws.range('A1').value = '寫入第一個值' print(ws.range('A1').value) # 讀取值 並打印 ws.range('A1').clear() # 清空單元格值,如果單元格中是圖片 則無效 ws.range('A1').value = [[1,2,3],[4,5,6]] # 傳入列表 寫入多行值 # 傳入pandas dataframe import pandas as pd df = pd.DataFrame([[1,2],[3,4]],columns = ['a','b']) ws.range('A1').value = df ws.range('A1').options(pd.DataFrame,expand = 'table').value # 讀取數據,輸出為DataFrame
# 傳入圖片 import matplotlib.pyplot as plt fig = plt.figure() plt.plot(x,np.log(x)) ws.pictures.add(fig,name='MyPlot',updae=True)
4.列標轉化為數字
# Tips: 對於A-Z的單元格可以這樣進行訪問,在進行循環讀寫的時候比較好用 n =65 n = chr(n) # ASCII字符 pos = '%s%d' % (n, 1) print(pos) #A1
5.xlwings 的層次結構
apps->books->sheets->range
6.范圍取值和寫值
# 范圍取值 import xlwings as xw wb = xw.Book('1.xlsx') ws = wb.sheets['sheet1'] range1 = ws.range('A1:D4') print(range1) print(range1.value) range2 = ws[:3,:3] print(range2)
# 范圍寫值 ws.range('A1').options(transpose = True).value = [1,2,3,4] # 轉置寫值 ws.range('A1').options(expand = 'table').value = [[1,2],[3,4],[5,6]] # 寫入二維表格
7 .獲取當前工作表的行列數
# 獲取當前工作表的行列數 shape = ws.used_range.shape print(shape) # 獲取當前工作表的行列數2 rng = ws.range('A1').expand() nrow2 = rng.last_cell.row ncol2 = rng.last_cell.column print(nrow2) # 3 print(ncol2) # 1
# UsedRange屬性返回工作表中所有已使用范圍的單元格區域是指:單元格中有數值、公式、單元格格式化設置(例如:單元格字體設置、邊框設置等等)
# 當然我們可以使用遍歷的方式去尋找Excel文件中非空行的數量
row = 1
while ws.range('A'+ str(row)).value != None:
row+=1
print(row-1)
8.單元格還有其他一些屬性和方法:
# 獲取"AB2"單元格的行標和列標 print(ws.range('A2').row) print(ws.range('A2').column) # 高度和寬度 print(ws.range('A2').row_height) print(ws.range('A2').column_width) # 設置單元格填充色,可根據RGB顏色表尋找自己想要的顏色 ws.range('A2').color = (255,0,0) # 獲取顏色 print(ws.range('A2').color) # 清除顏色格式 ws.range('A2').color = None # 使用公式 ws.range('A2').formula='=SUM(A1,A2) # 另外還可以獲取某一個單元格的公式 print(ws.range('AB2').formula_array) # 清除工作表的所有內容但是保留原有格式 ws.clear_contents() # 當然了還有很多其他的屬性 #range.address range.current_region range.end #range.api range.autofit range.expand