功能源代码如下,替换测试文字没有问题,但是会碰到2个问题,1.xlsx文件,日期转换不成功,xls文件日期转换成功,但会变成对应的数字。2.替换完成后,原表格格式没了。
[Python] 纯文本查看 复制代码 def replace_content_in_excel(file, original_text, new_text, callback=None):
try:
original_text = str(original_text)
logging.info(f"尝试处理 Excel 文件: {file}")
if file.endswith('.xlsx'):
# 使用 openpyxl 处理 xlsx 文件
workbook = openpyxl.load_workbook(file)
for sheet in workbook:
for row in sheet.iter_rows():
for cell in row:
if cell.value is not None and original_text in str(cell.value):
if isinstance(cell.value, str): # 如果单元格值是字符串
cell.value = cell.value.replace(original_text, new_text)
elif isinstance(cell.value, (int, float)): # 如果单元格值是数值(可能是日期的序列号)
# 这里需要根据实际情况进行日期格式的处理
pass # 根据需要进行日期格式处理
else:
pass # 其他类型的数据,根据需要进行处理
workbook.save(file)
elif file.endswith('.xls'):
# 使用 xlrd 打开 xls 文件
logging.info(f"使用 xlrd 打开 Excel 文件: {file}")
workbook_rd = xlrd.open_workbook(file, formatting_info=True)
# 使用 xlwt 创建新的工作簿对象
workbook_wr = xlwt.Workbook()
for sheet_index in range(workbook_rd.nsheets):
worksheet_rd = workbook_rd.sheet_by_index(sheet_index)
worksheet_wr = workbook_wr.add_sheet(workbook_rd.sheet_names()[sheet_index], cell_overwrite_ok=True)
for row in range(worksheet_rd.nrows):
for col in range(worksheet_rd.ncols):
cell_value = worksheet_rd.cell_value(row, col)
if isinstance(cell_value, str) and original_text in cell_value:
new_cell_value = cell_value.replace(original_text, new_text)
worksheet_wr.write(row, col, new_cell_value)
else:
worksheet_wr.write(row, col, cell_value)
# 保存新文件并覆盖原文件
workbook_wr.save(file)
if callback:
callback()
logging.info(f"成功处理 Excel 文件: {file}")
return True
except Exception as e:
logging.error(f"处理 Excel 文件 {file} 时出错: {e}")
return False |