javascript - JS 在 Excel 中 # 后构建 CSV 中断

标签 javascript excel csv special-characters

我正在通过 JavaScript 构建 CSV,一些单元格值包含主题标签和其他特殊字符。我特别注意到主题标签充当文件的硬停止。我一直无法在网上找到解决方案,也没有真正看到这个具体问题。我试过 \uFEFF修复,但无济于事。下面是我用来构建 CSV 的函数。

export const buildCSV = (headers, data) => {
  if (!headers && !data) return;

  let csvContent = "data:text/csv;charset=UTF-8,";

  if (headers) {
    csvContent += headers.join(",") + "\r\n";
  }

  if (data) {
    data.forEach(row => {
      csvContent += row.join(",") + "\r\n";
    });
  }

  return encodeURI(csvContent);
};
作为引用,目前,一个值如 150 # content将显示为 150其余行在打开 CSV 时被 chop 。
提前感谢任何花时间提供答案的人!

最佳答案

我设法通过进行此切换来解决问题:

  const encodedURI = encodeURI(csvContent);
  const fixedEncodedURI = encodedURI.replaceAll('#', '%23');
  return fixedEncodedURI;
在运行 encodeURI 之前执行切换会导致结果为“%23”,而不是正确地将其转换回主题标签。根据 MDN (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURI#Description),encodeURI函数不会转义主题标签(在其他字符中,但我没有注意到其他字符有问题)。手动对其进行编码后,一旦下载并在 Excel 中打开,它们就会转换回主题标签。
TKoL 创建了一个 fiddle ,展示了 encodeURIComponent 的使用。产生所需的输出。需要注意的是,当我在尝试使用此功能时遇到问题时,必须对初始代码进行以下更改,否则将导致下载失败:
let csvContent = "";

other code...

return "data:text/csv;charset=utf-8," + encodeURIComponent(csvContent);
感谢所有提供潜在解决方案的人!

关于javascript - JS 在 Excel 中 # 后构建 CSV 中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63924635/

相关文章:

javascript - Angularjs(1.3.6+) $resource 拦截器和全局 401 处理程序

javascript - 从网页中的脚本创建的表中导入 Excel 中的数据

Excel 和本地文件的超链接

javascript - 使用哪个 - 递归查询或特定正则表达式

Javascript 不会触发 not if nor else

javascript - 将解码后的用户保存在数据库中

excel - Excel中的VBA范围可以操作吗?

ruby - 没有 "its" block 的 RSpec 3 验收测试方法

c# - 验证 CSV 文件

javascript - 在 node.js 中,我正在发出 POST 请求,在收到 POST 请求的响应之前,函数正在向端点发送空格