将Unicode .csv(逗号分隔)文件导出到Excel 2003或Excel 2007会导致所有列都以Excel中的第一列结尾

在代码(ASP / JavaScript)或Excel中,我们可以做什么,以便逗号分隔值最终在Excel中的单独列中?

一旦导入,您可以转到“工具” – >“文本到列…”菜单并指定一个分隔符。

正如Chei指出的,本地化或Excel(List分隔符)选项的更改可能会导致错误的行为。

我build议你使用Open XML来获得更安全的输出。

检出在ASP.NET中生成Excel文件

我只是尝试使用制表符字段分隔符而不是逗号,它在Excel 2007中工作

(至less我觉得是2007年,在愚蠢的色带中找不到Help / About)

如果通过Excel的“文件 – >打开”菜单打开文件,则会将单元格中的值分开。

Excel的不同本地化可能会使用不同的字符来分隔列。 尝试使用“;” 而不是“,”看看是否有帮助。

你知道CSV文件是否有一个字节顺序标记头? 也许它没有物料清单,或者它不是正确的物料清单。

您可以尝试将文件另存为.txt,而不是.csv,这会强制Excel将文本行parsing为列

如果您使用“,”Excel 2007将读取它,但不是2003年。而如果您使用“;”,反其道而行之。

所以,最好的方法是生成一个html表格并将其输出为.xls。 Excel 2007将询问它是否来自可信来源。

下面是如何做到这一点的代码示例:

private void ExportToXLSFromDataTable(DataTable dtExport, string filename) { StringBuilder dataToExport = new StringBuilder(); dataToExport.Append("<table>"); dataToExport.Append("<tr>"); foreach (DataColumn dCol in dtExport.Columns) { dataToExport.Append("<td>"); dataToExport.Append(Server.HtmlEncode(dCol.ColumnName)); dataToExport.Append("</td>"); } dataToExport.Append("</tr>"); foreach (DataRow dRow in dtExport.Rows) { dataToExport.Append("<tr>"); foreach (object obj in dRow.ItemArray) { dataToExport.Append("<td>"); dataToExport.Append(Server.HtmlEncode(obj.ToString())); dataToExport.Append("</td>"); } dataToExport.Append("</tr>"); } dataToExport.Append("</table>"); if (!string.IsNullOrEmpty(dataToExport.ToString())) { Response.Clear(); HttpContext.Current.Response.ContentType = "application/ms-excel"; HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment;filename=" + filename); HttpContext.Current.Response.Write(dataToExport.ToString()); HttpContext.Current.Response.End(); } } 

Excel似乎被UTF-16 / UTF-8字节顺序标记弄糊涂了,所以试着摆脱它们。

对于CSV,单元格的内容可以是unicode字符,但分隔符,引号和换行符总是必须是ASCII。 您可以将CSV视为始终为ASCII,但将每个单元格视为一个二进制块,可能是一些unicode文本。

另外,请看: http : //www.creativyst.com/Doc/Articles/CSV/CSV01.htm了解更多信息。