我们可以在代码(ASP/JavaScript)或 Excel 中做些什么,以便逗号分隔的值在 Excel 中的单独列中结束?
9 回答
导入后,您可以转到“工具”->“文本到列...”菜单并指定分隔符。
我只是尝试使用制表符而不是逗号作为字段分隔符,它在 Excel 2007 中工作
(至少我认为是 2007 年,在愚蠢的功能区中找不到帮助/关于)
你知道 CSV 文件是否有字节顺序标记头吗?也许它没有 BOM,或者它不是区域设置的正确 BOM。
Excel 似乎对 UTF-16/UTF-8 字节顺序标记感到困惑,因此请尝试摆脱它们。
对于 CSV,单元格的内容可以是 unicode 字符,但分隔符、引号和换行符始终必须是 ASCII。您可以将 CSV 视为始终是 ASCII,但每个单元格都是二进制的 blob,并且可能是一些 unicode 文本。
此外,请查看:http ://www.creativyst.com/Doc/Articles/CSV/CSV01.htm了解更多信息。
如果您使用“,” 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 的“文件 --> 打开”菜单打开文件,那么它将分隔单元格中的值。
Excel 的不同本地化可能使用不同的字符来分隔列。尝试使用“;” 而不是“,”,看看它是否有帮助。
您可以尝试将文件另存为 .txt,而不是 .csv,这会强制 Excel 将文本行解析为列