【问题标题】:Preserve leading zero in csv file using javascript使用javascript在csv文件中保留前导零
【发布时间】:2012-11-28 19:40:54
【问题描述】:

我正在使用以下代码下载 csv。

<a download="somedata.csv"  id='x'>Download CSV</a>
<script>
       var csv = '01'; //prints 1 in the cell, truncating leading zero
       var csv = "'"+01+"'"; //prints '01' in the cell, with single quote
       var csv = '"\""01"\""'; //prints "01" in the cell, with double quotes
       var a = document.getElementById('x');
       a.href='data:text/csv;base64,' + btoa(csv);
</script>

我需要在 csv 文件中打印带有前导零的数字。到目前为止,我找到的解决方案是通过用单引号或双引号将数字包装成文本。但这并不能解决问题,因为它也在单元格中打印引号。

有没有办法保留前导零并在单元格中打印不带引号的数字?有什么建议吗?

编辑:我忘了在原始帖子中提到我必须在 Excel 中打开 csv。

var csv = "'01";   //prints '01 in the cell
var csv = '="01"'; //prints  01 in the cell, but the value is ="01"

有没有办法获取单元格值并同时显示为 01(而不是不同的显示和值)?

【问题讨论】:

  • 请说明您确定去除前导零的方式。如果我是对的,这个关键因素就是问题的原因,但您没有将其包含在问题描述中!

标签: javascript csv formatting export-to-csv


【解决方案1】:

我知道这是一个老问题,但我最近遇到了这个问题并通过在末尾添加零宽度空格字符来解决它:

var csv = '01' + String.fromCharCode(8203);

我希望它能帮助遇到这个问题的其他人。

【讨论】:

  • 不幸的是,此代码在 Excel 365 中显示时添加了此字符:​
【解决方案2】:

您的代码确实有效:

<a download="somedata.csv"  id='x'>Download CSV</a>
<script>
       var csv = '01';
       var a = document.getElementById('x');
       a.href='data:text/csv;base64,' + btoa(csv);
</script>

如果您在文本编辑器中打开此文件,则会出现前导零。

如果您专门针对 Microsoft Excel,您可以添加前导单引号以保留前导零 - 尽管您仍然需要输入每个单元格并按 Enter 以使其生效!:

<a download="somedata.csv"  id='x'>Download CSV</a>
<script>
       var csv = "'01";
       var a = document.getElementById('x');
       a.href='data:text/csv;base64,' + btoa(csv);
</script>

更复杂 - 但有效(再次仅适用于 Excel)

<a download="somedata.csv"  id='x'>Download CSV</a>
<script>
       var csv = '="01"';
       var a = document.getElementById('x');
       a.href='data:text/csv;base64,' + btoa(csv);
</script>

【讨论】:

  • 具体来说,这会强制 Excel 将“单元格”内容视为文本,而不是将其格式化为数字。虽然正如你所说,这使得文件不可移植。
  • 是的 - 我能想到的唯一解决方法是在 Excel 和其他任何地方都可以使用一行标题,然后是一行都是字符串的虚拟数据,然后是来自的真实数据第 3 行。Excel 在确定数据类型时会向前看几行,因此带有字符串的数据将强制格式化程序不选择数字类型。
  • 到目前为止,我认为不需要任何“修复”。 Excel 显示的值是正确的。前导零没有语义意义。不幸的是,OP 没有解释他或她为什么关心。
  • 我在一家养老金公司工作,该公司的账户是从它收购的公司迁移而来的。在那种情况下,0094569094569 之间的区别非常重要。
  • 必须解释的数据应该在 CSV 文件中引用;如果 Excel 不能正确解析,那就太傻了。
【解决方案3】:
<a download="somedata.csv"  id='x'>Download CSV</a>
<script>
       var csv = '01';
       var a = document.getElementById('x');
       a.href='data:text/csv;base64,' + btoa(csv);
</script>

这很好用。

我想您正在 Excel 中查看 CSV,它会根据其突发奇想和单元格默认设置重新格式化数字。但是,如果您在记事本中查看 CSV,您会发现前导 0 仍然存在于实际文件中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-05
    • 2020-06-11
    • 2019-10-25
    • 1970-01-01
    相关资源
    最近更新 更多