吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 263|回复: 3
收起左侧

[求助] python实现excel替换碰到日期格式替换成数字或者直接替换不了

[复制链接]
j2333234 发表于 2024-6-21 11:41
功能源代码如下,替换测试文字没有问题,但是会碰到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

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

goditorjoker 发表于 2024-6-21 21:03
意见仅供参考:
前言:我习惯使用pandas库处理关系型数据,这是一个利用openpyxl或xlrd等库读取文件的库。
1、python中有的库读取日期数据自动识别转换成时间类型数据,可能就不是字符串了,可以用type()检查一下。"xls文件日期转换成功,但会变成对应的数字"我不知道是什么意思;
2、我猜测你的方法类似于指针,实际上是在修改原文件.所以可能需要复制一份新文件,
个人建议:
换pandas库
dleo 发表于 2024-6-22 21:06
xlrd.sheet.Cell 有个判断类型的 cell_type(rowx, colx)

API Reference — xlrd 2.0.1 documentation
https://xlrd.readthedocs.io/en/latest/api.html?highlight=cell_type#xlrd.sheet.Cell

Type symbol        Type number        Python value
XL_CELL_EMPTY        0        empty string ''
XL_CELL_TEXT        1        a Unicode string
XL_CELL_NUMBER        2        float
XL_CELL_DATE        3        float
XL_CELL_BOOLEAN        4        int; 1 means TRUE, 0 means FALSE
XL_CELL_ERROR        5        int representing internal Excel codes; for a text representation, refer to the supplied dictionary error_text_from_code
XL_CELL_BLANK        6        empty string ''. Note: this type will appear only when open_workbook(..., formatting_info=True) is used.


当这个类型是3表示是日期类型的,可以用xlrd.xldate直接处理了

API Reference — xlrd 2.0.1 documentation
https://xlrd.readthedocs.io/en/latest/api.html?highlight=cell_type#module-xlrd.xldate





 楼主| j2333234 发表于 2024-6-23 09:52
goditorjoker 发表于 2024-6-21 21:03
意见仅供参考:
前言:我习惯使用pandas库处理关系型数据,这是一个利用openpyxl或xlrd等库读取文件的库。 ...

好的,感谢,我试试
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 15:23

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表