You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python的win32com保留Excel转CSV时的列格式(如0100)

解决Excel转CSV时前导零丢失的问题

问题根源

CSV格式仅保存单元格的实际值,而非Excel中的显示格式。如果Excel里的单元格是数值类型(比如显示为0100但实际值是100),保存为CSV后就会丢失前导零。要保留前导零,必须先将对应列的单元格设置为文本格式,并确保单元格的实际值是带前导零的字符串。

修改后的代码

以下代码会先将指定列转换为文本格式,重新写入带前导零的内容,再保存为CSV:

import win32com.client as client

path = "你的Excel文件路径.xlsx"
xl = client.Dispatch("Excel.Application")
xl.visible = False
xl.Interactive = False

wb = xl.Workbooks.Open(Filename=path, ReadOnly=1)
# 切换到目标工作表,可替换为具体表名,比如wb.Worksheets("Sheet1")
ws = wb.ActiveSheet

# 定义需要处理的列号(A列=1,B列=2,以此类推)
columns_to_process = [1, 3]
for col in columns_to_process:
    # 选中整列并设置为文本格式
    column = ws.Columns(col)
    column.NumberFormat = "@"
    
    # 遍历列中已使用的单元格,将数值转为指定位数的带前导零文本
    for cell in column.Cells:
        if cell.Value is not None and isinstance(cell.Value, int):
            # 这里按4位补零,可根据实际需求调整格式(比如"{:06d}"对应6位)
            cell.Value = "{:04d}".format(cell.Value)

# 保存为CSV,FileFormat=6是CSV格式的官方常量
wb.SaveAs(
    Filename="name.csv",
    FileFormat=6,
)
wb.Close(True)
xl.Quit()

关键注意事项

  • 必须确保单元格的实际值是带前导零的文本,仅靠Excel的自定义显示格式无法让CSV保留前导零。
  • 如果知道单元格的范围(比如A1:A100),可以缩小遍历范围提升效率,替换为ws.Range("A1:A100")。
  • FileFormat=6是CSV格式的正确数值标识,比字符串"6"更稳妥。

内容的提问来源于stack exchange,提问作者Amine Deflaoui

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 00:32:27