2017-07-11 7 views
0

から最初の行を示すのではなく、データベースからの最初の行は、Excelで保存されていません。ここ輸出は、私が<strong>エクセル</strong>に#</strong> C <strong>から<em><strong>データベースに</strong></em>を輸出しようとしているデータベース

private void exporttoexcel() 
{ 
    Microsoft.Office.Interop.Excel._Application excel = new Microsoft.Office.Interop.Excel.Application(); 
    Microsoft.Office.Interop.Excel._Workbook workbook = excel.Workbooks.Add(Type.Missing); 
    Microsoft.Office.Interop.Excel._Worksheet worksheet = null; 

    try 
    { 
     worksheet = workbook.ActiveSheet; 
     worksheet.Name = "ExportedFromDatGrid"; 

     int cellRowIndex = 1; 
     int cellColumnIndex = 1; 

     //Loop through each row and read value from each column. 
     for (int i = 0; i < dataGridView1.Rows.Count - 1; i++) 
     { 
      for (int j = 0; j < dataGridView1.Columns.Count; j++) 
      { 
       // Excel index starts from 1,1. As first Row would have the Column headers, adding a condition check. 
       if (cellRowIndex == 1) 
       { 
        worksheet.Cells[cellRowIndex, cellColumnIndex] = dataGridView1.Columns[j].HeaderText; 
       } 
       else 
       { 
        worksheet.Cells[cellRowIndex, cellColumnIndex] = dataGridView1.Rows[i].Cells[j].Value.ToString(); 
       } 
       cellColumnIndex++; 
      } 
      cellColumnIndex = 1; 
      cellRowIndex++; 
     } 
    } 
    catch(Exception ex) 
    { 
    } 
} 

私が使用しているコードです。誰も私を助けることができる?私はコーディングに新しいです。

+0

Excelをサーバーにインストールすることは、常に最適なソリューションではありません。 @Rick van den Boschは既にClosedXMLを使用して素晴らしい答えと代替ソリューションを提供していました。私はEpplusも代わりであると付け加えたいと思います。 https://www.nuget.org/packages/EPPlus/ –

答えて

0

cellColumnIndexが1の場合は、最初の行をスキップしてデータを書き出しません。しかし、最初の行が処理された後、行インデックスになります。

// Add the column names 
var index = 0; 
foreach(var column in dataGridView1.Columns) 
{ 
    worksheet.Cells[0, index] = column.HeaderText; 
    index++; 
} 

//Loop through each row and read value from each column. 
for (int i = 0; i < dataGridView1.Rows.Count - 1; i++) 
{ 
    for (int j = 0; j < dataGridView1.Columns.Count; j++) 
    { 
     // Excel index starts from 1,1. As first Row would have the Column headers, adding a condition check. 
     worksheet.Cells[cellRowIndex, cellColumnIndex] = dataGridView1.Rows[i].Cells[j].Value.ToString(); 
     cellColumnIndex++; 
    } 
    cellColumnIndex = 1; 
    cellRowIndex++; 
} 

ClosedXMLを見てください。このような何かを見て、あなたのforループリファクタリング。コードの作成が簡単になり、実行するマシンにExcelをインストールする必要がなくなります。

関連する問題