2013-07-05 45 views
-2

如何从dgv中将选定的行导出到excel中?以下是我的代码,用于导入excel并查找值。如何只将选定的行从datagridview导出到excel中?

private void button1_Click(object sender, EventArgs e) 
    { 

     OpenFileDialog openFileDialog1 = new OpenFileDialog(); 
     if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK) 
     {    
      //this.textBox1.Text = openFileDialog1.FileName; 


      //string PathConn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + textBox1.Text + ";Extended Properties=\"Excel 8.0;HDR=Yes:\";"; 
      String PathConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + openFileDialog1.FileName + ";Extended Properties=\"Excel 12.0 XML;HDR=Yes:\";";       
      OleDbConnection conn = new OleDbConnection(PathConn); 
      OleDbDataAdapter myDataAdapter = new OleDbDataAdapter("Select * from [sheet1$]", conn); 
      DataTable dt = new DataTable(); 
      myDataAdapter.Fill(dt); 
      dataGridView1.DataSource = dt; 

     } 
    } 


    private void button2_Click(object sender, EventArgs e) 
    { 
     dataGridView1.ClearSelection(); 
     dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect; 
     try 
     {   
      foreach (DataGridViewRow row in dataGridView1.Rows) 
      { 
       if (row.Cells["Name"].Value.ToString().ToUpperInvariant().Contains(textBox1.Text.ToUpperInvariant())) 
       { 
        dataGridView1.Rows[row.Index].Selected = true;       
       } 

      } 

     } 
     catch (Exception) 
     { 

     } 
    } 
+0

是你的问题才刚刚选定的行,或者您的问题导出到Excel? – VahidNaderi

+0

上面的代码对于选择行很好,但我需要输出到excel的代码(只有选中)。 – Pravii

回答

0

我假设你知道如何导出数据表到Excel(可以使用现有的库,例如阅读Aspose细胞或使用互操作),所以我只是写的代码,用于创建数据表:

private DataTable CreateDataTableFromSelectedRows() 
{ 
    var dtToExport = new DataTable(); 
    foreach(DataGridViewRow row in dataGridView1.SelectedRows) 
    { 
     var dr = row.DataBoundItem as DataRow; 
     dtToExport.ImportRow(dr); 
    } 
    return dtToExport; 
} 

如果你使用Aspose cells它只会成为:使用导出代码

private void btnExportSelectedRows(object sender, EventArgs e) 
{ 
     string filePath = "C:\\test.xlsx"; 
     Aspose.Cells.Workbook wb = new Aspose.Cells.Workbook(); 
     wb.FileFormat = Aspose.Cells.FileFormatType.Xlsx; 

     Worksheet sheet = wb.Worksheets[0]; 

     DataTable dt = CreateDataTableFromSelectedRows(); 
     sheet.Cells.ImportDataTable(dt, true, "A1"); 
     wb.Save(filePath); 
} 

但是通过你提供这一切变成: (我删除现有评论代码为简洁)

private void button1_Click_1(object sender, EventArgs e) 
{ 
    Microsoft.Office.Interop.Excel._Application app = new Microsoft.Office.Interop.Excel.Application(); 
    Microsoft.Office.Interop.Excel._Workbook workbook = app.Workbooks.Add(Type.Missing); 
    Microsoft.Office.Interop.Excel._Worksheet worksheet = null;     
    app.Visible = true; 
    worksheet = workbook.Sheets["Sheet1"]; 
    worksheet = workbook.ActiveSheet; 
    worksheet.Name = "Exported from gridview"; 
    for(int i=1;i<dataGridView1.Columns.Count+1;i++) 
    { 
     worksheet.Cells[1, i] = dataGridView1.Columns[i-1].HeaderText; 
    } 

    // It's the part which we are interested in 
    // we just need to change dataGridView1.Rows to dataGridView1.SelectedRows 
    for (int i=0; i < dataGridView1.SelectedRows.Count ; i++) 
    { 
     for(int j=0;j<dataGridView1.Columns.Count;j++) 
     { 
      worksheet.Cells[i + 2, j + 1] = dataGridView1.SelectedRows[i].Cells[j].Value.ToString(); 
     } 
    } 

    workbook.SaveAs("c:\\output.xls",Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlExclusive , Type.Missing, Type.Missing, Type.Missing, Type.Missing); 

    app.Quit(); 
} 

我想它会做的伎俩。

+0

你能不能也提供代码出口dgv excel包括你的上面的代码。对不起,我是这个领域的新手。 – Pravii

+0

我已经将dgv导出到excel的代码,但它不会导出选定的行。如果你想要我会提供给你。谢谢你。 – Pravii

+0

我认为这节省了我们的时间,所以请提供该代码。 – VahidNaderi

0

请参见下面的代码导出到Excel:

private void button1_Click_1(object sender, EventArgs e) 
    { 

     // creating Excel Application 
     Microsoft.Office.Interop.Excel._Application app = new Microsoft.Office.Interop.Excel.Application(); 


     // creating new WorkBook within Excel application 
     Microsoft.Office.Interop.Excel._Workbook workbook = app.Workbooks.Add(Type.Missing); 


     // creating new Excelsheet in workbook 
     Microsoft.Office.Interop.Excel._Worksheet worksheet = null;     

     // see the excel sheet behind the program 
     app.Visible = true; 

     // get the reference of first sheet. By default its name is Sheet1. 
     // store its reference to worksheet 
     worksheet = workbook.Sheets["Sheet1"]; 
     worksheet = workbook.ActiveSheet; 

     // changing the name of active sheet 
     worksheet.Name = "Exported from gridview"; 


     // storing header part in Excel 
     for(int i=1;i<dataGridView1.Columns.Count+1;i++) 
     { 
      worksheet.Cells[1, i] = dataGridView1.Columns[i-1].HeaderText; 
     } 


     // storing Each row and column value to Excel sheet 
     for (int i=0; i < dataGridView1.Rows.Count-1 ; i++) 
     { 
      for(int j=0;j<dataGridView1.Columns.Count;j++) 
      { 
       worksheet.Cells[i + 2, j + 1] = dataGridView1.Rows[i].Cells[j].Value.ToString(); 
      } 
     } 


     // save the application 
     workbook.SaveAs("c:\\output.xls",Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlExclusive , Type.Missing, Type.Missing, Type.Missing, Type.Missing); 

     // Exit from the application 
     app.Quit(); 
    } 
相关问题