使用asp.net创建csv并在excel中打开

使用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

我正在使用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需要了解“年份”、“制造”等都应该是不同的列。这似乎不适用于我正在创建的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。格式非常简单,我将用基础知识编辑我的回复。