如何使用EPPlus将过滤的DataGridView数据保存到Excel中?
问题描述:
如何使用EPPlus将过滤的数据从DataGridView
导入到Excel中? 我不知道从哪里开始,我还没有发现任何类似于我的问题。如何使用EPPlus将过滤的DataGridView数据保存到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();
答
找到了!我只是改变了这一点:
ws.Cells["A2"].LoadFromDataTable(dt, true);
这样:
ws.Cells["A2"].LoadFromDataTable((this.maindgv.DataSource as DataTable).DefaultView.ToTable(), true);
我真的不知道它是如何工作的,但我认为这是因为dt
是被装载到DataGridView
而(this.maindgv.DataSource as DataTable).DefaultView.ToTable()
的数据是数据目前显示在DataGridView
。虽然我不确定。
+0
您对数据的假设是正确的。这是我的答案的主要观点,即通过'DataTable'将所有数据导出到Excel,同时传递'DataView.ToTable()'导出所有经过滤后的数据。对不起,如果在使用'ClosedXML'而不是'ExcelPackage'的所有额外细节中丢失了。 – OhBeWise
发现这个:[链接](https://stackoverflow.com/questions/18126940/get-datatable-from-datagridview-respecting-filters-and-sorting)试图转换它以适应我的代码,没有工作 –