批量替换doc、xls、xlsx文件内容

docx类:

import os
from docx import Document
from openpyxl import load_workbook

def replace_string_in_docx(file_path, old_string, new_string):
    doc = Document(file_path)
    for paragraph in doc.paragraphs:
        if old_string in paragraph.text:
            paragraph.text = paragraph.text.replace(old_string, new_string)
    doc.save(file_path)

def replace_string_in_xlsx(file_path, old_string, new_string):
    wb = load_workbook(filename = file_path)
    for sheet in wb:
        for row in sheet.iter_rows():
            for cell in row:
                if cell.value and old_string in str(cell.value):
                    cell.value = cell.value.replace(old_string, new_string)
    wb.save(file_path)

def replace_string_in_files(dir_path, old_string, new_string):
    for root, dirs, files in os.walk(dir_path):
        for file in files:
            if file.endswith('.doc'):
                replace_string_in_docx(os.path.join(root, file), old_string, new_string)
            elif file.endswith('.xls'):
                replace_string_in_xlsx(os.path.join(root, file), old_string, new_string)

replace_string_in_files('C:\\Users\\dir',  'old', 'new')

doc

import os
import win32com.client
import datetime

def replace_string_in_doc(file_path, old_string, new_string):
    word = win32com.client.Dispatch("Word.Application")
    doc = word.Documents.Open(file_path)
    word.Visible = 0
    replacement_count = 0
    for i in range(len(doc.Paragraphs)):
        para = doc.Paragraphs[i]
        if old_string in para.Range.Text:
            replacement_count += para.Range.Text.count(old_string)
            para.Range.Text = para.Range.Text.replace(old_string, new_string)
    doc.Save()
    doc.Close()
    return replacement_count

def replace_string_in_xls(file_path, old_string, new_string):
    excel = win32com.client.Dispatch("Excel.Application")
    workbook = excel.Workbooks.Open(file_path)
    excel.Visible = 0
    replacement_count = 0
    for worksheet in workbook.Worksheets:
        for row in worksheet.UsedRange.Rows:
            for cell in row.Cells:
                if cell.Value:
                    if isinstance(cell.Value, datetime.datetime):
                        cell_value_str = cell.Value.strftime('%m/%d/%Y')
                        if old_string == cell_value_str:
                            replacement_count += 1
                            cell.Value = datetime.datetime.strptime(new_string, '%m/%d/%Y')
                    else:
                        cell_value_str = str(cell.Value)
                        if old_string in cell_value_str:
                            replacement_count += cell_value_str.count(old_string)
                            cell.Value = cell_value_str.replace(old_string, new_string)
    workbook.Save()
    workbook.Close()
    return replacement_count

def replace_string_in_files(dir_path, old_string, new_string):
    for root, dirs, files in os.walk(dir_path):
        for file in files:
            if file.endswith('.doc'):
                print(f"Processing {file}...")
                replacement_count = replace_string_in_doc(os.path.join(root, file), old_string, new_string)
                print(f"Replaced '{old_string}' with '{new_string}' {replacement_count} times in {file}")
            elif file.endswith('.xls'):
                print(f"Processing {file}...")
                replacement_count = replace_string_in_xls(os.path.join(root, file), old_string, new_string)
                print(f"Replaced '{old_string}' with '{new_string}' {replacement_count} times in {file}")

replace_string_in_files('C:\\Users\\dir',  'old', 'new')
posted @ 2024-07-04 14:37  夜歌乘年少  阅读(8)  评论(0编辑  收藏  举报