2

我有 2 个 datgridviews,试图将标题和它的值复制到 excel 表中。第一个循环对于第一个 datagirdview 工作正常

for (int i = 1; i < dataGridView1.Columns.Count + 1; i++)
            {
                worksheet.Cells[7, i] = dataGridView1.Columns[i - 1].HeaderText;
            }



            // storing Each row and column value to excel sheet
            for (int i = 0; i < dataGridView1.Rows.Count - 1; i++)
            {
                for (int j = 0; j < dataGridView1.Columns.Count; j++)
                {
                    worksheet.Cells[i + 8, j + 1] = dataGridView1.Rows[i].Cells[j].Value.ToString();
                }
            }

这是第二个 datagridview,我正在尝试复制标题及其值。

第一个 datagridview 标题值在D7第 7 行单元格处完成,行值在第 8 行单元格处完成D8

我想放置第 7 行的第二个 datagridview 标题和第 8 行E7的行值E8

//Primary Continuation
        for (int i = 7; i < dataGridView2.Columns.Count + 1; i++)
        {
            worksheet.Cells[7, i] = dataGridView2.Columns[i - 1].HeaderText;
        }



        // storing Each row and column value to excel sheet
        for (int i = 0; i < dataGridView2.Rows.Count - 1; i++)
        {
            for (int j = 0; j < dataGridView2.Columns.Count; j++)
            {
                worksheet.Cells[i + 8, j + 1] = dataGridView2.Rows[i].Cells[j].Value.ToString();
            }
        }
4

1 回答 1

1

因此,如果我对您的理解正确,您想在 Excel 工作表上将您的两个表格并排放置吗?在这种情况下,您似乎在第二个循环中混淆了偏移量DataGridView。在这个循环中:

//Primary Continuation
for (int i = 7; i < dataGridView2.Columns.Count + 1; i++)
{
    worksheet.Cells[7, i] = dataGridView2.Columns[i - 1].HeaderText;
}

无需将计数偏移 7(这会驱动网格中的源数据位置),您需要偏移 Excel 工作表中的目标,因为第二个中的位置DataGridView将与第一个相同。您可以复制您的第一个循环,但只需稍微更改目标即可。事实上,这同样适用于您的最终循环。

还值得注意的是,复制值的循环将错过最后一行。我不确定这是不是故意的,但我已经纠正了。这是您的第二组循环的外观。

//Primary Continuation
for (int i = 1; i < dataGridView2.Columns.Count + 1; i++)
{
    worksheet.Cells[7, i + dataGridView2.Columns.Count] = dataGridView2.Columns[i - 1].HeaderText;
}

// storing Each row and column value to excel sheet
for (int i = 0; i < dataGridView2.Rows.Count; i++)
{
    for (int j = 0; j < dataGridView2.Columns.Count; j++)
    {
        worksheet.Cells[i + 8, j + 1 + dataGridView2.Columns.Count] = dataGridView2.Rows[i].Cells[j].Value.ToString();
    }
}

您会注意到,由于您的两组循环之间的差异现在可以忽略不计,您可以轻松地将它们组合在一起,从而减少执行时间(尽管显然只有在使用更多数据时才会注意到影响)。

于 2012-11-04T19:33:28.713 回答