【发布时间】:2021-11-10 13:16:36
【问题描述】:
我有一个包含多个列和不同报告类型的 datagridview,其中我有一种将记录导出到 Excel 电子表格的方法,在这个 datagridview 中,我根据所选的报告类型留下了一些列,例如:visible = false。
在电子表格的导出方法中,我有一个仅考虑可见单元格的验证,是的,但它不起作用。
int XLRow = 1;
int XLCol = 1;
// Export header
for (int i = 0; i < datagrid.Columns.Count; i++)
{
if (datagrid.Columns[i].Visible == true)
xlWorkSheet.Cells[XLRow, XLCol++] = datagrid.Columns[i].HeaderText;
}
XLRow = 2;
XLCol = 1;
// Controls for scrolling through records do DataGridView
for (int i = 0; i < datagrid.RowCount; i++)
{
for (int j = 0; j < datagrid.ColumnCount; j++)
{
DataGridViewCell cell = datagrid[j, i];
string conteudo = string.Empty;
if ((cell.Value != null) && (!string.IsNullOrEmpty(cell.Value.ToString())) && cell.Visible == true)
{
conteudo = cell.Value.ToString();
if ((Funcoes.EhNumerico(conteudo)) && (conteudo.Length > 8))
{
conteudo = string.Concat("'", conteudo);
}
xlWorkSheet.Cells[XLRow, XLCol++] = conteudo;
}
XLRow++;
XLCol = 1;
}
}
电子表格以白色的visible = false 列离开,如下所示:
我该如何解决这个问题?
【问题讨论】:
-
电子表格没有接收到不可见的 gridview 列;您将可见的 gridview 列放在错误的电子表格列中。
-
在第一个 for 循环遍历列中,代码检查该列是否可见,如果可见,则添加标题。这样做的问题是,由于您使用
i作为工作表的索引,因此可能会跳过不可见的列,但是,索引i仍然递增……意味着下一列将使用i+ 1这就是您在 Excel 文件中看到空白列的原因。同样的想法也适用于添加网格单元的代码。我建议您为 Excel 索引“仅”创建几个int变量,并严格使用i、j作为网格单元格的索引……。 -
但是我不会将i和j的值存储在这些建议的变量中吗?你能帮我想象一下编码吗?
标签: c# .net excel winforms datagridview