2

ヘッダーとその値を Excel シートにコピーしようとして、2 つの datgridviews を取得しました。最初の 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();
                }
            }

これは 2 番目の datagridview で、ヘッダーとその値をコピーしようとしています。

最初の datagridview ヘッダー値は 7 行目 cell で終了し、行値D7は 8 行目 cell で終了しましたD8

7 行目から 2 番目の 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

私があなたのことを正しく理解していれば、2 つのテーブルを Excel シートで隣り合わせに配置しますか? その場合、2番目のループでオフセットが混同されているようですDataGridView。このループでは:

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

カウントを 7 だけオフセットする (グリッド内のソース データの場所を駆動する) 代わりに、Excel シート内の宛先をオフセットする必要があります。これは、2 番目の場所がDataGridView最初の場所と同じになるためです。最初のループを複製できますが、宛先を少し変更するだけです。実際、最終ループでも同じことが機能します。

値をコピーするためのループが最後の行を見逃すことにも注意してください。意図的かどうかはわかりませんが、修正しました。ループの 2 番目のセットは次のようになります。

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

2 つのループ セットの違いは無視できるほどになったので、それらを簡単に組み合わせて実行時間を短縮できることに気付くでしょう (ただし、データがはるかに多い場合にのみ影響が顕著になることは明らかです)。

于 2012-11-04T19:33:28.713 に答える