使用 xlwings 防止 Excel 中的日期转换

问题描述 投票:0回答:1

问题如标题所述。我有一列

AX
充满了值。该列的名称是“备注”,它将包含备注,但其中一些备注是日期,有些是完整的注释,例如“A 人欠 B 人 X 金额。”

我现在面临的问题是,在xlwings中,只是像“1/8/24”这样的日期的列被转换为日期数据类型。我不希望这种转变发生。我希望它保持字面上的“1/8/24”并保持为“Text”的数据类型。

完整的工作流程如下:

  1. 从Excel读取数据(我没有写权限)
  2. 创建新的 Excel 工作簿
  3. 将处理后的数据放入新的Excel工作簿中

所以我尝试在两个地方修复它

  1. 读取数据后,我使用
    str(cell.value)
    以及其他选项将 AX 列的值全部转换为字符串,但没有一个起作用。
  2. 在保存新的 Excel 工作簿之前。

选项 1 中没有任何效果,我认为它与 Excel 处理日期的方式有关。所以,我现在试图阻止转换,只是让“1/8/24”字面出现,但没有任何效果。我检查了文档并尝试

Range.options
来阻止转换,但没有多大帮助。当我用“1/8/24”检查单元格时,它显示为一个
datetime.datetime
对象。无论如何,用
str
转换它只会将其变回日期。所以,我想我必须找到一种方法在将其写入工作簿后进行转换。

我搞乱了 Excel 中的数据类型,我发现如果我使用这个

The Text to Columns button in Data tab

在所有内容上单击“下一步”

Final page of the wizard that appears

然后在最后一个屏幕中选择“文本”,日期就会出现。因此,这导致我尝试一个新选项,即将整个列的数据类型转换为“文本”。所以我尝试了这样的东西

sheet.range("AX1").expand("down").api.NumberFormat = "@"
。但生成的工作簿仍然没有按字面显示“1/8/24”。相反,它显示一些数字,如 45299。令人惊讶的是,当我将该单元格转换为“长日期”时,它变成了日期“2024 年 8 月 1 日”。这就是我停止工作的地方,因为我没有想法并且不知道如何继续。非常感谢任何指导,谢谢。

python excel xlwings
1个回答
0
投票

日期,或者看起来像字符串的日期,总是很痛苦。我认为在您的情况下处理它的最简单方法是在每个单元格中插入 ' 作为第一个字符,以强制 Excel 将其视为字符串,例如 .range(f'A{i}').value = f"'{value}"(未测试,假设有问题的数据列位于 A 列中)。

© www.soinside.com 2019 - 2024. All rights reserved.