Nir*_*Nir 146 csv excel newline
我需要为Excel生成一个文件,该文件中的一些值包含多行.
那里还有非英文文本,所以文件必须是Unicode.
我现在生成的文件如下所示:(在UTF8中,非英文文本混合在一起并且有很多行)
Header1,Header2,Header3
Value1,Value2,"Value3 Line1
Value3 Line2"
Run Code Online (Sandbox Code Playgroud)
请注意,多行值用双引号括起来,其中包含正常的日常换行符.
根据我在网上发现的这应该有效,但它没有,至少没有赢得Excel 2007和UTF8文件,Excel将第3行视为第二行数据而不是第一行数据的第二行.
这必须在我客户的机器上运行,我无法控制他们的Excel版本,所以我需要一个适用于Excel 2000及更高版本的解决方案.
谢谢
编辑:我通过两个CSV选项"解决"了我的问题,一个用于Excel(Unicode,制表符分隔,字段中没有换行符),另一个用于世界其他地方(UTF8,标准CSV).
不是我想要的,但至少它是有效的(到目前为止)
Joh*_*hin 65
您应该在字段的开头只有空格字符,空格字符是数据的一部分.Excel不会剥离前导空格.您将在标题和数据字段中获得不需要的空格.更糟糕的是",应该"保护"第三列中的换行符将被忽略,因为它不在字段的开头.
如果文件中包含非ASCII字符(以UTF-8编码),则文件开头应该有UTF-8 BOM(3个字节hex EF BB BF).否则Excel将根据您的语言环境的默认编码(例如cp1252)而不是utf-8来解释数据,并且您的非ASCII字符将被删除.
以下评论适用于Excel 2003,2007和2013; 没有在Excel 2000上测试过
如果通过在Windows资源管理器中双击其名称来打开文件,则一切正常.
如果从Excel中打开它,结果会有所不同:
选项包括:
小智 23
经过大量调整后,这里的配置可以在Linux上生成文件,在Windows + Excel上读取
在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);
Run Code Online (Sandbox Code Playgroud)
dtl*_*rek 20
最近我有类似的问题,我通过导入HTML文件解决了它,基线示例如下:
<html xmlns:v="urn:schemas-microsoft-com:vml"
xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:x="urn:schemas-microsoft-com:office:excel"
xmlns="http://www.w3.org/TR/REC-html40">
<head>
<style>
<!--
br {mso-data-placement:same-cell;}
-->
</style>
</head>
<body>
<table>
<tr>
<td>first line<br/>second line</td>
<td style="white-space:normal">first line<br/>second line</td>
</tr>
</table>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
我知道,它不是CSV,并且对于各种版本的Excel可能有不同的工作方式,但我认为值得一试.
我希望这有帮助 ;-)
小智 8
值得注意的是,当.CSV文件的字段用双引号括起来包含换行符时,如果.CSV文件以UTF-8格式写入,Excel将无法正确导入.CSV文件.Excel将换行视为CR/LF并开始换行.电子表格是乱码.即使将冒号用作字段分隔符(而不是逗号),这似乎也是正确的.
通过使用Windows记事本编辑.CSV文件,使用"文件">"另存为..."保存文件,在保存文件之前,将文件编码从UTF-8更改为ANSI,可以解决此问题.一旦文件以ANSI格式保存,我发现在Windows 7 Professional上运行的Microsoft Excel 2013将正确导入文件.
在 Excel 365 中导入文件时:
-> 选择文件 > 转换数据:
在 Power Query 编辑器的右侧“查询设置”处,在“应用步骤”下的“源”行上,单击“设置图标”
-> 在换行符下拉列表中选择忽略引号内的换行符。
然后按 OK -> File -> Close & Load
小智 6
如果您使用分号作为分隔符而不是逗号或制表符,并使用引号,则值内的换行似乎有效.
这在Excel 2010和Excel 2000中都适用.但是,令人惊讶的是,它仅在您将文件作为新电子表格打开时才有效,而不是在使用数据导入功能将其导入现有电子表格时.
| 归档时间: |
|
| 查看次数: |
318299 次 |
| 最近记录: |