2011-06-23 158 views
4

在我的應用程序中,我正在將DataGridView數據導出爲Excel表格,現在我想將組合框和文本框選定值傳遞給Excel工作表,並且必須爲我的Excel工作表提供標題,作爲我的Windows應用程序的報告我怎樣才能做到這一點?將DataGridView數據導出爲ex​​cel

任何人都可以幫助我嗎?

我的代碼導出的datagridview數據擅長:

private void btnexcel_Click(object sender, EventArgs e)  
{ 

    Excel.Application xlApp;  
    Excel.Workbook xlWorkBook;  
    Excel.Worksheet xlWorkSheet; 

    object misValue = System.Reflection.Missing.Value; 

    xlApp = new Excel.ApplicationClass(); 

    xlWorkBook = xlApp.Workbooks.Add(misValue); 

    xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1); 

    int i = 0;  
    int j = 0; 

    for (i = 0; i <= dataGridView1.RowCount - 1; i++)  
    {  
     for (j = 0; j <= dataGridView1.ColumnCount - 1; j++)  
     {  
     DataGridViewCell cell = dataGridView1[j, i]; 

     xlWorkSheet.Cells[i + 1, j + 1] = cell.Value; 
     }  
    } 

    xlWorkBook.SaveAs("csharp.net-informations.xls", Excel.XlFileFormat.xlWorkbookNormal, misValue, misValue, misValue, misValue, Excel.XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue, misValue); 
    xlWorkBook.Close(true, misValue, misValue); 

    xlApp.Quit(); 


    releaseObject(xlWorkSheet);  
    releaseObject(xlWorkBook);  
    releaseObject(xlApp); 

    MessageBox.Show("Excel file created , you can find the file c:\\csharp.net-informations.xls"); 

} 


private void releaseObject(object obj)  
{ 
    try  
    { 
     System.Runtime.InteropServices.Marshal.ReleaseComObject(obj); 

     obj = null;  
    }  
    catch (Exception ex)  
    {  
     obj = null; 

     MessageBox.Show("Exception Occured while releasing object " + ex.ToString());  
    }  
    finally  
    {  
     GC.Collect(); 
    }  
} 


} 
} 
+0

您應該也可以嘗試改進問題格式以使其更容易閱讀。還要提供有關「傳遞組合框和文本框值」的含義的更多詳細信息。 – bronsoja

+0

如果用戶在combox中選擇任何值,我想將它發送到excel表單中... – Sweety

回答

0

在你把Value屬性是給你的ValueMember對於ComboBox細胞,而不是將DisplayMember ComboBox中DataGridView小區信息的代碼。相反,您需要訪問FormattedValue(您可以實際使用所有單元格)。

這裏是展示如何做到這一點(連同其他一些小的改進),一些代碼:

for (int i = 0; i < dataGridView1.RowCount; i++) 
{ 
    if (!dataGridView1.Rows[i].IsNewRow) 
    { 
     for (int j = 0; j < dataGridView1.ColumnCount; j++) 
     {   
      DataGridViewCell cell = dataGridView1[j, i]; 
      MessageBox.Show(cell.FormattedValue.ToString());      
     } 
    } 
} 

在那裏,我只取FormattedValue的,並與一個消息顯示,但對你,你可以簡單地把它分配給你的手機。

我也爲循環使用了稍微更緊湊的語法,並在網格的NewRow(可以包含可能會破壞事物的空值)的檢查中添加。


而且,要知道一個有用的事情是,一旦你的細胞,就可以得到實際類型的細胞,像這樣:

if (cell is DataGridViewComboBoxCell) 

這給你更多的選擇與合作解決問題時。作爲最後一個選項,您甚至可以訪問EditingControl(ComboBoxColumn中的實際DropDown),並再次提供更多選項。

你不應該需要這個,但他們是有用的知道。

0
private void ExportarDataGridViewExcel(DataGridView grd) 
    { 
     SaveFileDialog fichero = new SaveFileDialog(); 
     fichero.Filter = "Excel (*.xls)|*.xls"; 
     fichero.FileName = "export.xls"; 
     if (fichero.ShowDialog() == DialogResult.OK) 
     { 
      Microsoft.Office.Interop.Excel.Application aplicacion; 
      Microsoft.Office.Interop.Excel.Workbook libros_trabajo; 
      Microsoft.Office.Interop.Excel.Worksheet hoja_trabajo; 
      aplicacion = new Microsoft.Office.Interop.Excel.Application(); 
      libros_trabajo = aplicacion.Workbooks.Add(); 
      hoja_trabajo = 
       (Microsoft.Office.Interop.Excel.Worksheet)libros_trabajo.Worksheets.get_Item(1); 

      // changing the name of active sheet 
      hoja_trabajo.Name = "Exported from App"; 
      // storing header part in Excel 
      for (int i = 1; i < grd.Columns.Count + 1; i++) 
      { 
       hoja_trabajo.Cells[1, i] = grd.Columns[i - 1].HeaderText; 
      } 

      //Recorremos el DataGridView rellenando la hoja de trabajo 
      for (int i = 1; i < grd.Rows.Count + 1; i++) 
      { 
       for (int j = 0; j < grd.Columns.Count; j++) 
       { 
        hoja_trabajo.Cells[i + 1, j + 1] = grd.Rows[i-1].Cells[j].Value.ToString(); 
       } 
      } 
      libros_trabajo.SaveAs(fichero.FileName, 
       Microsoft.Office.Interop.Excel.XlFileFormat.xlWorkbookNormal); 
      libros_trabajo.Close(true); 
      aplicacion.Quit(); 
     } 
    } 

    //in the click event of button1 
    private void button1_Click(object sender, EventArgs e) 
    { 
     ExportarDataGridViewExcel(dataGridView1); 
    }