【问题标题】:CSV field with less than max cell limit of excel is getting truncated小于 excel 最大单元格限制的 CSV 字段被截断
【发布时间】:2018-06-14 09:39:51
【问题描述】:

我们正在尝试通过 C# 代码将数据导出到 CSV 文件。根据site,某些字段真的很长,超过了 Excel 单元格可以支持的最大字符限制 (32,767)。所以我们所做的是截断任何超过限制的数据。但是,当我们尝试在 excel 中打开 CSV 文件时,它会在下面放置一些字符,即使单元格内的文本长度没有达到限制。我有attached 一个示例 CSV 文件。请下载并在excel中打开。enter link description here。 csv 字段的字符数限制为 32,766,包括开始和结束双引号。

【问题讨论】:

  • 您在单元格中写入的值是否正确,或者那个值已经偏离了几个字符...?您是否能够手动向该单元格添加字符?只是为了清楚地了解问题似乎出在哪里...如果您顺便发布一些代码会有所帮助:)
  • Excel 听起来像是存储这个错误的地方。
  • 该单元格上的值只是用于演示怪异行为的测试数据。是的,我可以使用 C# 向 CSV 文件中添加字符。我担心的是,即使字符长度低于最大限制,Excel 似乎也无法正确解释它。
  • 检查存储在单元格中的最大字符数是否恒定。如果是这样,请调整您的代码以截断已验证的最大字符数。
  • @BugFinder 我知道。但是客户端需要用到excel功能(排序、过滤等)

标签: c# excel csv export-to-csv


【解决方案1】:

在导入 CSV 文件时,Excel 似乎每个单元格有 32,758 个字符的限制,尽管 the documentation 说限制是 32,767 个字符。换句话说,一个单元格中有 32,759 个或更多字符会在导入 CSV 时出现问题。

为此目的,转义的双引号 ("") 仅计为单个字符。

围绕单元格内容的两个双引号(如果需要)不计入限制。

Unix 样式换行符 (\n) 计为一个字符,而 Windows 样式换行符 (\r\n) 计为两个字符。请注意,即使您在代码中指定了 Unix 样式换行符 (\n),某些函数/语言可能会自动将它们转换为 Windows 样式换行符 (\r\n),这可能会导致您的一些其他有效单元格超出限制。以下是几种不同语言的避免该问题的方法:

  • C#: 使用\n 而不是Environment.NewLine
  • C++ (fopen):使用mode 参数中的b 标志以二进制模式打开文件:fopen("filename", "wb")
  • C++ (ofstream):打开文件写入时使用二进制模式:std::ofstream outfile("filename", std::ios_base::binary | std::ios_base::out)
  • Java:使用\n 而不是System.lineSeparator()
  • Python (io.open):在调用 io.open 时使用 newline='\n'

【讨论】:

    猜你喜欢
    • 2010-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-29
    • 2014-08-01
    相关资源
    最近更新 更多