c# - 如何使用 EPPlus 将筛选后的 DataGridView 数据保存到 Excel 中?

标签 c# excel datagridview epplus

如何使用 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 上的数据。不过我不确定。

关于c# - 如何使用 EPPlus 将筛选后的 DataGridView 数据保存到 Excel 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46440149/

相关文章:

c# - 使用 C# 对 Amazon S3 进行强类型访问

c# - Datagridview 未显示在网页中

c# - Ajax 控制工具套件时区问题

C# - 排序 datagridview 时出现问题

c# - 将同一文件从多个线程复制到多个目的地

excel - 将excel表格公式从显式单元格引用自动转换为结构化单元格引用?

c# - 使用 "ExcelDataReader"获取背景颜色

excel - 比较两个数据透视表

c# - 如何在 DataGridView 中创建 LookUp 字段?

c# - BindingSource/DataGridView 交互