如何使用C#从CSV,List或DataSet创建XLS?

时间:2010-12-09 22:58:39

标签: c# xls

我目前有一个使用C#中的StringBuilder构建的CSV。

此CSV由以下人员生成:

使用LINQ查询数据库
将结果条目转储到列表中 循环列表并拉出CSV所需的实体 格式化并将行添加到StringBuilder变量
使用StreamWriter方法导出CSV

最近我被告知我需要将此文件作为XLS文件而不是CSV文件。我做了一些研究,但我是初学者编码器,并且不确定如何将此文件转换为XLS或从我的查询数据创建XLS。请记住,在检索查询结果后,必须在导出之前正确格式化数据。

实施例
数据库产品编号:9999-0000
相邻系统产品#:99990000BA

数据库日期:12/05/2010
相邻系统日期:2010/05/12

从我当前的代码/数据创建XLS或转换为XLS的最佳方法是什么?

5 个答案:

答案 0 :(得分:1)

如果您可以生成xlsx而不是xls,我的偏好是来自Microsoft的Open XML SDK

答案 1 :(得分:1)

答案 2 :(得分:1)

我几天前面临同样的挑战,我找到了解决方案(下面的代码)

您将看到一个seeion [“dsource”],其中包含搜索/过滤搜索页面中的数据源

不要忘记添加 EnableEventValidation =“false”

这是aspx页面

<%@ Page Language="C#" AutoEventWireup="true" EnableEventValidation ="false"     CodeFile="csresults.aspx.cs" Inherits="csresults" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0     Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
<form id="form1" runat="server">
<div>

</div>
<asp:Button ID="Button1" runat="server" Text="back" />
<asp:Button ID="Button2" runat="server" onclick="Button2_Click" Text="Export" />
<asp:GridView ID="gridview1" runat="server">
</asp:GridView>
</form>
</body>
</html>

这是背后的代码

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
using System.Threading;
using System.IO;
using System.Reflection;

public partial class csresults : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{

    gridview1.DataSource = Session["dsource"];
    gridview1.DataBind();




}


  public override void VerifyRenderingInServerForm(Control control)
{

}



protected void Button2_Click(object sender, EventArgs e)
{
    HtmlForm form = new HtmlForm();
    string attachment = "attachment; filename=Patients.xls";
    Response.ClearContent();
    Response.AddHeader("content-disposition", attachment);
    Response.ContentType = "application/ms-excel";
    StringWriter stw = new StringWriter();
    HtmlTextWriter htextw = new HtmlTextWriter(stw);
    form.Controls.Add(gridview1);
    this.Controls.Add(form);
    form.RenderControl(htextw);
    Response.Write(stw.ToString());
    Response.End();
}
}

答案 3 :(得分:1)

感谢帮助人员!

我最终使用mokokamello的代码作为基础,最终以一种不同的方式引导我找到答案。最后,我创建了一个DataTable,将其添加到DataSet并使用带有嵌套DataGrid的HttpResponse来导出Excel文件。我能够从中获得最大的意义。

 public static void ExportDStoExcel(DataSet ds, string filename)
    {
        HttpResponse response = HttpContext.Current.Response;
        response.Clear();
        response.Charset = "";

        response.ContentType = "application/vnd.ms-excel";
        response.AddHeader("Content-Disposition", "attachment;filename=\"" + filename + "\"");

        using (StringWriter sw = new StringWriter())
        {
            using (HtmlTextWriter htw = new HtmlTextWriter(sw))
            {
                DataGrid dg = new DataGrid();
                dg.DataSource = ds.Tables[0];
                dg.DataBind();
                dg.RenderControl(htw);
                response.Write(sw.ToString());
                response.End();
            }
        }

    }

答案 4 :(得分:0)

您可以通过以MS Excel格式编写自己的xml文件来更简单,该格式将在Excel中无缝打开。

阅读详情:http://en.wikipedia.org/wiki/Microsoft_Office_XML_formats#Excel_XML_Spreadsheet_example

检查示例并注意您可以进一步删除代码。