xlwings 創建工作表


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

 


免責聲明!

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



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