Странный вывод для каждого DataRow. Добавить в Excel - PullRequest
0 голосов
/ 27 февраля 2020

У меня есть метод, который генерирует файл Excel из таблицы данных (используя linq), и когда я генерирую файл, Excel повторяет каждую строку, каждую ячейку ...

enter image description here

Мой код добавляет предопределенные столбцы, а затем для каждой строки он должен возвращать всю строку, а не каждую ячейку + каждую ячейку.

                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);
                }

Я знаю, что это ошибка для каждого, но Я не могу найти логин позади.

Ответы [ 2 ]

1 голос
/ 27 февраля 2020

Это потому, что вы вызываете 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);

}
0 голосов
/ 27 февраля 2020

Вам не нужно создавать DataTable для добавления в EPPlus. Вы также можете использовать IEnumerable напрямую.

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