2017-03-16 105 views
0

我試圖將從SQL Server中提取的數據填充到Excel 2010中。下面的代碼工作正常,但難度在於我沒有以編程方式創建Excel電子表格,它是存在的,我通過用C#編寫的Excel中的插件發出數據請求。 即使我將光標設置爲A10單元格,Excel將開始填寫第一個單元格中的數據並覆蓋該標題(已存在)。請幫助解決。 代碼:在Excel(2010)電子表格中填充SQL Server數據

OdbcConnection cnn; 
       cnn = new OdbcConnection(azureConn); 
       using (OdbcCommand command = cnn.CreateCommand()) 
       { 
        command.CommandText = "{call sp_Get_Excel_Data(?,?,?,?,?,?,?,?)}"; 
        command.Parameters.AddWithValue("@StartDate", startDate); 
        command.Parameters.AddWithValue("@EndDate", endDate); 
        command.Parameters.AddWithValue("@startTime", startTime); 
        command.Parameters.AddWithValue("@endTime", endTime); 
        command.Parameters.AddWithValue("@smp", smp); 
        command.Parameters.AddWithValue("@Reg", reg); 
        command.Parameters.AddWithValue("@event", events); 
        command.Parameters.AddWithValue("@userId", userId); 

        cnn.Open(); 

        //DataTable 
        OdbcDataAdapter adapter = new OdbcDataAdapter(command); 

        //DataSet 
        DataSet ds = new DataSet(); 
        adapter.Fill(ds); 

        //Cast to DataTable 
        DataTable dataTable = ds.Tables[0]; 

        string[] colNames = new string[dataTable.Columns.Count]; 
        int col = 0; 

        foreach (DataColumn dc in dataTable.Columns) 
         colNames[col++] = dc.ColumnName; 

        w = this.Application.ActiveWorkbook; 
        ws = (Worksheet)w.ActiveSheet; 

        Range hdrRow = (Range)ws.Rows[9]; 

        hdrRow.Value = colNames; 
        hdrRow.Font.Bold = true; 
        hdrRow.VerticalAlignment = XlVAlign.xlVAlignCenter; 

        //Position the cursor 
        var range = ws.get_Range("A10"); 
        range.Select(); 

        //Inserting the Column and Values into Excel file 
        string data = null; 
        int i = 0; 
        int j = 0; 

        for (i = 0; i <= dataTable.Rows.Count - 1; i++) 
        { 
         for (j = 0; j <= dataTable.Columns.Count - 1; j++) 
         { 
          data = dataTable.Rows[i].ItemArray[j].ToString(); 
          ws.Cells[i + 2, j + 1] = data; 

         } 
        } 

回答

1

不願意回答我自己的問題,但這裏是解決方案(以優化性能):

    int column = 1; 
        foreach (DataColumn c in dataTable.Columns) 
        { 
         //Ninth row, starting from the first cell 
         ws.Cells[10, column] = c.ColumnName; 
         column++; 
        } 

        // Create a 2D array with the data from the data table 
        int i = 0; 
        string[,] data = new string[dataTable.Rows.Count, dataTable.Columns.Count]; 
        foreach (DataRow row in dataTable.Rows) 
        { 
         int j = 0; 
         foreach (DataColumn c in dataTable.Columns) 
         { 
          data[i, j] = row[c].ToString(); 
          j++; 
         } 
         i++; 
        } 

        // Set the range value to the 2D array in Excel (10th row, starting from 1st cell) 
        ws.Range[ws.Cells[11, 1], ws.Cells[dataTable.Rows.Count + 11, dataTable.Columns.Count]].Value = data; 
相關問題