2

好吧,我只需要创建一个 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

4

3 回答 3

3

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

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

于 2012-07-05T19:07:42.453 回答
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);
于 2012-07-05T19:13:05.203 回答
0
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;
}
于 2020-05-18T04:02:04.423 回答