首页 > 解决方案 > 强制 csv 使用十进制格式

问题描述

我正在使用CSVLink从我的反应应用程序下载数据。其中一列包含一个 16 位数字,因此当我下载文件时,输出格式将更改为类似8.1543E+15的内容。

const text = [
{ a1: "1111111111111111", a2: "0658" },
{ a1: "2222222222222222", a2: "0658" },
{ a1: "3333333333333333", a2: "0658" },
{ a1: "4444444444444444", a2: "10658" }]

 <CSVLink
       filename={props.name + ".csv"}
       target="_blank"
       data={text}
       headers={[{ label: "a1", key: "a1" }, { label: "a2", key: "a2" }]}>
       {props.name}
  </CSVLink>

如果我用记事本打开文件,那么我可以看到完整的数字,但通过 Excel 我会看到8.1543E+15 & 658

如何强制执行小数格式,以便用户下载文件时,他将看到完整的数字而无需手动更改小数位。

谢谢你 。

标签: reactjsexcelcsvdecimal-point

解决方案


csv 格式没有规定包含列的格式信息 - 因此您不能强制执行十进制格式。

您唯一可以做的就是强制电子表格程序将数字视为“字符串”。

  • 如果您在电子表格应用程序中将数字“8154300000000000”视为字符串,则需要将其写为“8154300000000000”

  • " 字符是 csv 中的分隔符 - 这意味着您需要转义 " 字符。csv中的转义字符是“。这意味着您需要输出双引号(“”)来转义单引号(“)。现在您的输出字符串将是 =""8154300000000000""

  • 最后,您的 React 程序还需要转义 " 字符。javascript 的转义字符是 \ - 但为简单起见,您可以将字符串括在单引号 (') 中

您可以在此处查看工作示例。

https://codesandbox.io/s/react-cvs-large-integer-ff32p?file=/src/App.js

  const text = [
    { a1: '=""8154300000000000""', a2: "0658" },
    { a1: "2222222222222222", a2: "0658" },
    { a1: "3333333333333333", a2: "0658" },
    { a1: "4444444444444444", a2: "10658" }
  ];

  return (
    <CSVLink
      filename="largeNumber.csv"
      target="_blank"
      data={text}
      headers={[
        { label: "a1", key: "a1" },
        { label: "a2", key: "a2" }
      ]}
    >
      Download Me
    </CSVLink>
  );

推荐阅读