2014-04-01 55 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(); 
    } 
} 
相关问题