将带有多行文本的推文导出为CSV

34 浏览
0 Comments

将带有多行文本的推文导出为CSV

我需要生成一个Excel文件,其中一些值包含多行。

其中还包含非英文文本,因此文件必须是Unicode。

我现在生成的文件看起来像这样:(使用UTF8编码,混合了非英文文本,并且有很多行)

Header1,Header2,Header3
Value1,Value2,"Value3 Line1
Value3 Line2"

请注意,多行值用双引号括起来,其中包含普通的每行末尾换行符。

根据我在网上找到的信息,这应该可以工作,但是它不行,至少在Excel 2007和UTF8文件中,Excel将第三行视为数据的第二行,而不是第一个数据行的第二行。

这必须在我的客户机器上运行,我无法控制他们的Excel版本,因此我需要一个可以在Excel 2000及更高版本上工作的解决方案。

谢谢

编辑:我通过拥有两个CSV选项(一个用于Excel(Unicode、制表符分隔、字段中没有换行符),另一个用于世界其他地方(UTF8、标准CSV))“解决”了我的问题。

虽然不是我想要的,但至少它可以工作(到目前为止)

admin 更改状态以发布 2023年5月21日
0
0 Comments

经过多次调整,这里有一个可以在Linux上生成文件,在Windows上使用Excel读取的配置,尽管嵌入的换行格式不符合标准

  • 字段内部的换行符需要使用\n(并且很明显需要在双引号中引用)
  • 记录结束:\r\n
  • 确保你不要以等于号开头的字段,否则它会被当作公式处理并截断

在Perl中,我使用Text::CSV来完成这个过程,代码如下:

use Text::CSV;
open my $FO, ">:encoding(utf8)", $filename or die "Cannot create $filename: $!";
my $csv = Text::CSV->new({ binary => 1, eol => "\r\n" });
#for each row...:
$csv -> print ($FO, \@row);

0
0 Comments

只有在空格字符是数据的一部分时,才应在字段开头添加空格字符。Excel不会去除前导空格。你会在标题和数据字段中得到不需要的空格。更糟的是,应该“保护”第三列换行符的"将被忽略,因为它不在字段的开头。

如果文件中有非ASCII字符(编码为UTF-8),则应在文件开头加入UTF-8 BOM(3个字节,hex EF BB BF)。否则,Excel将根据您所在地区的默认编码(例如cp1252)解释数据,而不是UTF-8,导致您的非ASCII字符被破坏。

以下注释适用于Excel 2003、2007和2013;未在Excel 2000上测试过

如果您在Windows Explorer中双击文件名打开文件,则一切正常。

如果您在Excel中打开它,则结果各不相同:

  1. 文件中只有ASCII字符(没有BOM):可以工作。
  2. 文件中有非ASCII字符(编码为UTF-8),并在开头有一个UTF-8 BOM:它识别数据是以UTF-8编码的,但它忽略了csv扩展名,并将您丢入了不是向导的文本导入,不幸的是,结果是您会遇到换行符的问题。

选项包括:

  1. 训练用户不从Excel中打开文件:-(
  2. 考虑直接编写XLS文件...在Python/Perl/PHP/.NET等中有可用的库和包。
0