【问题标题】:how to create multiple excel sheets如何创建多个excel表
【发布时间】:2012-07-06 05:22:11
【问题描述】:

好吧,我只需要创建一个 excel 文件,两张表都使用 2 个不同的 DataTable 填充,它给出了用户只需单击保存的名称,下一个代码允许我将一个数据表添加到一张表中(我我正在使用 C#、asp.net,而不是使用 Visual Studio,我正在记事本中编写我的代码):

string name2="Centroids";
        HttpContext context = HttpContext.Current;
        context.Response.Clear();
        foreach (System.Data.DataRow row in _myDataTable2.Rows)
        {   
            for (int i = 0; i < _myDataTable2.Columns.Count; i++)
                {
                context.Response.Write(row[i].ToString().Replace(",", string.Empty) + ",");
            }
        context.Response.Write(Environment.NewLine);
        }
    context.Response.ContentType = "text2/csv";
    context.Response.AppendHeader("Content-Disposition", "attachment; filename=" + name2 + ".csv");

但我不知道如何创建第二张工作表并使用第二个 DataTable,任何关于如何找到解决方案的想法,这样用户只需保存和下载一个文档,而不是保存尽可能多的 DataTable节目单

【问题讨论】:

  • CSV 文件不能有多个工作表。
  • @JAB 谢谢,我不知道这是不可能的,现在不用寻找另一个答案

标签: c# asp.net


【解决方案1】:
public bool LlenarExcelxlsx(List<DatosEntidad> listaOrigen)
{
    bool exito = false;
    string[] tipoLista = { "A", "B", "C" };
    string nombreArchivo = @"D:\prueba.xlsx";

    IWorkbook wb = new XSSFWorkbook();
    using (FileStream fileData = new FileStream(nombreArchivo, FileMode.Create, FileAccess.Write))
    {
        for (int k = 0; k < tipoLista.Length; k++)
        {
            List<DatosEntidad> listaDestino = listaOrigen
                .Where(c => c.tipo == tipoLista[k]).ToList();

            DataTable dt = ToDataTable(listaDestino);

            ISheet sheetx = wb.CreateSheet("Res_" + tipoLista[k] + k);
            ICreationHelper cH = wb.GetCreationHelper();
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                IRow row = sheetx.CreateRow(i);
                for (int j = 0; j < 13; j++)
                {
                    ICell cell = row.CreateCell(j);
                    cell.SetCellValue(cH.CreateRichTextString(dt.Rows[i].ItemArray[j].ToString()));
                }
            }
        }
        wb.Write(fileData);
        exito = true;
    }
    return exito;
}

【讨论】:

  • Este código está probado y funciona correctamente a partir de una lista origen.
  • 您介意编辑您的答案以提供对代码和您所做更改的一些解释吗?那会很有用。
【解决方案2】:

您应该使用开源库来生成本机 excel 文件,您无法使用 csv 创建两个工作表。

使用NPOI(xls)或/和EPPlus(xlsx)并完全控制您的excel导出,在这个答案https://stackoverflow.com/a/9569827/351383中,您可以看到使用EPPlus从DataTable创建excel文件的示例。您可以编辑该方法以接受 DataTable 列表并为每个表创建新工作表,这很简单,只需:

ExcelPackage pack = new ExcelPackage();
ExcelWorksheet ws = pack.Workbook.Worksheets.Add(sheetName);

【讨论】:

    【解决方案3】:

    您可能想探索使用 EPPlus 的可能性。根据我的经验,使用 Response 对象有很多限制,并且需要花费太多的开发精力来生成 Excel 文件。

    网址: http://epplus.codeplex.com/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-06
      • 2018-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多