我需要为Excel生成一个文件,该文件中的一些值包含多行
里面还有非英语文本,所以文件必须是Unicode
我现在生成的文件如下所示:(在UTF8中,混合了非英语文本,并且有很多行)
头1、头2、头3
值1,值2,“值3第1行
值3第2行“
请注意,多行值用双引号括起来,其中包含一个普通的每日换行符
根据我在网上发现的,这应该是有效的,但它没有,至少没有赢得Excel2007和UTF8文件,Excel将第三行视为第二行数据,而不是第一行数据的第二行
这必须在我客户的机器上运行,我无法控制他们的Excel版本,因此我需要一个可以与Excel 2000及更高版本一起使用的解决方案
谢谢
编辑:我通过两个CSV选项“解决”了我的问题,一个用于Excel(Unicode,制表符分隔,字段中没有换行符),另一个用于世界其他地方(UTF8,标准CSV)
不是我想要的,但至少它能工作(到目前为止)
仅当空格字符是数据的一部分时,字段的开头才应有空格字符。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中打开,结果会有所不同:
- 文件中只有ASCII字符(没有BOM):有效
- 文件中有非ASCII字符(以UTF-8编码),开头有一个UTF-8 BOM:它识别数据以UTF-8编码,但忽略csv扩展名并将您放入文本导入非a向导,不幸的是,结果导致换行问题
选择包括:
- 培训用户不要从Excel中打开文件:-(
- 考虑直接编写XLS文件……在Python/Perl/PHP/.NET/etc中有一些包/库可用于编写XLS文件