CSV 阻止 Excel 更改列值

CSV 阻止 Excel 更改列值

事情是这样的。我认为我们已经接近了 CSV 所能达到的极限,但我想知道是否有人有解决方案。

我们有一个 357MB 大小的 CSV 文件。下载很顺利,而且在连接良好的情况下不会花费太长时间。

但是大多数客户端都用 Excel 打开该文件。而且存在几个问题:

  • 字段00400将显示为40(删除前导零)
  • 值 0.04088100 将变为 4.08E-2(或类似的值)
  • 日期和时间发生改变

糟糕的修复:我们尝试=在前面添加一个字符"0040"- 它适用于小文件,但不适用于大文件 - Excel 无法将它们全部视为公式,占用的内存太多,文件永远无法打开

好的修复:我们添加了一个 ASCII 字符 28(aFile StopFS,参见http://www.theasciicode.com.ar/extended-ascii-code/uppercase-slashed-zero-empty-set-ascii-code-157.html)具有此“隐藏”值的所有字段均正确显示,除非它们是左对齐的(因为它们被视为文本)

唯一的问题:不幸的是,这个好的修复方法有一个问题。当您使用格式将字段右对齐,左侧为 CHR(28) 时,右侧会有一小段空格,您无法删除它,因为它会删除正确的字符。

可能的修复:我们进行了一些实验,发现在 Excel 滥用的字段值的左侧添加 CHR(157) 也可以停止它,并且右对齐。 然而,我感觉这样做很奇怪,不知道有什么弊端。

这似乎是一个晦涩的问题;我对此进行了大量搜索。有没有更好的方法?要求不允许将文件保存为 .xlxs 文件等。

答案1

冒着听起来像失败主义者的风险,我会研究一个替代解决方案。原因如下:

最可怕的问题是A value of 0.04088100 will become 4.08E-2Excel改变该值;如果保存文件,您将失去精度,并且最后几位数字将被设置为 0。我经常尝试匹配 Excel 无法匹配的 20 或 30 位长的数字。

此外,插入不可见字符只会在人们遇到它们时引起麻烦;如果有人不小心删除了不可见字符,他们将无法重新输入前导零,而且他们不知道原因。如果这些行被导入到某个地方,这也会成为一个问题;虽然您知道记事本和 Excel 会如何反应,但如果它们是另一个应用程序中的控制字符怎么办?

祝你好运。

相关内容