4天的工作量,現在只要4小時就能完成,Python自動化之批量處理工作簿和工作錶(附源碼)

yunyun雲芸 2021-08-15 21:31:14 阅读数:181

本文一共[544]字,预计阅读时长:1分钟~
工作量 工作 就能 完成 python

Python用處太多了,比如耍朋友跟女朋友裝個逼,寫個酷一點的小程序,讓他去顯擺一下,提昇魅力杠杠的。又比如,你老板兒喊你加班把今年的報錶數據整出來,Python可以又快又好。又比如說看電影,我就是個窮屌絲沒錢充會員,Python可以讓不可能變為可能。再比如說,上班釘釘打卡,你在屋頭你就可以搞定,老板再也不知道你天天遲到。

這麼多用處,今天主要就來分享個,在工作上用Python怎麼提高效率,別人四天才能完成,你花半天就能完成工作,這樣的員工,老板不愛才怪了,直接上幹貨,有用就收藏一波哦。
在這裏插入圖片描述

一、批量新建並保存工作簿

import xlwings as xw # 導入庫
# 啟動Excel程序,但不新建工作簿
app = xw.App(visible = True, add_book = False)
for i in range(6):
workbook = app.books.add() # 新建工作簿
workbook.save(f'e:\\file\\test{
i}.xlsx') # 保存新建的多個工作簿
workbook.close() # 關閉當前工作簿
app.quit() # 退出Excel程序

二、批量打開一個文件夾下的所有工作簿

1.批量打開一個文件夾下的所有工作簿

import os
import xlwings as xw
file_path = 'e:\\table' # 給出工作簿所在的文件夾路徑
file_list = os.listdir(file_path) # 列出路徑下所有文件和子文件夾的名稱
app = xw.App(visible = True, add_book = False) # 啟動Excel程序
for i in file_list:
if os.path.splitext(i)[1] == '.xlsx': # 判斷文件夾下文件的擴展名是否為“.xlsx”
app.books.open(file_path + '\\' + i) # 打開工作簿

2.列出文件夾下所有文件和子文件夾的名稱

import os
file_path = 'table'
file_list = os.listdir(file_path)
for i in file_list:
print(i)

在這裏插入圖片描述

三、批量重命名一個工作簿中所有工作錶

1.批量重命名一個工作簿中的所有工作錶

import xlwings as xw
app = xw.App(visible = False, add_book = False)
workbook = app.books.open('e:\\table\\統計錶.xlsx')
worksheets = workbook.sheets # 獲取工作簿中所有的工作錶
for i in range(len(worksheets)): # 遍曆獲取到的工作錶
worksheets[i].name = worksheets[i].name.replace('銷售', '') # 重命名工作錶
workbook.save('e:\\table\\統計錶1.xlsx') # 另存重命名工作錶後的工作簿
app.quit()

2.批量重命名一個工作簿中的部分工作錶

import xlwings as xw
app = xw.App(visible = False, add_book = False)
workbook = app.books.open('e:\\table\\統計錶.xlsx')
worksheets = workbook.sheets # 獲取工作簿中所有的工作錶
for i in range(len(worksheets))[:5]: # 通過切片來選中部分工作錶
worksheets[i].name = worksheets[i].name.replace('銷售', '') # 重命名工作錶
workbook.save('e:\\table\\統計錶1.xlsx') # 另存重命名工作錶後的工作簿
app.quit()

四、批量重命名工作簿

1.批量重命名多個工作簿

import os # 導入庫
file_path = 'e:\\table\\產品銷售錶' # 給出待重命名工作簿所在文件夾的路徑
file_list = os.listdir(file_path) # 列出文件夾下所有文件和子文件夾的名稱
old_book_name = '銷售錶' # 給出工作簿名中需要替換的舊關鍵字
new_book_name = '分部產品銷售錶' # 給出工作簿名中要替換的新關鍵字
for i in file_list:
if i.startswith('~$'): # 判斷是否有文件夾名以“~$”開頭的臨時文件
continue # 如果有,則跳過這種類型的文件
new_file = i.replace(old_book_name, new_book_name) # 執行查找和替換,生成新的工作簿名
old_file_path = os.path.join(file_path, i) # 構造需要重命名工作簿的完整路徑
new_file_path = os.path.join(file_path, new_file) # 構造重命名後工作簿的完整路徑
os.rename(old_file_path, new_file_path) # 執行重命名

2.批量重命名多個工作簿中的同名工作錶

import os
import xlwings as xw
file_path = 'e:\\table\\信息錶'
file_list = os.listdir(file_path)
old_sheet_name = 'Sheet1' # 給出需要修改的工作錶名
new_sheet_name = '員工信息' # 列出修改後的工作錶名
app = xw.App(visible = False, add_book = False)
for i in file_list:
if i.startswith('~$'):
continue
old_file_path = os.path.join(file_path, i)
workbook = app.books.open(old_file_path)
for j in workbook.sheets:
if j.name == old_sheet_name: # 判斷工作錶名是否為“sheet1”
j.name = new_sheet_name # 如果是,則重命名工作錶
workbook.save()
app.quit()

在這裏插入圖片描述

五、在多個工作簿中批量新增/删除工作錶

1.批量新增工作錶

import os
import xlwings as xw
file_path = 'e:\\table\\銷售錶'
file_list = os.listdir(file_path)
sheet_name = '產品銷售區域' # 給出新增的工作錶名稱
app = xw.App(visible = False, add_book = False)
for i in file_list:
if i.startswith('~$'):
continue
file_paths = os.path.join(file_path, i)
workbook = app.books.open(file_paths)
sheet_names = [j.name for j in workbook.sheets]
if sheet_name not in sheet_names:
workbook.sheets.add(sheet_name)
workbook.save()
app.quit()

2.批量删除工作錶

import os
import xlwings as xw
file_path = 'e:\\table\\銷售錶1'
file_list = os.listdir(file_path)
sheet_name = '產品銷售區域' # 給出要删除的工作錶名稱
app = xw.App(visible = False, add_book = False)
for i in file_list:
if i.startswith('~$'):
continue
file_paths = os.path.join(file_path, i)
workbook = app.books.open(file_paths)
for j in workbook.sheets:
if j.name == sheet_name:
j.delete()
break
workbook.save()
app.quit()

六、批量打印工作簿

1.批量打印工作簿

import os
import xlwings as xw
file_path = 'e:\\table\\公司'
file_list = os.listdir(file_path)
app = xw.App(visible = False, add_book = False)
for i in file_list:
if i.startswith('~$'):
continue
file_paths = os.path.join(file_path, i) # 獲取需要打印的工作簿的文件路徑
workbook = app.books.open(file_paths) # 打開要打印的工作簿
workbook.api.PrintOut() # 打印工作簿
app.quit()

2.批量打印多個工作簿中的指定工作錶

import os
import xlwings as xw
file_path = 'e:\\table\\公司1'
file_list = os.listdir(file_path)
sheet_name = '產品分類錶' # 給出要打印的工作錶的名稱
app = xw.App(visible = False, add_book = False)
for i in file_list:
if i.startswith('~$'):
continue
file_paths = os.path.join(file_path, i)
workbook = app.books.open(file_paths)
for j in workbook.sheets:
if j.name == sheet_name: # 判斷工作簿中是否存在名為“產品分類錶”的工作錶
j.api.PrintOut() # 如果存在,則打印該錶
break
app.quit() # 退出Excel程序

在這裏插入圖片描述

七、將一個工作簿的所有工作錶批量賦值到其他工作簿

1.將一個工作簿的所有工作錶批量賦值到其他工作簿

import os
import xlwings as xw
app = xw.App(visible = False, add_book = False)
file_path = 'e:\\table\\銷售錶'
file_list = os.listdir(file_path)
workbook = app.books.open('e:\\table\\信息錶.xlsx')
worksheet = workbook.sheets
for i in file_list:
if os.path.splitext(i)[1] == '.xlsx': # 判斷文件是否有工作簿
workbooks = app.books.open(file_path + '\\' + i) # 如果是工作簿則將其打開
for j in worksheet:
contents = j.range('A1').expand('table').value # 讀取來源工作簿中要賦值的工作錶數據
name = j.name # 獲取來源工作簿中的工作錶名稱
workbooks.sheets.add(name = name, after = len(workbooks.sheets)) # 在目標工作簿中新增同名工作錶
workbooks.sheets[name].range('A1').value = contents # 將從來源工作簿中讀取的工作錶數據寫入新增工作錶
workbooks.save() # 保存目標工作簿
app.quit()

2.將指定工作錶的數據批量複制到其他工作簿的指定工作錶中

import os
import xlwings as xw
app = xw.App(visible = False, add_book = False)
file_path = 'e:\\table\\銷售錶1'
file_list = os.listdir(file_path)
workbook = app.books.open('e:\\table\\新增產品錶.xlsx')
worksheet = workbook.sheets['新增產品'] # 選中工作錶“新增產品”
value = worksheet.range('A1').expand('table') # 讀取工作錶“新增產品”中的所有數據
start_cell = (2, 1) # 給出要複制數據的單元格區域的起始單元格
end_cell = (value.shape[0], value.shape[1]) # 給出要複制數據的單元格區域的結束單元格
cell_area = worksheet.range(start_cell, end_cell).value # 根據前面設定的單元格區域選取要複制的數據
for i in file_list:
if os.path.splitext(i)[1] == '.xlsx':
try:
workbooks = xw.Book(file_path + '\\' + i)
sheet = workbooks.sheets['產品分類錶'] # 選中要粘貼數據的工作錶“產品分類錶”
scope = sheet.range('A1').expand() # 選中要粘貼數據的單元格區域
sheet.range(scope.shape[0] + 1, 1).value = cell_area # 粘貼數據
workbooks.save() # 保存目標工作簿
finally:
workbooks.close() # 關閉目標工作簿
workbook.close() # 關閉來源工作簿
app.quit()

在這裏插入圖片描述

八、按條件將一個工作錶批量賦值到其他工作簿

1.將多個工作錶拆分為多個工作簿

import xlwings as xw
workbook_name = 'e:\\table\\產品銷售錶.xlsx' # 指定要拆分的來源工作簿
app = xw.App(visible = False, add_book = False)
header = None
all_data = []
workbook = app.books.open(workbook_name)
for i in workbook.sheets: # 遍曆來源工作簿中的工作錶
workbook_split = app.books.add() # 新建一個目標工作簿
sheet_split = workbook_split.sheets[0] # 選擇目標工作簿中的第一個工作錶
i.api.Copy(Before = sheet_split.api) # 將來源工作簿中的當前工作錶複制到目標工作簿的第一個工作錶之前
workbook_split.save('{}'.format(i.name)) # 以當前工作錶的名稱作為文件名保存目標工作簿
app.quit()

2.按條件將一個工作錶拆分為多個工作錶

import xlwings as xw
import pandas as pd
app = xw.App(visible = True, add_book = False)
workbook = app.books.open('e:\\table\\產品統計錶.xlsx')
worksheet = workbook.sheets['統計錶']
# 讀取要拆分的工作錶數據
value = worksheet.range('A1').options(pd.DataFrame, header = 1, index = False, expand = 'table').value
data = value.groupby('產品名稱') # 將數據按照“產品名稱”分組
for idx, group in data:
new_worksheet = workbook.sheets.add(idx) # 在工作簿中新增工作錶並命名為當前的產品名稱
new_worksheet['A1'].options(index = False).value = group # 將數據添加到新增的工作錶
workbook.save()
workbook.close()
app.quit()

3.按條件將一個工作錶拆分為多個工作簿

import xlwings as xw
file_path = 'e:\\table\\產品統計錶.xlsx'
sheet_name = '統計錶'
app = xw.App(visible = True, add_book = False)
workbook = app.books.open(file_path)
worksheet = workbook.sheets[sheet_name]
value = worksheet.range('A2').expand('table').value
data = dict()
for i in range(len(value)):
product_name = value[i][1]
if product_name not in data:
data[product_name] = []
data[product_name].append(value[i])
for key,value in data.items():
new_workbook = xw.books.add()
new_worksheet = new_workbook.sheets.add(key)
new_worksheet['A1'].value = worksheet['A1:H1'].value
new_worksheet['A2'].value = value
new_wrkbook.save('{}.xlsx'.format(key))
app.quit()

在這裏插入圖片描述

九、批量合並多個工作簿中的同名工作錶

1.批量合並多個工作簿中的同名工作錶

import os
import xlwings as xw
file_path = 'e:\\table\\銷售統計'
file_list = os.listdir(file_path)
sheet_name = '產品銷售統計'
app = xw.App(visible = False, add_book = False)
header = None
all_data = []
for i in file_list:
if i.startswith('~$'):
continue
file_paths = os.path.join(file_path, i)
workbook = app.books.open(file_paths)
for j in workbook.sheets:
if j.name == sheet_name:
if header == None:
header = j['A1:I1'].value
values = j['A2'].expand('table').value
all_data = all_data + values
new_workbook = xw.Book()
new_worksheet = new_workbook.sheets.add(sheet_name)
new_worksheet['A1'].value = header
new_worksheet['A2'].value = all_data
new_worksheet.autofit()
new_workbook.save('e:\\table\\上半年產品銷售統計錶.xlsx')
app.quit()

2.將工作簿中名稱有規律的工作錶合並到一個工作錶

import os
import xlwings as xw
workbook_name = 'e:\\table\\采購錶.xlsx'
sheet_names = [str(sheet)+'月' for sheet in range(1,7)]
new_sheet_name = '上半年統計錶'
app = xw.App(visible = False, add_book = False)
header = None
all_data = []
workbook = app.books.open(workbook_name)
for i in workbook.sheets:
if new_sheet_name in i.name:
i.delete()
new_worksheet = workbook.sheets.add(new_sheet_name)
title_copyed = False
for j in workbook.sheets:
if j.name in sheet_names:
if title_copyed == False:
j['A1'].api.EntireRow.Copy(Destination = new_worksheet["A1"].api)
title_copyed = True
row_num = new_worksheet['A1'].current_region.last_cell.row
j['A1'].current_region.offset(1, 0).api.Copy(Destination = new_worksheet["A{}".format(row_num + 1)].api)
new_worksheet.autofit()
workbook.save()
app.quit()

在這裏插入圖片描述

學Python只要你厲害可以把他發展成主業,感興趣的只要能學個基礎大概,在其他方面工作也能給你帶來幫助,甚至在生活其他方面也能帶來便利,Python現在能這麼火熱,不是被高估,肯定是有他火熱的原因,這些今天就不扯了,到這裏結束了

更多Python精彩內容可以關注我,遇到問題也可私信我+一整套學習資源分享可找我。

版权声明:本文为[yunyun雲芸]所创,转载请带上原文链接,感谢。 https://gsmany.com/2021/08/20210815213055018o.html