您好,登錄后才能下訂單哦!
這篇文章主要介紹Python自動(dòng)化之批量處理工作簿和工作表的示例分析,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!
import xlwings as xw # 導(dǎo)入庫(kù) # 啟動(dòng)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') # 保存新建的多個(gè)工作簿 workbook.close() # 關(guān)閉當(dāng)前工作簿 app.quit() # 退出Excel程序
1.批量打開一個(gè)文件夾下的所有工作簿
import os import xlwings as xw file_path = 'e:\\table' # 給出工作簿所在的文件夾路徑 file_list = os.listdir(file_path) # 列出路徑下所有文件和子文件夾的名稱 app = xw.App(visible = True, add_book = False) # 啟動(dòng)Excel程序 for i in file_list: if os.path.splitext(i)[1] == '.xlsx': # 判斷文件夾下文件的擴(kuò)展名是否為“.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.批量重命名一個(gè)工作簿中的所有工作表
import xlwings as xw app = xw.App(visible = False, add_book = False) workbook = app.books.open('e:\\table\\統(tǒng)計(jì)表.xlsx') worksheets = workbook.sheets # 獲取工作簿中所有的工作表 for i in range(len(worksheets)): # 遍歷獲取到的工作表 worksheets[i].name = worksheets[i].name.replace('銷售', '') # 重命名工作表 workbook.save('e:\\table\\統(tǒng)計(jì)表1.xlsx') # 另存重命名工作表后的工作簿 app.quit()
2.批量重命名一個(gè)工作簿中的部分工作表
import xlwings as xw app = xw.App(visible = False, add_book = False) workbook = app.books.open('e:\\table\\統(tǒng)計(jì)表.xlsx') worksheets = workbook.sheets # 獲取工作簿中所有的工作表 for i in range(len(worksheets))[:5]: # 通過切片來(lái)選中部分工作表 worksheets[i].name = worksheets[i].name.replace('銷售', '') # 重命名工作表 workbook.save('e:\\table\\統(tǒng)計(jì)表1.xlsx') # 另存重命名工作表后的工作簿 app.quit()
1.批量重命名多個(gè)工作簿
import os # 導(dǎo)入庫(kù) file_path = 'e:\\table\\產(chǎn)品銷售表' # 給出待重命名工作簿所在文件夾的路徑 file_list = os.listdir(file_path) # 列出文件夾下所有文件和子文件夾的名稱 old_book_name = '銷售表' # 給出工作簿名中需要替換的舊關(guān)鍵字 new_book_name = '分部產(chǎn)品銷售表' # 給出工作簿名中要替換的新關(guān)鍵字 for i in file_list: if i.startswith('~$'): # 判斷是否有文件夾名以“~$”開頭的臨時(shí)文件 continue # 如果有,則跳過這種類型的文件 new_file = i.replace(old_book_name, new_book_name) # 執(zhí)行查找和替換,生成新的工作簿名 old_file_path = os.path.join(file_path, i) # 構(gòu)造需要重命名工作簿的完整路徑 new_file_path = os.path.join(file_path, new_file) # 構(gòu)造重命名后工作簿的完整路徑 os.rename(old_file_path, new_file_path) # 執(zhí)行重命名
2.批量重命名多個(gè)工作簿中的同名工作表
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 = '產(chǎn)品銷售區(qū)域' # 給出新增的工作表名稱 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 = '產(chǎn)品銷售區(qū)域' # 給出要?jiǎng)h除的工作表名稱 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.批量打印多個(gè)工作簿中的指定工作表
import os import xlwings as xw file_path = 'e:\\table\\公司1' file_list = os.listdir(file_path) sheet_name = '產(chǎn)品分類表' # 給出要打印的工作表的名稱 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: # 判斷工作簿中是否存在名為“產(chǎn)品分類表”的工作表 j.api.PrintOut() # 如果存在,則打印該表 break app.quit() # 退出Excel程序
1.將一個(gè)工作簿的所有工作表批量賦值到其他工作簿
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 # 讀取來(lái)源工作簿中要賦值的工作表數(shù)據(jù) name = j.name # 獲取來(lái)源工作簿中的工作表名稱 workbooks.sheets.add(name = name, after = len(workbooks.sheets)) # 在目標(biāo)工作簿中新增同名工作表 workbooks.sheets[name].range('A1').value = contents # 將從來(lái)源工作簿中讀取的工作表數(shù)據(jù)寫入新增工作表 workbooks.save() # 保存目標(biāo)工作簿 app.quit()
2.將指定工作表的數(shù)據(jù)批量復(fù)制到其他工作簿的指定工作表中
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\\新增產(chǎn)品表.xlsx') worksheet = workbook.sheets['新增產(chǎn)品'] # 選中工作表“新增產(chǎn)品” value = worksheet.range('A1').expand('table') # 讀取工作表“新增產(chǎn)品”中的所有數(shù)據(jù) start_cell = (2, 1) # 給出要復(fù)制數(shù)據(jù)的單元格區(qū)域的起始單元格 end_cell = (value.shape[0], value.shape[1]) # 給出要復(fù)制數(shù)據(jù)的單元格區(qū)域的結(jié)束單元格 cell_area = worksheet.range(start_cell, end_cell).value # 根據(jù)前面設(shè)定的單元格區(qū)域選取要復(fù)制的數(shù)據(jù) for i in file_list: if os.path.splitext(i)[1] == '.xlsx': try: workbooks = xw.Book(file_path + '\\' + i) sheet = workbooks.sheets['產(chǎn)品分類表'] # 選中要粘貼數(shù)據(jù)的工作表“產(chǎn)品分類表” scope = sheet.range('A1').expand() # 選中要粘貼數(shù)據(jù)的單元格區(qū)域 sheet.range(scope.shape[0] + 1, 1).value = cell_area # 粘貼數(shù)據(jù) workbooks.save() # 保存目標(biāo)工作簿 finally: workbooks.close() # 關(guān)閉目標(biāo)工作簿 workbook.close() # 關(guān)閉來(lái)源工作簿 app.quit()
1.將多個(gè)工作表拆分為多個(gè)工作簿
import xlwings as xw workbook_name = 'e:\\table\\產(chǎn)品銷售表.xlsx' # 指定要拆分的來(lái)源工作簿 app = xw.App(visible = False, add_book = False) header = None all_data = [] workbook = app.books.open(workbook_name) for i in workbook.sheets: # 遍歷來(lái)源工作簿中的工作表 workbook_split = app.books.add() # 新建一個(gè)目標(biāo)工作簿 sheet_split = workbook_split.sheets[0] # 選擇目標(biāo)工作簿中的第一個(gè)工作表 i.api.Copy(Before = sheet_split.api) # 將來(lái)源工作簿中的當(dāng)前工作表復(fù)制到目標(biāo)工作簿的第一個(gè)工作表之前 workbook_split.save('{}'.format(i.name)) # 以當(dāng)前工作表的名稱作為文件名保存目標(biāo)工作簿 app.quit()
2.按條件將一個(gè)工作表拆分為多個(gè)工作表
import xlwings as xw import pandas as pd app = xw.App(visible = True, add_book = False) workbook = app.books.open('e:\\table\\產(chǎn)品統(tǒng)計(jì)表.xlsx') worksheet = workbook.sheets['統(tǒng)計(jì)表'] # 讀取要拆分的工作表數(shù)據(jù) value = worksheet.range('A1').options(pd.DataFrame, header = 1, index = False, expand = 'table').value data = value.groupby('產(chǎn)品名稱') # 將數(shù)據(jù)按照“產(chǎn)品名稱”分組 for idx, group in data: new_worksheet = workbook.sheets.add(idx) # 在工作簿中新增工作表并命名為當(dāng)前的產(chǎn)品名稱 new_worksheet['A1'].options(index = False).value = group # 將數(shù)據(jù)添加到新增的工作表 workbook.save() workbook.close() app.quit()
3.按條件將一個(gè)工作表拆分為多個(gè)工作簿
import xlwings as xw file_path = 'e:\\table\\產(chǎn)品統(tǒng)計(jì)表.xlsx' sheet_name = '統(tǒng)計(jì)表' 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_workbook.save('{}.xlsx'.format(key)) app.quit()
1.批量合并多個(gè)工作簿中的同名工作表
import os import xlwings as xw file_path = 'e:\\table\\銷售統(tǒng)計(jì)' file_list = os.listdir(file_path) sheet_name = '產(chǎn)品銷售統(tǒng)計(jì)' 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\\上半年產(chǎn)品銷售統(tǒng)計(jì)表.xlsx') app.quit()
2.將工作簿中名稱有規(guī)律的工作表合并到一個(gè)工作表
import os import xlwings as xw workbook_name = 'e:\\table\\采購(gòu)表.xlsx' sheet_names = [str(sheet)+'月' for sheet in range(1,7)] new_sheet_name = '上半年統(tǒng)計(jì)表' 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自動(dòng)化之批量處理工作簿和工作表的示例分析”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。