我正在使用Asp.net创建一个用户可以直接在excel中打开的csv文件。我希望能够显示下载弹出窗口,并让用户选择“使用Excel打开”,这将打开excel中的文件。
创建csv的代码:
Response.Clear();
Response.AddHeader("content-disposition", string.Format("attachment; filename={0}.csv", "test"));
Response.ContentType = "text/csv";
Response.Write("Year, Make, Model, Length\n1997, Ford, E350, 2.34\n2000, Mercury, Cougar, 2.38");
Response.End();
Excel需要了解“Year”,“Make”等应该都是不同的列。这似乎与我正在创建的csv无关,一切都在同一列中。它显示如下:
http://oi54.tinypic.com/2evyb0k.jpg
使用excel的唯一方法是使用“文本导入向导”。然后,所有内容都会显示在不同的列中。
正如我所说的,我需要的是创建一个电子表格(它不需要是csv),用户可以很容易地在excel中打开或者用它来开始使用它。你怎么解决这个问题?谢谢!
答案 0 :(得分:1)
不确定为什么它不起作用 - 它对我有用,但至少尝试引用数据:
Response.Write("\"Year\", \"Make\", \"Model\", \"Length\"\n\"1997\", \"Ford\", \"E350\", \"2.34\"\n\"2000\", \"Mercury\", \"Cougar\", \"2.38\"");
Excel也可以导入XML,谷歌“<?mso-application progid =”Excel.Sheet“?>”对于格式。或者只是将Excel电子表格另存为XML以查看示例。 Excel XML文件可以命名为“.xls”,它可以直接打开它们。
最后,您可以使用.NET中的NPOI来处理原生格式的Excel电子表格:http://npoi.codeplex.com/
对于XML,您还可以使用我编写的包装类,将其封装在一个简单的C#对象模型中:http://snipt.org/lLok/
这是使用该类的一些伪代码:
XlsWorkbook book = new XlsWorkbook();
XlsWorksheet ws = new XlsWorksheet();
ws.Name = "Sheet Name";
XlsRow row;
XlsCell cell;
foreach (datarow in datasource) {
row = new XlsRow();
foreach (datavalue in datarow) {
cell = new XlsCell(datavalue.ToString());
cell.DataType = datavalue is numeric ? DataTypes.Numeric | DataTypes.String;
row.Cells.Add(cell);
}
ws.Rows.Add(row);
}
wkb.Worksheets.Add(ws);
Response.Write(wkb.XmlOutput());
或者只是创建自己的方法,这是基础知识。
以这种方式创建标题:
System.Text.StringBuilder sb = new System.Text.StringBuilder();
sb.Append("<?xml version=\"1.0\"?>\n");
sb.Append("<?mso-application progid=\"Excel.Sheet\"?>\n");
sb.Append(
"<Workbook xmlns=\"urn:schemas-microsoft-com:office:spreadsheet\" ");
sb.Append("xmlns:o=\"urn:schemas-microsoft-com:office:office\" ");
sb.Append("xmlns:x=\"urn:schemas-microsoft-com:office:excel\" ");
sb.Append("xmlns:ss=\"urn:schemas-microsoft-com:office:spreadsheet\" ");
sb.Append("xmlns:html=\"http://www.w3.org/TR/REC-html40\">\n");
sb.Append(
"<DocumentProperties xmlns=\"urn:schemas-microsoft-com:office:office\">");
sb.Append("</DocumentProperties>");
sb.Append(
"<ExcelWorkbook xmlns=\"urn:schemas-microsoft-com:office:excel\">\n");
sb.Append("<ProtectStructure>False</ProtectStructure>\n");
sb.Append("<ProtectWindows>False</ProtectWindows>\n");
sb.Append("</ExcelWorkbook>\n");
从那里,通过使用以下基本结构创建节点来添加到输出字符串:
<Worksheet ss:Name="SheetName">
<Table>
<Row>
<Cell>
<Data ss:Type="DataType">Cell A1 Contents Go Here</Data>
</Cell>
</Row>
</Table>
</Worksheet>
在<Row>
中,每个<Cell>
元素都会创建一个新列。为每个电子表格行添加新的<Row>
。 DataType
的{{1}}可以是“字符串”或“数字”。