如何使用 ASP.NET C# 将 XL Work sheet 名称赋予 DataTable

How to give an XL Work sheet name into a DataTable Using ASP.NET C#

我正在将三个工作 sheet 导出到单个 XL 文件中。但我得到了一个工作sheet 名称,如 Table1、Table2、Table3。

下面是不调用数据库的 C# 代码,可以正常工作 sheet 个名字。

   var ds = new DataSet();
   var dt = new DataTable("TableName For Sheet1");
   dt.Columns.Add("col1");
   dt.Columns.Add("col2");
   dt.Rows.Add("Value1", "Value2");

   var dt2 = new DataTable("TableName For Sheet2");
   dt2.Columns.Add("col1");
   dt2.Columns.Add("col2");
   dt2.Rows.Add("Value1", "Value2");
   ds.Tables.Add(dt);
   ds.Tables.Add(dt2);
   ExcelHelper.ToExcel(ds, "test.xls", Page.Response);

下面是调用数据库存储过程的C#代码,但是sheet命名为Table1、Table2、Table2。

    DataSe ds = new DataSet();
    DataTable dt = new DataTable("Registration Details");
    DataTable dt1 = new DataTable("Education Details");
    DataTable dt2 = new DataTable("Employeement Details");


    dt = bl.Get_Registrationdetailsbydate(bo);
    gv_Regdetails.DataSource = dt;
    gv_Regdetails.DataBind();
    dt1 = bl.Get_Registrationdetailsbydate1(bo);
    dt2 = bl.Get_Registrationdetailsbydate2(bo);
    DataTable filteredEducation = dt1.AsEnumerable()
                                     .Where(x => dt.AsEnumerable()
                               .Any(z => z.Field<string>("Email").Trim() == x.Field<string>("Email").Trim()))
                               .CopyToDataTable();
    DataTable filteredEmployee = dt2.AsEnumerable()
                                    .Where(x => dt.AsEnumerable()
                              .Any(z => z.Field<string>("Email").Trim() == x.Field<string>("Email").Trim()))
                              .CopyToDataTable();

    ds.Tables.Add(dt);
    ds.Tables.Add(filteredEducation);
    ds.Tables.Add(filteredEmployee);
    ExcelHelper.ToExcel(ds, "DangoteUsers.xls", Page.Response);

我需要 sheet 名称结果,例如注册详细信息、教育详细信息和雇员详细信息。

我参考这个例子:http://www.codeproject.com/Articles/31516/Export-DataSet-to-Multiple-Excel-Sheets

您在初始化后覆盖了 dtdt1dt2,这就是为什么您没有正确获取名称而是获取 table秒。尝试在分配后为这三个 table 设置名称,或在分配逻辑中包含 table 名称。我更新了您的代码以证明这一点。

DataSet ds = new DataSet();


var dt = bl.Get_Registrationdetailsbydate(bo);
gv_Regdetails.DataSource = dt;
gv_Regdetails.DataBind();
var dt1 = bl.Get_Registrationdetailsbydate1(bo);
var dt2 = bl.Get_Registrationdetailsbydate2(bo);
DataTable filteredEducation = dt1.AsEnumerable()
                                 .Where(x => dt.AsEnumerable()
                           .Any(z => z.Field<string>("Email").Trim() == x.Field<string>("Email").Trim()))
                           .CopyToDataTable();
DataTable filteredEmployee = dt2.AsEnumerable()
                                .Where(x => dt.AsEnumerable()
                          .Any(z => z.Field<string>("Email").Trim() == x.Field<string>("Email").Trim()))
                          .CopyToDataTable();

dt.TableName = "Registration Details";
filteredEducation.TableName = "Education Details";
filteredEmployee.TableName = "Employeement Details";

ds.Tables.Add(dt);
ds.Tables.Add(filteredEducation);
ds.Tables.Add(filteredEmployee);
ExcelHelper.ToExcel(ds, "DangoteUsers.xls", Page.Response);