如何仅将dgv中选定的行导出到excel中

本文关键字:excel 何仅 dgv | 更新日期: 2023-09-27 18:22:49

有人能帮我把dgv中只选定的行导出到excle中吗。我有下面的代码导入,搜索和导出。但不确定为什么不只导出选定的行。

private void button1_Click_1(对象发送器,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;

            /*Another way
            string constr = "Provider = MicroSoft.Jet.OLEDB.4.0; Data Source=" + textBox1.Text + "; Extended Properties ='"Excel 8.0; HDR=Yes;'";";
            OleDbConnection con = new OleDbConnection(constr);
            OleDbDataAdapter sda = new OleDbDataAdapter("Select * From [" + textBox2.Text + "$]",con);
            DataTable dt = new DataTable();
            sda.Fill(dt);
            dataGridView1.DataSource = dt; */
        }
    }
    private void label1_Click(object sender, EventArgs e)
    {
    }
    private void button2_Click_1(object sender, EventArgs e)
    {
        dataGridView1.ClearSelection();
        dataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
        try
        {
            foreach (DataGridViewRow row in dataGridView1.Rows)
            {
                if (row.Cells["Last Name"].Value.ToString().ToUpperInvariant().Contains(textBox1.Text.ToUpperInvariant()))
                {
                    dataGridView1.Rows[row.Index].Selected = true;
                }
                else
                    if (row.Cells["First Name"].Value.ToString().ToUpperInvariant().Contains(textBox1.Text.ToUpperInvariant()))
                    {
                        dataGridView1.Rows[row.Index].Selected = true;
                    }
                    else
                        if (row.Cells["Age"].Value.ToString().Equals(textBox1.Text))
                        {
                            dataGridView1.Rows[row.Index].Selected = true;
                        }
                    else
                        if (row.Cells["Vendor"].Value.ToString().ToUpperInvariant().Contains(textBox1.Text.ToUpperInvariant()))
                        {
                            dataGridView1.Rows[row.Index].Selected = true;
                        }
            }
        }
        catch (Exception)
        {
        }
    }
    private void button3_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 - 1; i++)
        {
            for (int j = 0; j < dataGridView1.Columns.Count; j++)
            {
                worksheet.Cells[i + 2, j + 1] = dataGridView1.Rows[i].Cells[j].Value.ToString();
            }
        }

        workbook.SaveAs("c:''NetProject''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();
    }

如何仅将dgv中选定的行导出到excel中

for (int i = 0; i < dataGridView1.SelectedRows.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();
    }
 }

您的循环旨在枚举选定的行,但您从所有行中获取值。将.Rows[i]更改为.SelectedRows[i]