Python&Excel辦公自動化

来源:https://www.cnblogs.com/lxhui/archive/2023/06/07/17463953.html
-Advertisement-
Play Games

操作工作簿 01 新建一個excel工作簿 #2023-4-17 import xlwings as xw # 啟動 excel,但不新建工作簿 app是什麼,app是excel程式本身 app = xw.App(visible=True,add_book=True) #新建一個工作簿 workbo ...


操作工作簿

01 新建一個excel工作簿

#2023-4-17
import xlwings as xw
# 啟動 excel,但不新建工作簿  app是什麼,app是excel程式本身
app = xw.App(visible=True,add_book=True)

#新建一個工作簿
workbook=app.books.add()

# 保存新建的工作簿
workbook.save('D:\python_data/test.xlsx')
workbook.close()

#關閉excel軟體
app.quit()

02 批量新建多個工作簿

#2023-4-17
import xlwings as xw
# 啟動 excel,但不新建工作簿  app是什麼,app是excel程式本身
app = xw.App(visible=False,add_book=False)  #後臺運行

for i in range(1,13): #左閉右開
    workbook=app.books.add()
    workbook.save(f'D:\\python_data\\excelbook\\{i}月報表.xlsx')
    workbook.close()


#關閉excel軟體
app.quit()

03 打開已有的工作簿

import xlwings as xw
app = xw.App(visible=True,add_book=False)
app.books.open(f'D:\\python_data\\發票信息.xlsx')

04 打開文件夾下的所有工作簿

import xlwings as xw
from pathlib import Path
#打開excel軟體
app=xwapp = xw.App(visible=True,add_book=False)
#需要一個excel文件的list
folder_path=Path('C:\\Users\\hank-02\\Desktop\\新建文件夾 (2)')  #這裡用了相對路徑,相對路徑要雙斜線\\
excel_file_list=folder_path.glob('*.xls*')  #  判斷文件夾下文件的擴展名是否為xls,或者xlsx

for file in excel_file_list:
    app.books.open(file)

05 重命名多個工作簿

from pathlib import Path

#第一步獲取符合條件的文件列表
file_path=Path('D:\\python_data\\excelbook')  #待重命名工作簿所在的文件夾
file_list=file_path.glob('*月.xlsx') #查找文件夾下所有與 月結尾的工作簿匹配的文件

#遍歷上述列表,迴圈重命名文件

for old_file in file_list:
    old_file_name=old_file.name  #獲取當前文件名
    new_file_name=old_file_name.replace('','月報表') #通過替換字元串方法生成新的文件名
    new_file=old_file.with_name(new_file_name) #通過with_name 生成一個新的文件對象
    old_file.rename(new_file) #通過rename方法重命名文件
06 批量修改工作簿格式
#批量轉換工作簿的格式,將所有的xlsx格式文件,另存為xls格式的文件
from pathlib import Path

import xlwings as xw
app = xw.App(visible=False,add_book=False)

folder_path=Path('D:\\python_data\\excelbook') #  給出工作簿所在的文件夾路徑

file_list=folder_path.glob('*.xlsx')   #查找文件夾下所有xlsx的工作簿文件


for file in file_list:
    
    if '$' in file.name:   #如果文件包含臨時文件,則跳過 
        continue;
        
    print('開始轉換:'+file.name)
    new_file_path=str(file.with_suffix('.xls'))
    workbook=app.books.open(file)
    workbook.api.SaveAs(new_file_path,FileFormat=56)
    workbook.close()
    print('完成轉換:'+ new_file_path)

#關閉excel軟體
app.quit()
07 拆分一個工作簿變成多個新工作簿
#拆分一個工作簿變成多個新工作簿
from pathlib import Path

import xlwings as xw
app = xw.App(visible=False,add_book=False)

source_workbook=app.books.open('D:\\python_data\\excelbook\\拆分工作簿.xlsx')#打開需要拆分的工作簿

source_worksheets=source_workbook.sheets #獲取拆分工作簿裡面是所有sheet


for worksheet in source_worksheets:
    #1 新建一個目標工作簿workbook
    new_workbook=app.books.add()
    #2 創建第一個sheet,  選擇目標工作簿中的第一表
    new_worksheet=new_workbook.sheets[0]
    #3 複製sheet內容到新sheet中
    worksheet.copy(before=new_worksheet)
    #4 保存並關閉
    new_workbook.save(f'D:\\python_data\\excelbook\\拆分後的\\{worksheet.name}.xlsx')
    new_workbook.close()

    
source_workbook.close()

#關閉excel軟體
app.quit()
08 將多個工作簿合併為一個工作簿
from pathlib import Path
import pandas as pd

file_list =Path('C:\\Users\\hank-02\\Desktop\\測試數據').glob('*.xlsx')
frozen_file_list=[]
for i in file_list:
    frozen_file_list.append(i)

with pd.ExcelWriter('C:\\Users\\hank-02\\Desktop\\測試數據\\總表.xlsx') as workbook:
    for file in frozen_file_list:
        #讀取單個文件,只讀了數據本身,沒有把格式一併讀出來file.stem
        data=pd.read_excel(file,sheet_name=0)
        data.to_excel(workbook,sheet_name=file.stem,index=False)
09 按照擴展名分類工作簿
from pathlib import Path
folder_path=Path('C:\\Users\\hank-02\\Desktop\\測試數據')  #數據源
file_list=folder_path.glob('*.xls*')
#1、遍歷文件列表
for i in file_list:
    suffix_name=i.suffix
    new_folder_path=Path('C:\\Users\\hank-02\\Desktop\\測試數據\\'+suffix_name.replace('.',''))#測試數據後面要加個\\,代表是在這個文件夾下進行分類
#2、判斷當前文件擴展名,查看擴展名目錄是否存在,不存在的話就創建一個新的目錄
    if not new_folder_path.exists():
        new_folder_path.mkdir()
    
#3、移動文件
    i.replace(new_folder_path/i.name)
10 按照日期分類工作簿
from pathlib import Path
from time import localtime

folder_path=Path('C:\\Users\\hank-02\\Desktop\\測試數據')
file_list=folder_path.glob('*.xls*')

#1、遍歷文件列表
for i in file_list:
    #2、根據文件最好修改日期的年份和月份,組成目錄
    lm_date=i.stat().st_mtime
    year=localtime(lm_date).tm_year
    month=localtime(lm_date).tm_mon
    new_folder_path=folder_path/str(year)/str(month)
    if not new_folder_path.exists():
        new_folder_path.mkdir(parents=True)
    i.replace(new_folder_path/i.name)

11 精確查找工作簿

from pathlib import Path
folder_path_str = input('請輸入查找的路徑:')
file_name_str= input('請輸入要查找的工作簿名稱:')
folder_path = Path(folder_path_str)
file_list = folder_path.rglob(file_name_str) # rglob 用於指定文件夾及其子文件夾中查找名稱符合指定規則的文件或文件
for i in file_list:
    print(i)

12 按關鍵字查找工作簿

from pathlib import Path
folder_path_str = input('請輸入查找的路徑:')
key_word= input('請輸入關鍵字:')
folder_path = Path(folder_path_str)
file_list = folder_path.rglob(f'*{key_word}*.xls*')  #rglob 用於指定文件夾及其子文件夾中查找名稱符合指定規則的文件或文件
for i in file_list:
    print(i)

13 保護一個工作簿的結構

import xlwings as xw
app=xw.App(visible=False,add_book=False)
workbook=app.books.open('C:\\Users\\hank-02\\Desktop\\工作\\交接文檔\\南山固定資產.xlsx')

workbook.api.Protect(Password='123',Structure=True,Windows=False)
workbook.save()
workbook.close()
app.quit()

14 加密保護一個工作簿

import xlwings as xw
app=xw.App(visible=False,add_book=False)
workbook=app.books.open('C:\\Users\\hank-02\\Desktop\\工作\\交接文檔\\南山固定資產.xlsx')

workbook.api.Password='123'
workbook.save()
workbook.close()
app.quit()
15 加密保護多個工作簿
from pathlib import Path
import xlwings as xw
app=xw.App(visible=False,add_book=False)
folder_path=Path('C:\\Users\\hank-02\\Desktop\\測試數據\\2023\\5')
file_list=folder_path.glob('*.xls*')

for i in file_list:
    workbook=app.books.open(i)
    workbook.api.Password='123'
    workbook.save()
    workbook.close()

app.quit()

操作工作表

16 提取一個工作簿中所有工作表的名稱

#提取一個工作簿中所有工作表的名稱(方法一:)
import xlwings as xw
app=xw.App(visible=False,add_book=False)
workbook=app.books.open('C:\\Users\\hank-02\\Desktop\\2023-3-31南山固定資產(重要).xlsx')
worksheets=workbook.sheets
sheet_name_list=[]
for i in worksheets:
    sheet_name_list.append(i.name)

workbook.close()
app.quit()
print(sheet_name_list)



#提取一個工作簿中所有工作表的名稱(方法二:)
import pandas as pd

file_path='C:\\Users\\hank-02\\Desktop\\2023-3-31南山固定資產(重要).xlsx'

data=pd.read_excel(file_path,sheet_name=None)

#print(type(data))#data是字典類型

worksheet_name=list(data.keys())
print(worksheet_name)

17 在一個工作薄中新增一個工作表

#在一個工作薄中新增一個工作表
import xlwings as xw
app=xw.App(visible=False,add_book=False)
workbook=app.books.open('C:\\Users\\hank-02\\Desktop\\2023-3-31南山固定資產(重要).xlsx')
worksheets=workbook.sheets
new_sheet_name='測試'

sheet_name_list=[]
for i in worksheets:
    sheet_name_list.append(i.name)
if new_sheet_name not in sheet_name_list:
    worksheets.add(name=new_sheet_name)

workbook.save()
workbook.close()
app.quit()

18 在一個工作簿中刪除一個工作表

#在一個工作簿中刪除一個工作表
import xlwings as xw
app=xw.App(visible=False,add_book=False)
workbook=app.books.open('C:\\Users\\hank-02\\Desktop\\2023-3-31南山固定資產(重要).xlsx')
worksheets=workbook.sheets
del_sheet_name='測試'

for i in worksheets:
    if i.name==del_sheet_name:
        i.delete()
        break

workbook.save()
workbook.close()
app.quit()

19 在多個工作簿中批量新增工作表

#在多個工作簿中批量新增工作表
import xlwings as xw
from pathlib import Path

#1、獲取文件列表

file_list=Path('C:\\Users\\hank-02\\Desktop\\新建文件夾2').glob('*.xls*')

new_sheet_name='測試表'

app=xw.App(visible=False,add_book=False)

for file in file_list:
    workbook=app.books.open(file)
    worksheets=workbook.sheets
    sheet_name_list=[]
    for i in worksheets:
        sheet_name_list.append(i.name)
    if new_sheet_name not in sheet_name_list:
        worksheets.add(name=new_sheet_name)

    workbook.save()
    workbook.close()
    
app.quit()
 20 在多個工作簿中批量刪除工作表
#在多個工作簿中批量刪除工作表
import xlwings as xw
from pathlib import Path

#1、獲取文件列表

file_list=Path('C:\\Users\\hank-02\\Desktop\\新建文件夾2').glob('*.xls*')

del_sheet_name='測試表'

app=xw.App(visible=False,add_book=False)

for file in file_list:
    workbook=app.books.open(file)
    worksheets=workbook.sheets
    
    for i in worksheets:
        if i.name==del_sheet_name:
            i.delete()
            break

    workbook.save()
    workbook.close()
    
app.quit()

行/列操作


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • **# Properties類** - **基本介紹** ![](https://img2023.cnblogs.com/blog/3008601/202306/3008601-20230604103622859-1793594469.png) 1. 專門用於讀寫配置文件的集合類 配置文件的格式: ...
  • ## SpringMVC如何接受請求參數(普通類型參數/對象類型參數/數組/json數據等) 1、普通類型參數 (1)在可以在方法參數上使用@RequestParam註解來綁定請求參數,此註解允許指定請求參數的名稱,以及是否是必須傳的參數。 ~~~java @RequestMapping("/exa ...
  • # 安裝 略 # hello world > 1. 文檔地址: [https://marketplace.visualstudio.com/items?itemName=humao.rest-client](https://marketplace.visualstudio.com/items?ite ...
  • 在數據結構中,我們已經學習到了簡單的靜態鏈表以及單鏈表和雙鏈表,它們各有優缺點,但是有個共同的問題是他們呢無法存儲不同的數據。下麵提供了一種方法,可以將不同節點的數據鏈接起來。 下麵的代碼都是基礎的C語言代碼,涉及到的知識點基本覆蓋到C語言學習的所有知識面,尤其是使用了巨集,減少了重覆的代碼。 無論是 ...
  • # 引入 在使用SpringBoot開發時,最常用的註解有@Component、@Service、@Controller、@Configuration等。當類使用這些註解標記時,類會被Spring IOC容器管理,包括創建,填充屬性和實例化。 但是Spring容器如何發現並將這些類放到容器進行管理呢 ...
  • ​ GDAL(Geospatial Data Abstraction Library)是一個在X/MIT許可協議下的開源柵格空間數據轉換庫。它利用抽象數據模型來表達所支持的各種文件格式。它還有一系列命令行工具來進行數據轉換和處理。 Python的GDAL庫作為柵格數據的處理轉換庫,其支持幾百種柵格數 ...
  • ## 前言 在C語言中,巨集定義是一種預處理指令,用於在代碼中定義和使用常量、函數或代碼片段的替代。 巨集定義使用`#define`關鍵字來定義,併在代碼中進行替換。巨集定義具有以下優點: 1. **簡化代碼**:巨集定義可以將一些常用的、重覆出現的代碼片段簡化為一個巨集名稱,提高代碼的可讀性和簡潔性。 2. ...
  • # 列印流 PrintStream 和 PrintWriter ![](https://img2023.cnblogs.com/blog/3008601/202306/3008601-20230604103522664-997405676.png) ![](https://img2023.cnblo ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...