ClosedXML - 设置单元格的数据类型不起作用

ClosedXML - Setting data type for cell does not work

我对 ClosedXML 有类似的问题,像这样 但有点不同。 SetDataType 方法不起作用。 例如,我有价值 string dps = "3.12.02" 这不是日期也不是数字,它是有效文本。

当我这样做时: ws.Cell(1, 1).Value = dps; ws.Cell(1, 1).SetDataType(XLCellValues.Text);

并保存文件,然后在 Excel 中打开它,它仍然会把它转换成像 37593 这样的垃圾 我试着把它放在设置值前后,没有变化。

有人可以帮我吗?

虽然我不能告诉您为什么它不起作用,但一种简单的方法是在您的字符串前加上撇号 (')。这会强制 Excel 将后面的所有内容都视为文本。

string dps = "'3.12.02";
ws.Cell(1, 1).Value = dps;

.Value 方法尝试猜测您正在设置的值的类型。在您的情况下,该值是有效的(即可解析的)DateTime,在内部存储为数字。

要明确设置一个值,而不是猜测,请使用:

string dps = "3.12.02";
ws.Cell(1, 1).SetValue(dps);

我知道您正在尝试设置文本值,但我发现 LibreOffice 创建的 Excel 文件似乎以某种方式扰乱了 ClosedXMLs 将列设置为 DateTime 数据类型的能力。

// What I tried without success.
cell.Clear(XLClearOptions.All);
cell.SetValue<DateTime>((DateTime)cellValue);
cell.SetDataType(XLDataType.DateTime);

在 Excel 中重新创建电子表格之前,我所做的一切都无法解决问题。

// This worked just fine on a proper Excel file
cell.SetValue((DateTime)cellValue);

当我用 LibreOffice 打开并保存电子表格后,正确设置列类型的功能就消失了。