强制使用 csv 的十进制格式

enforce the decimal format for csv

我正在使用 CSVLink 从我的 React 应用下载数据。其中一列包含 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

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

谢谢 .

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

您唯一可以做的就是强制电子表格程序将数字视为 'string'。

  • 如果您有数字“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>
  );