使用javascript保留csv文件中的前导零

时间:2012-12-11 09:20:38

标签: javascript csv formatting export-to-csv

我正在使用以下代码下载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(而不是显示和值不同)?

3 个答案:

答案 0 :(得分: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>

这样可以正常使用。

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

答案 1 :(得分:0)

您的代码确实有效:

<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>

答案 2 :(得分:0)

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

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

我希望它会帮助遇到此问题的其他人。