麻豆黑色丝袜jk制服福利网站-麻豆精品传媒视频观看-麻豆精品传媒一二三区在线视频-麻豆精选传媒4区2021-在线视频99-在线视频a

千鋒教育-做有情懷、有良心、有品質的職業教育機構

手機站
千鋒教育

千鋒學習站 | 隨時隨地免費學

千鋒教育

掃一掃進入千鋒手機站

領取全套視頻
千鋒教育

關注千鋒學習站小程序
隨時隨地免費學習課程

當前位置:首頁  >  技術干貨  > 關于Xlwings使用,配套案例一個不少

關于Xlwings使用,配套案例一個不少

來源:千鋒教育
發布人:wjy
時間: 2022-06-07 11:38:00 1654573080

  本篇文章是圍繞以下四點帶大家學習xlwings。

  xlwings是什么

  xlwings安裝更新與卸載

  xlwings詳細使用

  案例分享

  1.xlwings是什么

  在日常生活中我們或多或少的都會跟Excel打交道,比如做銷售統計,人力的考勤,學生的考試成績等等,甚至在某些領域會涉及到批量操作Excel表格,那對于非程序員來說,可能使用Excel中的函數,但是在某種場景下這些又是不好使的,只能熬夜加班啦!但是對于程序員來說,可能就是分分鐘的事,輕松搞定。

  那在我們Python中有哪些模塊(或者第三方庫)可以輕松處理Excel 呢?給大家列出來學習一下

全網最全Xlwings使用,配套案例一個不少275

全網最全Xlwings使用,配套案例一個不少278

 

  哇slwings是不是很香,更詳細的大家可以去參看趣味干貨中的:Python殺死Excel?眾多模塊哪家強,鏈接:https://mp.weixin.qq.com/s/uL6JbxNWUYa7yjUp8aorSA

  簡單介紹下xlwings,xlwings是一個可以實現從Excel調用Python,也可在python中調用Excel的庫。開源免費,一直在更新。特點:

  1、xlwings支持.xls讀,支持.xlsx文件讀寫。

  2、支持Excel操作。

  3、支持VBA。

  4、強大的轉換器可以處理大部分數據類型,包括在兩個方向上的numpy array和pandas DataFrame。

  文檔鏈接:https://docs.xlwings.org/en/stable/index.html

全網最全Xlwings使用,配套案例一個不少631

 

  有沒有發現,xlwings宗旨就是讓Excel飛起來!!!

  2.xlwings安裝與使用

  安裝

  像安裝其他模塊一樣,使用pip安裝即可

  pip install xlwings

  如果你是在使用Anaconda也可以,使用conda安裝

  conda install xlwings

  請注意,官方的conda軟件包可能落后于幾個版本。但是,您可以使用conda-forge通道(如果已經安裝了xlwings,請用upgrade替換安裝):

  conda install -c conda-forge xlwings

  注意:在安裝過程中,xlwings也是有依賴項的,但是依賴項通過conda或pip自動安裝

  Windows:pywin32

  Mac:psutil,appscript

  如果原來安裝過,使用如下操作更新

  要更新到最新的xlwings版本,請在命令提示符中運行以下內容:

  pip install --upgrade xlwings

  或者:

  conda update -c conda-forge xlwings

  通過運行以下內容(確保先關閉Excel),確保您的Excel加載項版本與您的Python軟件包保持同步:

  xlwings addin install

  若要卸載xlwings,移步下面的操作

  要完全卸載xlwings,請先卸載加載項,然后使用安裝xlwings軟件包時使用的相同方法(pip或conda)卸載xlwings軟件包:

  xlwings addin remove

  然后

  pip uninstall xlwings

  或者:

  conda remove xlwings

  最后,手動刪除個人文件夾中的.xlwings目錄(如果存在)。

  3.xlwings詳細使用

  在我們操作之前可以先了解下,如下內容:

  • 新建:創建一個不存在的工作薄或者工作表

  • 打開:打開一個已經存在的工作薄

  • 引用:就是告訴程序,你要操作哪個對象。比如你打開了A、B、C三個工作薄,現在你想操作A工作薄,就要先引用A

  • 激活:我們可以同時打開多個工作薄,但是一次只能操作一個工作簿,我們正在操作的這個工作薄稱為**當前活動工作薄。

  在xlwings中

  • Excel程序用App來表示,多個Excel程序集合用Apps表示;

  • 單個工作簿用Book表示,工作簿集合用Books表示;

  • 單個工作表用Sheet表示,工作表集合用Sheets表示;

  • 區域用Range表示,既可以是一個單元格,也可以是一片單元格區域。

全網最全Xlwings使用,配套案例一個不少1672

 

  對Excel進行操作主要使用如下三個類:

  import xlwings as xw

  xw.App 打開一個excel應用

  xw.Book 創建一個工作薄

  xw.Sheet 創建一個工作表

  初試:創建一個excel表格并保存

  import xlwings as xw

  # 打開excel,參數visible表示處理過程是否可視,add_book表示是否打開新的Excel程序

with xw.App(visible=True,add_book=False) as app:
# 創建一個工作薄
book = app.books.add()
# 工作薄中創建一個sheet
sht = book.sheets.add()
# 向表格的A1單元格寫入“Hello Python”
sht.range('A1').value = 'Hello Python'
# 保存
book.save('./test.xlsx')

  理解App

  App就是我們打開的一個Excel應用,在我們程序員看來一個App對象就是一個Excel的實例,在此實例下創建工作薄。因此我們要創建工作簿,就必須先創建App實例。一個App實例可以創建多個工作簿Book。

  使用xlwings可以創建一個或者多個App,而每個App中又可以創建多個工作薄Book,并且多個App之間是相互獨立的。

  要使用xlwings就需要先引用該庫

import xlwings as xw

app=xw.App()
pid = app.pid
print(pid) # 6260就是這個AppPID

綜合:

import xlwings as xw

app=xw.App()
pid = app.pid
# 就是這個AppPID
app1=xw.App()
pid1 = app1.pid
print(pid,pid1) # 6260

count = xw.apps.count
print(count)
print(xw.apps.keys())

創建App

  我們可以通過xw.app()創建一個新的app實例

  app=xw.App(visible=True,add_book=False) # 當然也可以通過app.visible = True設置可見性

  其中可以設置參數visible:用來設置程序是否可見,True表示可見(默認),Flase不可見。addbook用來設置是否自動創建工作簿,True表示自動創建(默認),False不創建。當設置成addbook=False時,可以創建App,但是還未生成PID,只有當這個App創建了工作簿后,才會生成自己的PID 。

  創建成果后可以查看pid

import xlwings as xw

app=xw.App()
pid = app.pid
print(pid) # 6260就是這個AppPID

綜合:

import xlwings as xw

app=xw.App()
pid = app.pid
# 就是這個AppPID
app1=xw.App()
pid1 = app1.pid
print(pid,pid1) # 6260

count = xw.apps.count
print(count)
print(xw.apps.keys())

  結果:

  

全網最全Xlwings使用,配套案例一個不少3030

 

  可以引用某個app實例進行操作并激活

app = xw.apps[992]
app.activate() # 或者app.activate(steal_focus=True)
# steal_focus=True, Excel程序變為最前臺的應用,并且把焦點從Python切換到Excel

  在操作一個app對象的時候要先引用工作薄,但是引用并不代表激活,激活就是當前操作的工作薄。

  常用的屬性有:

  app.screen_updating:打開屏幕更新,我們可以看到xlwings對Excel進行操作的過程,關閉更新可以加速腳本運行。默認是打開的。

  app.display_alerts:在使用Excel的過程中,經常會遇到一些提醒信息,比如關閉前的保存提示、數據有效性的警告窗口,若想隱藏這些窗口可以設置成False。如果提醒信息是需要反饋的,Excel會選擇默認的方式True

import xlwings as xw

app = xw.App(visible=False, add_book=False)  # 界面設置
app.display_alerts = False  # 關閉提示信息
app.screen_updating = False  # 關閉顯示更新

wb = app.books.add()  # 創建新的工作簿
sht = wb.sheets['Sheet1']  # 實例化工作表
sht.range('A1').value = 'Hello World!'
print(sht.range('A1').value)  # 讀取
wb.close()
app.kill()

  其中關閉app有兩種方式,通過測試使用kill()函數更快些。

  app.kill():通過殺掉進程,強制Excel app退出

  app.quit():退出excel程序,不保存任何工作簿

  工作簿Book與Books

  前面介紹了app,并且一個app可以包含多個工作薄,如何在app中創建工作薄呢?

  創建Book對象

  官方給出的創建工作薄的方式如下:

全網最全Xlwings使用,配套案例一個不少3915

 

  兩種方式的區別:方式1是創建一個新的App,并在新App中新建一個Book,方式2是在當前App下新建一個Book

  如果是打開一個已經存在的則使用:

  wb = app.books.open('絕對或者相對路徑的excel文件')

  '或者

  wb = xw.Book('絕對或者相對路徑的excel文件')

  其中創建Book對象的參數如下:

Book(fullname=None, updatelinks=None, readonly=None, format=None,
 password=None, writerespassword=None, ignorereadonlyrecommended=None,
 origin=None, delimiter=None, editable=None, notify=None, converter=None,
 addtomru=None, local=None, corruptload=None, impl=None)

  詳細情況可以參考文檔:https://docs.microsoft.com/zh-cn/office/vba/api/excel.workbooks.open

  xw.Book('絕對或者相對路徑的excel文件')既可以打開工作薄也可以引用工作簿。

  激活與保存

  wb.activate()

  # 如果steal_focus=True, 則把窗口顯示到最上層,并且把焦點從Python切換到Excel

  wb.activate(steal_focus=True)

  保存工作薄:

  wb.save()

  # 或者使用指定路徑保存

  wb.save('存儲路徑')

  關閉

  關閉工作薄也很簡單,就是使用wb.close(),注意:wb.close()只是關閉并不會保存,所以在關閉之前必須要使用save()進行一下保存才可以。可以考慮使用with搭建上下文,實現關閉資源。

import xlwings as xw

app=xw.App(visible=True,add_book=False)
app.display_alerts=False
app.screen_updating=False
# 文件位置:filepath,打開test文檔,然后保存,關閉,結束程序
filepath=r'test.xlsx'
wb=app.books.open(filepath)

wb.save()
wb.close()
app.quit()

  若想獲取當前活動App中的所有books,可以直接通過下列方式

import xlwings as xw

# 當前活動App的工作簿集合
books = xw.books

# 或者使用app.books獲取
# books = app.books

  工作表Sheet與查看所有Sheets

新建Sheet

sht = wb.sheets.add()
# 或者
sht = wb.sheets.add('test',after='sheet2')

參數1為工作表名稱,省略的話為Excel默認名稱,參數2為插入位置,可選before或者after

若想引用某一個Sheet,可以通過下面方式

sht = wb.sheets('sheet1') # 指定名稱獲取sheet工作表

sht = wb.sheets(1) # 根據序號獲取

sht = xw.sheets.active #獲取當前活動的工作表

import xlwings as xw

app=xw.App(visible=True,add_book=False)
app.display_alerts=False
app.screen_updating=False
# 文件位置:filepath,打開test文檔,然后保存,關閉,結束程序
filepath=r'test.xlsx'
wb=app.books.open(filepath)

# add()是在現有的sheets集合列表中追加新的Sheet
sht1 = wb.sheets.add()
sht2 = wb.sheets.add()
print(wb.sheets.count)

sht3 = wb.sheets(1)
# sht1.activate()
sht3.range('A1').value = 'Hello Running'

wb.save('test1.xlsx')
wb.close()
app.quit()

sheet對象可以調用的方法有:

 sheet.activate       sheet.charts         sheet.index
 sheet.api            sheet.clear          sheet.name
 sheet.autofit        sheet.clear_contents sheet.names
 sheet.book           sheet.delete         sheet.pictures
 sheet.cells          sheet.impl           sheet.range
 ......

常用的有:

# 清除工作表所有內容和格式
sht.clear()
# 清除工作表的所有內容但是保留原有格式
sht.clear_contents()
# 刪除工作表
sht.delete()
# 自動調整行高列寬
sht.autofit('c')
# 在活動工作簿中選擇
sht.select()

可以通過屬性獲取獲取工作表的名稱、所有單元格的區域對象、當前工作表的索引值

sht.name      sht.cells      sht.index     sht.names

  引用區域與單元格操作

  在操作區域或者單元格之前,首先就要引用他們,其實就是表明你要操作的區域或者單元格是哪些。可以認為區域是多個單元格。

  引用區域的方式有很多種,下面列舉一下常見的引用方式:

xw.Range('A1:D4')
xw.Range((1,1), (44))
xw.Range(xw.Range('A1'),xw.Range('D4'))
xw.Range(xw.Range('A1:E6'),xw.Range('C3:D7'))
xw.Range('NamedRange')
app.range("A1")  # 注意是小寫的range
sht.range('A1')
xw.books['MyBook.xlsx'].sheets[0].range('A1')
sht['A1']
sht['A1:D4']
sht[0,5]
sht[:5,:5]

  區域管理可以通過如下方式:

  range.offset(rowoffset=5,columnoffset=2) 表示偏移,rowoffset行偏移量(正數表示向下偏移,負數相反),columnoffset列偏移量(正數表示向右偏移,負數相反)

  注意:是將選區范圍進行偏移,內容不進行偏移

  range.expand(mode='down') 擴展區域,參數可選取 'down' , 'right' ,'table' ,類似我們使用向下、向右或者下右方的區域擴展操作。

  range.resize(rowsize=4, columnsize=2) 表示調整選中區域的大小,參數表示調整后區域的行、列的數量。

  range.current_region 表示全選 類似Ctrl + A

  對區域或單元格進行操作:

  存儲數據

  儲存單個值

  # ".value“屬性

  sht.range('A1').value=1

  儲存列表

  # 將列表[1,2,3]儲存在A1:C1中

  sht.range('A1').value=[1,2,3]

  # 將列表[1,2,3]儲存在A1:A3中

  sht.range('A1').options(transpose=True).value=[1,2,3]

  # 將2x2表格,即二維數組,儲存在A1:B2中,如第一行1,2,第二行3,4

  sht.range('A1').options(expand='table').value=[[1,2],[3,4]]

  讀取數據

  讀取單個值

  # 將A1的值,讀取到a變量中

  a=sht.range('A1').value

  將值讀取到列表中

  #將A1到A2的值,讀取到a列表中

  a=sht.range('A1:A2').value

  # 將第一行和第二行的數據按二維數組的方式讀取

  a=sht.range('A1:B2').value

  清除與刪除

  # 清除range的內容

  rng.clear_contents()

  # 清除格式和內容

  rng.clear()

  # 刪除

  rng.delete(shift=None)

  其他設置

  # 獲取數字格式

  rng.number_format

  # 設置數字格式

  rng.number_format = '0.00%'

  rng.insert(shift=None, copy_origin='format_from_left_or_above')

  # 返回區域第一行的行號

  rng.row

  # 返回區域的第一列的號,注意返回的列號不是ABCD,而是1234

  rng.column

  # 獲取行高 或者設置行高

  rng.row_height

  rng.row_height = 20

  # 獲取列寬或設置列寬

  rng.column_width

  rng.column_width = 20

  # 自適應行高列寬

  rng.autofit()

  rng.columns.autofit()

  rng.rows.autofit()

  # 合并單元格

  rng.merge(across=False)

  rng.merge_area # 返回合并單元格區域

  rng.merge_cells # 返回True或者False,測試是否在合并單元格區域

  rng.unmerge() # 取消單元格合并

  # 背景色

  rng.color # 獲取指定區域的背景色

  xw.Range('A1').color = (255,255,255) # 設置背景色

  xw.Range('A2').color = None # 去除背景色

  其他參考

 range.add_hyperlink  range.clear_contents range.count
 range.address        range.color          range.current_region
 range.api            range.column         range.end
 range.autofit        range.column_width   range.expand
 range.clear          range.columns        range.formula
...等等

  range.add_hyperlink('https://www.baidu.com','百度')

  range.color = (128,128,128) RGB通道顏色,可獲取or設置

  range.row/column 獲取第幾行/列,注意是第幾而不是下標

  range.formula 可以設置計算表達式,用來進行表內計算

  range.current_region 返回當前range所在區域的區域表達,這個比較難描述,好比一個Excel中互相連接的單元格都是連城一片,兩個片之間沒有任何相鄰就是互相獨立的。

  range.count 返回這個range中共有多少單元格,合并單元格仍然按未合并的算

  range.offset(a,b) 獲取到當前range向右a格,向下移動b格同樣大小的那片區域,ab可以為負值

  range.rows/columns 返回行/列的各個range對象

  range.expand

  參考案例代碼:

  批量寫入并讀取數據

import xlwings as xw

wb = xw.Book()
sht = wb.sheets.active
# 向工作表中寫入行列值
for i in range(1, 6):
    for j in range(1, 6):
        sht.range(i, j).value = '({}, {})'.format(i, j)
print(sht.range((1, 1), (5, 5)).expand().value)  # 批量讀取
print(sht.range(1, 1).expand('right').value)  # 按行讀
print(sht.range(1, 1).expand('down').value)  # 按列讀
wb.close()

全網最全Xlwings使用,配套案例一個不少9294

 

  提前設置好表格的顏色,如圖

全網最全Xlwings使用,配套案例一個不少9311

 

  import xlwings as xw

  from itertools import product

  app = xw.App(visible=False) # 隱藏Excel

  wb = app.books.open('test.xlsx') # 打開工作簿

  sht = wb.sheets['Sheet1'] # 實例化工作表

  for cell in list(map(''.join, product('ABCDEFGH', '1'))): # A1 B1 C1 D1 E1 F1 G1 H1

  print(cell, sht.range(cell).color) # 填充顏色

  wb.close()

  局中插入圖片

 

全網最全Xlwings使用,配套案例一個不少9633

 

  截屏2021-11-22 下午8.40.22

  import os

  import xlwings as xw

  wb = xw.Book()

  sht = wb.sheets['Sheet1']

  rng = sht.range('A1')

  fileName = os.path.join(os.getcwd(), 'aa.png')

  width, height = 120, 100 # 指定圖片大小

  left = rng.left + (rng.width - width) / 2 # 居中

  top = rng.top + (rng.height - height) / 2

  sht.pictures.add(fileName, left=left, top=top, width=width, height=height)

  wb.save('test2.xlsx')

  wb.close()

  綜合案例:

  import xlwings as xw

  wb = xw.Book()

  sht = wb.sheets[0]

  info_list = [['110202111111234','帳篷',5],

  ['110202111118891','行李箱','16'],

  ['110202111111004','微波爐','20'],

  ['110202111132741','電冰箱','13'],

  ['110202111109852','樂事薯片','30'],

  ['110202111112030','魯花花生油','12'],

  ['110202111190391','羽絨服','9'],

  ['110202111122319','防曬霜','18'],

  ]

  # 寫入表頭

  titles = [['商品編號','商品名稱','數量']]

  sht.range('a1').value = titles

  # 寫入數據

  sht.range('a2').value = info_list

  # 保存數據

  wb.save('goods.xlsx')

全網最全Xlwings使用,配套案例一個不少10521

 

  若想更新里面的數據,由于有些商品被賣出,商品數量就會發生變化。另外還有一批貨是新引入的。參考代碼如下:

  import xlwings as xw

  wb = xw.Book()

  sht = wb.sheets[0]

  info_list = [['110202111111234','帳篷','5'],

  ['110202111118891','行李箱','16'],

  ['110202111111004','微波爐','20'],

  ['110202111132741','電冰箱','13'],

  ['110202111109852','樂事薯片','30'],

  ['110202111112030','魯花花生油','12'],

  ['110202111190391','羽絨服','9'],

  ['110202111122319','防曬霜','18'],

  ]

  # 寫入表頭

  titles = [['商品編號','商品名稱','數量']]

  sht.range('a1').value = titles

  # 寫入數據

  sht.range('a2').value = info_list

  # 保存數據

  wb.save('goods.xlsx')

  # 讀取數據

  goods_list = sht.range('a2').expand('table').value

  for goods in goods_list:

  goods[0] = str(int(goods[0]))

  goods[2] = int(goods[2])

  print(goods_list)

  new_info = [['110202111111234','帳篷',5],

  ['110202111118891','行李箱',16],

  ['110202111111004','微波爐',20],

  ['110202111132741','電冰箱',10],

  ['110202111124660','羊毛衫',8],

  ['110202111109852','樂事薯片',10],

  ['110202111112030','魯花花生油',12],

  ['110202111190391','羽絨服',0],

  ['110202111122319','防曬霜',9],

  ['110202111124560','牛仔褲',18],

  ['110202111134798','老爹鞋',11]]

  # 去重

  extra = [i for i in new_info if i not in goods_list]

  # print(extra)

  # 讀取extra每個商品的包裹號,判斷是否存在并更新,然后添加

  ids = sht.range(2, 1).expand('down').value

  ids = [str(int(id)) for id in ids]

  rows = len(sht.range('a2').expand('table').value)

  # 更新已有數據的庫存

  for goods in extra:

  if goods[0] in ids:

  row_number = ids.index(goods[0])

  print(row_number,goods[1])

  sht[row_number+1,2].value = goods[2]

  else:

  for i in range(3):

  sht[rows+1,i].value =goods[i]

  rows+=1

  wb.save('goods.xlsx')

  結果:

全網最全Xlwings使用,配套案例一個不少12101

 

  更多關于python培訓的問題,歡迎咨詢千鋒教育在線名師。千鋒教育擁有多年IT培訓服務經驗,采用全程面授高品質、高體驗培養模式,擁有國內一體化教學管理及學員服務,助力更多學員實現高薪夢想。

tags:
聲明:本站稿件版權均屬千鋒教育所有,未經許可不得擅自轉載。
10年以上業內強師集結,手把手帶你蛻變精英
請您保持通訊暢通,專屬學習老師24小時內將與您1V1溝通
免費領取
今日已有369人領取成功
劉同學 138****2860 剛剛成功領取
王同學 131****2015 剛剛成功領取
張同學 133****4652 剛剛成功領取
李同學 135****8607 剛剛成功領取
楊同學 132****5667 剛剛成功領取
岳同學 134****6652 剛剛成功領取
梁同學 157****2950 剛剛成功領取
劉同學 189****1015 剛剛成功領取
張同學 155****4678 剛剛成功領取
鄒同學 139****2907 剛剛成功領取
董同學 138****2867 剛剛成功領取
周同學 136****3602 剛剛成功領取
相關推薦HOT
主站蜘蛛池模板: 久久中文字幕一区二区| 四虎影院国产| 动漫人物将机机插曲3d版视频 | 久久电影精品| 国产福利精品一区二区| 欧美黑人巨大videos极品| 美女爽到尿喷出来| 男人黄女人色视频在线观看| 两个人看的www视频日本| 健身私教干了我好几次| 国产初次破初视频情侣| 亚洲国产欧美国产综合一区| 波多野结衣变态夫妻| 一本之道久久| 经典三级完整版电影在线观看 | 大尺度无遮挡h彩漫| 欧美在线播放| 天天看免费高清影视| 国产真实乱了全集mp4| 国产青草视频在线观看| 欧美a级完整在线观看| 538免费视频| 亚洲综合三区| 久爱视频在线| 特级aaaaaaaaa毛片免费视频| 国产色av| 天堂中文字幕在线观看| 中日韩精品视频在线观看| 美国式禁忌在完整有限中字| 女人18岁毛片| 色播在线电影| 6080一级毛片| 亚洲性色高清完整版在线观看| 成年性午夜免费视频网站不卡 | 高龄五十路中出| 国产精品久久福利网站| www.天天操.com| 站在镜子前看我怎么c你| 美女扒开尿口让男人捅| 国产亚洲人成网站在线观看| 91精品全国免费观看含羞草|