使用asp.net创建csv并在excel中打开
我正在使用Asp.net创建一个用户可以直接在excel中打开的csv文件。我希望能够显示下载弹出窗口,用户可以选择“用Excel打开”,这将在Excel中打开文件 创建csv的代码:使用asp.net创建csv并在excel中打开,asp.net,excel,csv,spreadsheet,Asp.net,Excel,Csv,Spreadsheet,我正在使用Asp.net创建一个用户可以直接在excel中打开的csv文件。我希望能够显示下载弹出窗口,用户可以选择“用Excel打开”,这将在Excel中打开文件 创建csv的代码: Response.Clear(); Response.AddHeader("content-disposition", string.Format("attachment; filename={0}.csv", "test")); Response.ContentType = "text/csv"; Respon
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需要了解“年份”、“制造”等都应该是不同的列。这似乎不适用于我正在创建的csv,所有内容都在同一列中。它显示如下:
使用excel的唯一方法是使用“文本导入向导”。然后,所有内容都会显示在不同的列中
正如我所说的,我需要的是创建一个电子表格(它不需要是csv),它应该很容易让用户在excel或任何他们用来开始使用它的东西中打开。你将如何解决这个问题?谢谢 我不知道为什么它不能这样工作-对我来说是这样,但至少试着引用数据:
Response.Write("\"Year\", \"Make\", \"Model\", \"Length\"\n\"1997\", \"Ford\", \"E350\", \"2.34\"\n\"2000\", \"Mercury\", \"Cougar\", \"2.38\"");
Excel还可以导入XML,以google“”为格式。或者将excel电子表格另存为XML以查看示例。Excel XML文件可以命名为“.xls”,它可以直接打开它们
最后,您可以使用.NET中的NPOI以本机格式操作excel电子表格:
对于XML,您还可以使用我编写的包装器类,将其封装在简单的C#对象模型中:
下面是一些使用该类的伪代码:
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");
System.Text.StringBuilder sb=new System.Text.StringBuilder();
某人附加(“\n”);
某人附加(“\n”);
附加(
“\n”);
附加(
"");
某人加上(“”);
附加(
“\n”);
sb.追加(“假”);
sb.追加(“假”);
某人附加(“\n”);
然后,通过使用以下基本结构创建节点,将其添加到输出字符串中:
<Worksheet ss:Name="SheetName">
<Table>
<Row>
<Cell>
<Data ss:Type="DataType">Cell A1 Contents Go Here</Data>
</Cell>
</Row>
</Table>
</Worksheet>
A1单元的内容放在这里
在
中,每个
元素创建一个新列。为每个电子表格行添加新的
。
的数据类型可以是“字符串”或“数字” 必须是我的Excel 2007中的一个设置,因为我现在注意到其他csv文件也不会打开。。是什么导致Excel出现这个问题,有什么想法吗?问题是我需要使用“;”而不是“,”来分隔列。因为“,”在欧洲被用来表示十进制数。“;”是否适用于所有国家,或者我是否需要为不同的国家创建不同的版本?分号在美国不适用。如果引用值(并使用逗号)不起作用,我将切换到XML。格式非常简单,我将用基础知识编辑我的回复。