每个 DataRow.Add 到 Excel 的奇怪输出
Weird output for each DataRow.Add to Excel
我有一个从数据表(使用 linq)生成 excel 文件的方法,当我生成文件时 excel 重复每一行,每个单元格...
我的代码添加了预定义的列,然后对于每一行它应该 return 整行,而不是每个单元格 + 每个单元格。
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);
您应该使用 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);
}
您无需创建数据表即可添加到 EPPlus。也可以直接使用IEnumerable
。
ws.Cells["A1"].LoadFromCollection(db.vistaRobot.ToList(), true);
我有一个从数据表(使用 linq)生成 excel 文件的方法,当我生成文件时 excel 重复每一行,每个单元格...
我的代码添加了预定义的列,然后对于每一行它应该 return 整行,而不是每个单元格 + 每个单元格。
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);
您应该使用 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);
}
您无需创建数据表即可添加到 EPPlus。也可以直接使用IEnumerable
。
ws.Cells["A1"].LoadFromCollection(db.vistaRobot.ToList(), true);