我有一個包含多個列和不同報告型別的 datagridview,我有一種方法可以將記錄匯出到 Excel 電子表格,在這個 datagridview 中,我保留了一些列,例如:visible = false根據所選的報告型別。
在電子表格的匯出方法中,我進行了驗證以僅考慮可見單元格,為 true 但它不起作用。
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以白色列離開,如下所示:

我該如何解決這個問題?
uj5u.com熱心網友回復:
換句話說......在第一個for回圈中......如果列不可見......那么你不想增加i......這顯然會弄亂for回圈。因此,我的建議,以創建兩個(2)int變數...int XLRow和int XLColumn,然后專門使用這些索引的作業表。然后在您的代碼使用iandj時回圈遍歷網格列,但是,當發現不可見的列時,您不想增加XLCol索引。
將loops i或j變數也用作作業表列的索引將是一項具有挑戰性的作業,因為它們可能是完全“不同”的索引。這就是為什么我說將它們從 git go 中“分離”出來并保持簡單。就像是…
編輯每個 OP 評論...
我有“增加” XLCol“內部”if陳述句的代碼,該陳述句檢查null單元格值或空字串單元格值……這意味著如果單元格為null空……則XLCol不會增加。該行xlWorkSheet.Cells[XLRow, XLCol ] = conteudo;應該在該if陳述句的“外部” 。我已經編輯了代碼,現在它應該可以在“空”單元格中正常作業。
int XLRow = 1;
int XLCol = 1;
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;
for (int i = 0; i < datagrid.RowCount; i ) {
for (int j = 0; j < datagrid.ColumnCount; j ) {
if (datagrid.Columns[j].Visible) {
DataGridViewCell cell = datagrid[j, i];
string conteudo = string.Empty;
if ((cell.Value != null) && (!string.IsNullOrEmpty(cell.Value.ToString()))) {
conteudo = cell.Value.ToString();
if ((Funcoes.EhNumerico(conteudo)) && (conteudo.Length > 8)) {
conteudo = string.Concat("'", conteudo);
}
//xlWorkSheet.Cells[XLRow, XLCol ] = conteudo; <- XLCol incremented ONLY if cell is not null or empty and this is wrong
}
xlWorkSheet.Cells[XLRow, XLCol ] = conteudo;
}
}
XLRow ;
XLCol = 1;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/355959.html
上一篇:在C#中需要幫助分組
