python--Excel模塊xlwings


安裝:pip install xlwings  

基本操作:

xlwings的特色:

  • xlwings能夠非常方便的讀寫Excel文件中的數據,並且能夠進行單元格格式的修改
  • 可以和matplotlib以及pandas無縫連接
  • 可以調用Excel文件中VBA寫好的程序,也可以讓VBA調用用Python寫的程序。
  • 開源免費,一直在更新
  • 【能讀出公式計算的值】

 

新建工作簿: 

import xlwings as xw
app = xw.App(visible=True,add_book=False) #創建應用
#visible=True   顯示Excel工作簿;False  不顯示工作簿
#add_book=False   不再新建一個工作簿;True  另外再新建一個工作簿
wb = app.books.add() #新建工作簿
sh1=xw.books.active #引用活動工作薄
wb.activate() #激活為當前工作簿

 

 

 

打開已有工作簿: 

方式一:

import xlwings as xw
app = xw.App(visible=True,add_book=False)
wb = app.books.open('D:\sample.xlsx') #讀入已有工作簿

方式二:

import xlwings as xw
wb = xw.Book('D:\sample.xlsx') #讀入已有工作簿
#工作簿不顯示

 

保存工作簿:

import xlwings as xw
wb = xw.Book('D:\sample.xlsx')
wb.save('D:\samplelm.xlsx') #保存工作簿

參數可以省略:工作簿的原路徑或腳本所在的路徑

 

退出和關閉: 

import xlwings as xw
app = xw.App(visible=True,add_book=False)
wb = app.books.open('D:\sample.xlsx')
wb.close() #關閉工作簿(程序不能編輯了)----顯示的文件不關閉
app.quit() #退出應用---顯示的文件也關閉

 

工作表操作:

import xlwings as xw
app = xw.App(visible=True,add_book=False)
wb = app.books.open('D:\sample.xlsx')
sht = wb.sheets[0] #引用工作表
#參數:工作表序號
sht1 = wb.sheets['物理'] #引用工作表
#參數:工作表名稱
sht=xw.sheets.active #引用活動sheet

print(sht)
print(sht1)
wb.close() 
app.quit()  
sht.clear() # 清除sheet的內容和格式
a=sht.name #返回表格名稱
sht.delete    # 刪除sheet----[沒有刪除啊 ???]

 

 

 

單元格操作: 

import xlwings as xw
app = xw.App(visible=True,add_book=False)
wb = app.books.open('D:\sample.xlsx')
sht = wb.sheets[0]

rng = sht.range('a1') #引用單元格---方式一
#<Range [sample.xlsx]Sheet!$A$1>
#參數:可以大寫,可以小寫
rng = sht['b1'] #引用單元格---方式二
rng = sht[0,0] #引用單元格---方式三--第一行的第一列即a1
rng=xw.Range('c1') #引用活動sheet上的單元格
#注意Range首字母大寫

print(rng)
wb.close()
app.quit()
rng = sht.range('a1:a5') #引用區域---方式一
#<Range [sample.xlsx]Sheet!$A$1:$A$5>
rng = sht['a1:b5'] #引用區域---方式二
#<Range [sample.xlsx]Sheet!$A$1:$B$5>
#rng = sht[:5,0]  #引用區域---方式三---????
rng = sht.range('a1')
rng.value=10 #單元格賦值
rng = sht.range('b1')
rng.value='abcd' #單元格賦值
sht.range('c1').value = [1,2,3,4] #按行插入
#從單元格c1開始,按行依次插入數據
sht.range('a1:d4').value = [10,20,30,40] #指定區域插入數據---按行
 sht.range('a2').options(transpose=True).value = [5, 6, 7, 8] #按列插入
#從單元格a2開始,按列依次插入數據
#既然默認的是按行寫入,我們就把它倒過來嘛(transpose),單詞要打對,如果你打錯單詞,它不會報錯,而會按默認的行來寫入
sht.range('a6').expand('table').value = [['a','b','c'],['d','e','f'],['g','h','i']] #區域賦值
#從單元格a6開始賦值
#['a','b','c']  是一行;['d','e','f']是一行
L=sht.range('a1:d4').value #讀取A1:D4區域的值

原表格數據:

 

返回值:

 

 返回值是列表,每一行是一個列表

返回的數值默認是浮點數

rng=sht['d2']
a=rng.value #返回指定單元格的值

 

rng = sht.range('a1')
rng.add_hyperlink(r'www.baidu.com','百度','提示:點擊即鏈接到百度') # 指定單元格加入超鏈接
a=rng.hyperlink #獲得range的超鏈接
#http://www.baidu.com/

 

 

rng = sht.range('b6')
rng.formula='=SUM(B1:B5)' #輸入公式
a=rng.formula #獲取公式
#=SUM(B1:B5)
a=rng.get_address(row_absolute=True, column_absolute=True,include_sheetname=False, external=False) # 獲得單元格的絕對地址
# $B$6

 

 

 

其它操作: 

a=wb.fullname #返回工作簿的絕對路徑
#D:\sample.xlsx
a=wb.name #返回工作簿的名稱
#sample.xlsx
sht.activate() # 激活sheet為活動工作表
sht = wb.sheets[0]
rng = sht.range('a1')
a=rng.address #取得當前range的地址--$A$1
rng = sht.range('a1:c1')
a=rng.address #取得當前range的地址--$A$1:$C$1
a=rng.get_address() #與rng.address相同
rng.clear_contents() # 清除range的內容
rng.clear() # 清除格式和內容

 

sht = wb.sheets[0]
rng = sht.range('a1')
rng.color=(255,0,0) # 設置range的背景顏色
rng = sht.range('b1')
rng.color=(0,0,255)
a = rng.color # 取得range的背景色,以元組形式返回RGB值
#(255, 0, 0)
rng.color=None # 清除range的背景色

 

sht = wb.sheets[0]
rng = sht.range('c2:g4')
a=rng.column #獲得range的第一列列標
#從A列是1
a=rng.count #返回range中單元格的格數

 

a=rng.row # 返回range的第一行行標

 

rng = sht.range('b2:g4')
a=rng.last_cell #獲得range中右下角最后一個單元格
#<Range [sample.xlsx]Sheet!$G$4>

 

 

rng = sht.range('b6:c1')
a=rng.width # 返回range的總寬度
rng = sht.range('b6')
a=rng.column_width # 獲得列寬

 

sht = wb.sheets[0]
rng = sht.range('b2:g4')
a=rng.row_height # 行的高度,所有行一樣高返回行高,不一樣返回None
a=rng.height # 返回range的總高度
a=rng.shape # 返回range的行數和列數---(3, 6)
a=rng.sheet # 返回range所在的sheet
#<Sheet [sample.xlsx]Sheet>
a=rng.rows #返回range的所有行
for i in a:
    print(i)
    #<Range [sample.xlsx]Sheet!$B$2:$G$2>
    #<Range [sample.xlsx]Sheet!$B$3:$G$3>
    #<Range [sample.xlsx]Sheet!$B$4:$G$4>
a=rng.rows[0] # range的第一行
#<Range [sample.xlsx]Sheet!$B$2:$G$2>
a=rng.rows.count # range的總行數
a=rng.columns # 返回range的所有列
for i in a:
    print(i)
    #<Range [sample.xlsx]Sheet!$C$2:$C$4>
    #<Range [sample.xlsx]Sheet!$D$2:$D$4>
    #<Range [sample.xlsx]Sheet!$E$2:$E$4>
    #<Range [sample.xlsx]Sheet!$F$2:$F$4>
    #<Range [sample.xlsx]Sheet!$G$2:$G$4>

 

rng = sht.range('b2:g4')
a=rng.columns[0] # 返回range的第一列
#<Range [sample.xlsx]Sheet!$B$2:$B$4>
a=rng.columns.count # 返回range的列數
rng.autofit() # 所有range的大小自適應
rng.columns.autofit() # 所有列寬度自適應
rng.rows.autofit() # 所有行高自適應

 

 

 

 


免責聲明!

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



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