2017-09-27 9 views
1

EPPlusを使用してDataGridViewのフィルタリングされたデータをExcelにインポートするにはどうすればよいですか? どこから始めたらいいか分からず、私の問題に似たものは見つかりませんでした。フィルタリングされたDataGridViewデータをEPPlusを使用してExcelに保存するにはどうすればよいですか?

これは私のボタンを救うためのコードです:

SaveFileDialog saveFileDialog1 = new SaveFileDialog(); 
using (MySqlConnection con = new MySqlConnection(connectionString)) 
{ 
    using (MySqlCommand cmd = new MySqlCommand("SELECT * FROM statusrouted.routed", con)) 
    { 
     cmd.CommandType = CommandType.Text; 
     using (MySqlDataAdapter sda = new MySqlDataAdapter(cmd)) 
     { 
      using (DataTable dt = new DataTable()) 
      { 
       using (ExcelPackage pck = new ExcelPackage()) 
       { 
        sda.Fill(dt); 


        ExcelWorksheet ws = pck.Workbook.Worksheets.Add(DateTime.Today.ToString("MMMM-yyyy")); 

        ws.Cells["A2"].LoadFromDataTable(dt, true); 


        saveFileDialog1.Title = "Save as Excel"; 
        saveFileDialog1.FileName = ""; 
        saveFileDialog1.Filter = "Excel files(2007)|*.xlsx"; 

        if (saveFileDialog1.ShowDialog() != DialogResult.Cancel) 
        { 
         try 
         { 
          pck.SaveAs(new FileInfo(@"" + saveFileDialog1.FileName)); 
          recentsToolStripMenuItem1.AddRecentItem(@"" + saveFileDialog1.FileName); 
         } 
         catch (Exception) 
         { 
          DialogResult reminder = MessageBox.Show("Cannot save file, file opened in another program.\nClose it first! ", "Save Failed", MessageBoxButtons.OK); 
         } 
        } 
       } 
      } 
     } 
    } 
} 

これはtextbox_textchangedイベントでの私のフィルターのためのコードです: これが重要である場合、私は知りません。

DataView DV = new DataView(dt); 
string oks; 
if (comboBox1.SelectedIndex == 0) 
{ 
    oks = "ffrom"; 
} 
else if (comboBox1.SelectedIndex == 1) 
{ 
    oks = "office"; 
} 
else if (comboBox1.SelectedIndex == 2) 
{ 
    oks = "code"; 
} 

else 
{ 
    if (comboBox1.SelectedIndex == 3) 
    { 
     oks = "datein"; 
    } 
    else 
    { 
     oks = "dateout"; 
    } 
} 

DV.RowFilter = string.Format(oks+ " LIKE '%{0}%'", textBox5.Text); 
this.dataGridView1.DataSource = DV; 
dataGridView1.ClearSelection(); 
+0

これが見つかりました:[リンク](https://stackoverflow.com/questions/18126940/get-datatable-from-datagridview-respecting-filters-and-sorting)私のコードに合わせて変換しようとしましたが動作しませんでした –

答えて

1

見つけました!私はそれが働いたか本当にわからないが、私は(this.maindgv.DataSource as DataTable).DefaultView.ToTable()がデータである一方、dtは、データがDataGridViewにロードされているので、それはだと思う

ws.Cells["A2"].LoadFromDataTable((this.maindgv.DataSource as DataTable).DefaultView.ToTable(), true); 

:これまで

ws.Cells["A2"].LoadFromDataTable(dt, true); 

:私はちょうどこれを変更します現在はDataGridViewに示されています。私は確信していません。

+0

データに関するあなたの仮定は正しいです。それは私の答えの主なポイントは、 'DataTable'を渡すと、DataView.ToTable()を渡している間にすべてのデータをExcelにエクスポートすると、すべてのフィルタリング後のデータがエクスポートされるということでした。もしExcelPackageの代わりに 'ClosedXML'を使うことについての余分な細部の中で、それが失われてしまって、ごめんなさい。 – OhBeWise

関連する問題