【问题标题】:Weird output for each DataRow.Add to Excel每个 DataRow 的奇怪输出。添加到 Excel
【发布时间】:2020-06-11 13:42:59
【问题描述】:

我有一种从数据表生成 excel 文件的方法(使用 linq),当我生成文件时,excel 会重复每一行、每个单元格...

我的代码添加了预定义的列,然后对于每一行它应该返回整行,而不是每个单元格 + 每个单元格。

                var query = db.vistaRobot.ToList().Where(a => a.fechaFiltro2 >= dateInt && a.filtroModifica == null).ToArray();

                DataTable tablaDespacho = new DataTable();

                tablaDespacho.Columns.Add(new DataColumn()
                {
                    DataType = System.Type.GetType("System.String"),
                    ColumnName = "Nombre Colaborador"
                });
                //DataTable tablaDespacho = query.CopyToDataTable<DataRow>();
                tablaDespacho.Columns.Add(new DataColumn()
                {
                    DataType = System.Type.GetType("System.String"),
                    ColumnName = "Tipo de Tiempo"
                });


                tablaDespacho.Columns.Add(new DataColumn()
                {
                    DataType = System.Type.GetType("System.String"),
                    ColumnName = "Tipo de Licencia"
                });


                tablaDespacho.Columns.Add(new DataColumn()
                {
                    DataType = System.Type.GetType("System.String"),
                    ColumnName = "Fecha Inicio"
                });


                tablaDespacho.Columns.Add(new DataColumn()
                {
                    DataType = System.Type.GetType("System.String"),
                    ColumnName = "Fecha de Finalizacion"
                });

                tablaDespacho.Columns.Add(new DataColumn()
                {
                    DataType = System.Type.GetType("System.String"),
                    ColumnName = "Fecha de Alumbramiento"
                });

                tablaDespacho.Columns.Add(new DataColumn()
                {
                    DataType = System.Type.GetType("System.String"),
                    ColumnName = "Fuero"
                });


                tablaDespacho.Columns.Add(new DataColumn()
                {
                    DataType = System.Type.GetType("System.String"),
                    ColumnName = "Nro Folio"
                });


                tablaDespacho.Columns.Add(new DataColumn()
                {
                    DataType = System.Type.GetType("System.String"),
                    ColumnName = "Lugar de Reposo"
                });

                foreach (var element in query)
                {
                    var row =
                    tablaDespacho.NewRow();
                    //tablaDespacho.Rows.Add(row);
                    tablaDespacho.Rows.Add(row.ItemArray);

                    // A LOT OF ROWS INSIDE

                    //tablaDespacho.Rows.Add(row);
                    tablaDespacho.Rows.Add(row.ItemArray);

                    row["Lugar de Reposo"] = element.Lugar_de_Reposo;
                    //tablaDespacho.Rows.Add(row);
                    tablaDespacho.Rows.Add(row.ItemArray);
                }

我知道 for each 有错误,但我找不到后面的登录信息。

【问题讨论】:

  • 你为什么要多次调用tablaDespacho.Rows.Add(row.ItemArray);

标签: c# asp.net asp.net-mvc datatable epplus


【解决方案1】:

这是因为您在设置行的每一列数据时多次调用tablaDespacho.Rows.Add(row.ItemArray);

您应该使用tablaDespacho.NewRow() 创建新行,然后将属性添加到行,最后只需为每一行调用一次tablaDespacho.Rows.Add(row);,如下所示:

foreach (var element in query)
{
    var row = tablaDespacho.NewRow();

    row["Lugar de Reposo"] = element.Lugar_de_Reposo;
    //The other properties

    tablaDespacho.Rows.Add(row);

}

【讨论】:

  • 该死,没有看到那个我虽然这意味着对于每一列你都从该行中获取值。谢谢!
【解决方案2】:

您无需创建 DataTable 即可添加到 EPPlus。也可以直接使用IEnumerable

ws.Cells["A1"].LoadFromCollection(db.vistaRobot.ToList(), true);

【讨论】:

    猜你喜欢
    • 2015-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-16
    • 2012-03-04
    • 2020-04-23
    • 1970-01-01
    • 2021-12-03
    相关资源
    最近更新 更多