C# 网络<;表>;出类拔萃

C# 网络<;表>;出类拔萃,c#,xml,excel,C#,Xml,Excel,我一直在开发一个网页,允许用户根据几个过滤器/标准在数据库中搜索项目。要求之一是能够将这些数据导出到电子表格(excel)中。到目前为止,我已经使用CSV文件创建了一个非常简单的方法 //get model... StringWriter sw = new StringWriter(); //First line for column names sw.WriteLine("col1,col2,col3"); foreach (DataType i in model) { sw.Wr

我一直在开发一个网页,允许用户根据几个过滤器/标准在数据库中搜索项目。要求之一是能够将这些数据导出到电子表格(excel)中。到目前为止,我已经使用CSV文件创建了一个非常简单的方法

//get model...
StringWriter sw = new StringWriter();

//First line for column names
sw.WriteLine("col1,col2,col3");

foreach (DataType i in model)
{
    sw.WriteLine(string.Format({0},{1},{2},
                                i.data1,
                                i.data2,
                                i.data3));
}

Response.AddHeader("Content-Disposition", "attachment; filename=test.csv");
Response.ContentType = "text/csv";
Response.ContentEncoding = System.Text.Encoding.GetEncoding("utf-8");
Response.Write(sw);
Response.End(); 
很简单,但我希望对电子表格的格式有更多的控制。经过一些搜索,我找到了以下文档:&它们描述了excel接受的一种XML类型。我想进一步了解这种文档类型,但似乎缺少文档。wiki链接中没有关于格式的详细信息,MSDN文章中也没有示例。我无法交叉引用两者,因为它们似乎使用不同的版本(
ss:workbook
vs
workbook
)。见鬼,我甚至不知道
ss:
x:
c:
前缀代表什么。此外,MSDN文章是针对Office 2003的,我似乎找不到更新的版本

也许我一起查错了东西;有没有更现代的方法来实现我的目标?感谢消息来源。

杰夫

我不确定这是否是您想要的,但EPPlus可以为您生成xlsx工作表。我想给你提供一个样本,而不是仅仅说“这里用这个”

以下是从这里采集的样本:


希望这是您所需要的。

因为您使用的是asp,所以您可以通过COM调用Excel并构建一个真正的电子表格,而不是与csv或html混在一起。这不会很好,但这将是最直接的方法。@Marc-B COM自动化在服务器上不受支持。@Jeff尝试一下CodePlex的EPPlus,它是100%.NET。它可以为您生成XLSX文件。@Chris似乎很有希望。我会查出来的。。。我的公司对允许我们使用的库/框架有严格的政策。当我研究EPPlus时,您对使用我的web服务器生成XML有什么想法吗?
ExcelPackage pkg = new ExcelPackage();

var ws = pck.Workbook.Worksheets.Add("Sheet1");

//First line for column names
ws.Cells["A1"] = "col1";
ws.Cells["A2"] = "col2";
ws.Cells["A3"] = "col3";

int row = 2;

foreach (DataType i in model)
{
    //I don't know you data model, I'm guessing

    //row, col
    ws.Cells[row, 1] = i.data1);
    ws.Cells[row, 2] = i.data2);
    ws.Cells[row, 3] = i.data3);

    row++;
}

pck.SaveAs(Response.OutputStream);
Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
Response.AddHeader("content-disposition", "attachment;  filename=YouNameGoesHere.xlsx");