芜湖尾敢投资有限公司

office文件格式批量轉(zhuǎn)換工具(個(gè)人利用AI開發(fā))——墨澀網(wǎng)

前面搭建AI大模型知識庫的時(shí)候,本都好多doc格式的文件,但是知識庫不支持doc格式,支持新的docx格式,量少的情況下可以通過打開文件另存的方式手動(dòng)轉(zhuǎn)換,但是文件較多的時(shí)候,就必須使用工具批量轉(zhuǎn)換了,我想應(yīng)該這樣的工具在網(wǎng)上有很多,但是結(jié)構(gòu)搜完以后沒幾個(gè),而且下載要么收費(fèi),要么需要破解,于是自己借助Ai,使用Python 開發(fā)了一個(gè)批量轉(zhuǎn)換office文件格式的小工具,并把它打包做成了exe文件,方便使用。實(shí)現(xiàn)了doc轉(zhuǎn) docx(包括wps格式),xls 轉(zhuǎn) xlsx,ppt 轉(zhuǎn)pptx。

開發(fā)環(huán)境

- 編程語言:Python 3.x
- 依賴庫:pywin32 (win32com)
- 操作系統(tǒng):Windows 7/10/11
- 支持辦公軟件:WPS Office或Microsoft Office

運(yùn)行截圖

核心功能

1. **批量格式轉(zhuǎn)換**
? ?- 支持.doc/.wps → .docx
? ?- 支持.xls → .xlsx
? ?- 支持.ppt → .pptx
2. **遞歸目錄處理**
? ?- 自動(dòng)遍歷指定目錄及其所有子目錄
? ?- 跳過已為新格式的文件(.docx/.xlsx/.pptx)
3. **實(shí)時(shí)進(jìn)度反饋**
? ?- 顯示每個(gè)文件的轉(zhuǎn)換狀態(tài)
? ?- 提供詳細(xì)的錯(cuò)誤信息提示
4. **智能統(tǒng)計(jì)報(bào)表**
? ?- 分類統(tǒng)計(jì)成功/失敗數(shù)量
? ?- 輸出格式轉(zhuǎn)換匯總報(bào)告

?解決的問題

1. **辦公文檔現(xiàn)代化**
? ?- 自動(dòng)將舊版辦公文檔轉(zhuǎn)換為新版OpenXML格式
? ?- 提升文件兼容性和安全性
2. **批處理效率優(yōu)化**
? ?- 避免人工逐個(gè)轉(zhuǎn)換的低效操作
? ?- 支持無人值守批量處理
3. **錯(cuò)誤追蹤機(jī)制**
? ?- 記錄轉(zhuǎn)換失敗的具體原因
? ?- 顯示錯(cuò)誤代碼和異常信息
4. **系統(tǒng)資源管理**
? ?- 自動(dòng)關(guān)閉Office進(jìn)程釋放資源
? ?- 內(nèi)置操作間隔防止進(jìn)程沖突

使用說明

1. 將腳本放置于需要轉(zhuǎn)換的目錄
2. 雙擊運(yùn)行腳本自動(dòng)處理
3. 查看終端輸出的轉(zhuǎn)換報(bào)告
4. 按回車鍵退出程序

?技術(shù)特點(diǎn)

- 采用COM組件實(shí)現(xiàn)格式轉(zhuǎn)換
- 異常處理保障程序穩(wěn)定性
- 支持WPS和MS Office雙平臺
- 詳細(xì)的日志輸出和統(tǒng)計(jì)功能

下載地址:

exe文件:https://wwou.lanzoue.com/i4Nf12qsjdla

python源碼:https://wwou.lanzoue.com/iLDm82qsjdyd

源碼展示

import os
import time
from win32com import client as wc

def convert_doc_to_docx(file_path):
    """將doc/wps轉(zhuǎn)換為docx"""
    try:
        word = wc.Dispatch("kwps.Application")
        doc = word.Documents.Open(file_path)
        new_path = os.path.splitext(file_path)[0] + ".docx"
        doc.SaveAs(new_path, 16)
        doc.Close()
        word.Quit()
        print(f"已轉(zhuǎn)換:{os.path.basename(file_path)} → {os.path.basename(new_path)}")
        return True
    except Exception as e:
        print(f"轉(zhuǎn)換失?。╠oc): {os.path.basename(file_path)} - {str(e)}")
        return False
    finally:
        time.sleep(0.5)

def convert_xls_to_xlsx(file_path):
    """將xls轉(zhuǎn)換為xlsx"""
    try:
        excel = wc.Dispatch("ket.Application")
        wb = excel.Workbooks.Open(file_path)
        new_path = os.path.splitext(file_path)[0] + ".xlsx"
        wb.SaveAs(new_path, 51)
        wb.Close()
        excel.Quit()
        print(f"已轉(zhuǎn)換:{os.path.basename(file_path)} → {os.path.basename(new_path)}")
        return True
    except Exception as e:
        print(f"轉(zhuǎn)換失?。▁ls): {os.path.basename(file_path)} - {str(e)}")
        return False
    finally:
        time.sleep(0.5)

def convert_ppt_to_pptx(file_path):
    """將ppt轉(zhuǎn)換為pptx"""
    try:
        ppt = wc.Dispatch("kwpp.Application")
        presentation = ppt.Presentations.Open(file_path)
        new_path = os.path.splitext(file_path)[0] + ".pptx"
        presentation.SaveAs(new_path, 26)
        presentation.Close()
        ppt.Quit()
        print(f"已轉(zhuǎn)換:{os.path.basename(file_path)} → {os.path.basename(new_path)}")
        return True
    except Exception as e:
        print(f"轉(zhuǎn)換失?。╬pt)[{file_path}]:{str(e)},錯(cuò)誤代碼:{e.args[0]}")
        return False
    finally:
        time.sleep(0.5)

def batch_convert(root_folder):
    """遍歷目錄及子目錄"""
    stats = {
        'doc': {'success': 0, 'fail': 0},
        'xls': {'success': 0, 'fail': 0},
        'ppt': {'success': 0, 'fail': 0}
    }
    
    for foldername, subfolders, filenames in os.walk(root_folder):
        for filename in filenames:
            file_path = os.path.join(foldername, filename)
            ext = os.path.splitext(filename)[1].lower()
            
            result = None
            key = None
            
            if ext in ['.docx', '.xlsx', '.pptx']:
                continue

            if ext in ['.doc', '.wps']:
                result = convert_doc_to_docx(file_path)
                key = 'doc'
            elif ext == '.xls':
                result = convert_xls_to_xlsx(file_path)
                key = 'xls'
            elif ext == '.ppt':
                result = convert_ppt_to_pptx(file_path)
                key = 'ppt'
            
            if key is not None and result is not None:
                if result:
                    stats[key]['success'] += 1
                else:
                    stats[key]['fail'] += 1
                print(f'DEBUG: {filename} 類型={key} 結(jié)果={result}')
    
    return stats

if __name__ == "__main__":
    current_dir = os.getcwd()
    print(f"開始轉(zhuǎn)換當(dāng)前目錄及子目錄:{current_dir}")
    stats = batch_convert(current_dir)
    
    print("\n轉(zhuǎn)換統(tǒng)計(jì)報(bào)告:")
    total_success = 0
    total_fail = 0
    
    for file_type in ['doc', 'xls', 'ppt']:
        success = stats[file_type]['success']
        fail = stats[file_type]['fail']
        total_success += success
        total_fail += fail
        print(f"{file_type.upper()}文件:成功 {success} 個(gè),失敗 {fail} 個(gè)")
    
    print(f"\n總計(jì):成功 {total_success} 個(gè),失敗 {total_fail} 個(gè)")
    input("按回車鍵退出...")
    print("轉(zhuǎn)換完成!")

 

THE END