2014-04-01 83 views
0

我有一個將SQL Server數據導出到Excel的工作代碼。從sql server數據庫導出excel無法正常工作

public static void ExportToExcel(DataTable dt) 
{ 
     // Create sql connection string 
     string conString = "Data Source=DELL\\SQLSERVER1;Trusted_Connection=True;DATABASE=Test;CONNECTION RESET=FALSE"; 
     SqlConnection sqlCon = new SqlConnection(conString); 
     sqlCon.Open(); 

     SqlDataAdapter da = new SqlDataAdapter("select * from tStudent", sqlCon); 
     System.Data.DataTable dtMainSQLData = new System.Data.DataTable(); 
     da.Fill(dtMainSQLData); 
     DataColumnCollection dcCollection = dtMainSQLData.Columns; 

     // Export Data into EXCEL Sheet 
     Microsoft.Office.Interop.Excel.ApplicationClass ExcelApp = new Microsoft.Office.Interop.Excel.ApplicationClass(); 
     ExcelApp.Application.Workbooks.Add(Type.Missing); 

     //ExcelApp.Cells.CopyFromRecordset(objRS); 
     for (int i = 1; i < dtMainSQLData.Rows.Count + 1; i++) 
     { 
      for (int j = 1; j < dtMainSQLData.Columns.Count + 1; j++) 
      { 
       if (i == 1) 
        ExcelApp.Cells[i, j] = dcCollection[j - 1].ToString(); 
       else 
        ExcelApp.Cells[i, j] = dtMainSQLData.Rows[i - 1][j - 1].ToString(); 
      } 
     } 
     ExcelApp.ActiveWorkbook.SaveCopyAs("C:/Users/Administrator.CAMO/Downloads/FtpFilesStorage/Sheet1.xlsx"); 
     ExcelApp.ActiveWorkbook.Saved = true; 
     ExcelApp.Quit(); 

     Console.WriteLine(".xlsx file Exported succssessfully."); 
} 

,我在Main()這樣使用這種方法:

System.Data.DataTable dtMainSQLData = new System.Data.DataTable(); 
ExportToExcel(dtMainSQLData); 

也能正常工作,但第一行不會被複制或從SQL Server原始表導出。

+1

你的錯誤應該是'for(int i = 0; i

+0

感謝Conrad Frix ...它確實有效,但是現在我無法導出最後一行,因此我改變了我的代碼以遵循您的建議: for(int i = 0;我 user2525244

回答

2

由於ExcelApp.Cells不是基於零的事實,並且您有一個標題行,所以您遇到一次性錯誤。

爲了解決這個問題,你可以使用foreach並將你的頭文件導出分離出來。 的確需要多一點的代碼,但我覺得更容易處理和容易出錯少

int i = 1; 

int j = 1; 
//header row 
foreach(DataColumn col in dtMainSQLData.Columns) 
{ 
    ExcelApp.Cells[i, j] = col.ColumnName; 
    j++; 
} 

i++; 
//data rows 
foreach(DataRow row in dtMainSQLData.Rows) 
{ 
    for (int k = 1; k < dtMainSQLData.Columns.Count + 1; k++) 
    { 
     ExcelApp.Cells[i, k] = row[k-1].ToString(); 
    } 
    i++; 
} 
+0

使用以下我得到一個錯誤,說 「對象不包含列名稱的定義和'ColumnName'的擴展名'」 無法將行[k-1]上的[object] 此致敬禮。 – user2525244

+0

我改變它使用實際的數據類型,而不是'var',雖然我不明白爲什麼需要 –

+0

感謝噸..! – user2525244

0

你的代碼是好的,但你只需要刪除你的「別人」塊和增加的起始行你的Excel電子表格:

for (int i = 1; i < dtMainSQLData.Rows.Count + 1; i++) 
{ 
    for (int j = 1; j < dtMainSQLData.Columns.Count + 1; j++) 
    { 
     if (i == 1) 
      ExcelApp.Cells[i, j] = dcCollection[j - 1].ToString(); 

     ExcelApp.Cells[i + 1, j] = dtMainSQLData.Rows[i - 1][j - 1].ToString(); 
    } 
} 
相關問題