如何创建一个 ComboBox 下拉列表,显示 Excel 我可以 select 的工作表名称?

How can I create a ComboBox dropdown List that shows Excel Sheets names which I can select?

所以我一直在开发一个应用程序,它可以打开您想要的任何 Excel 文件,并且可以将数据发送到您想要的任何 Microsoft Access 数据库。

但我是 C# 的绝对新手,所以我经常遇到困难。不管怎样,你们这些可爱的小伙子或小伙子们有没有人知道如何制作一个组合框下拉列表,您可以从中 select Excel Sheet 您想要查看的内容并将其显示在 Gridview 中?

既然我在寻求帮助,不妨问问我如何制作:发送到数据库按钮实际上将 Excel Sheet 的数据发送到数据库?

应用程序目前的样子:

这是代码:

using System;
using System.Data;
using System.Data.OleDb;
using System.Windows.Forms;

namespace Data_Importer
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        //Buttons
        private void button1_Click(object sender, EventArgs e) //button Browse 1
        {
            OpenFileDialog openFileDialog1 = new OpenFileDialog();
            if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                this.textBox1.Text = openFileDialog1.FileName;
            }
        }

        private void button2_Click(object sender, EventArgs e) //button Run
        {
            string PathConn = "Provider = Microsoft.Jet.OLEDB.4.0; Data Source =" + textBox1.Text + ";Extended Properties=\"Excel 8.0;HDR=Yes;\";";
            OleDbConnection conn = new OleDbConnection(PathConn);

            var sqlQuery = "Select * from [Sheet1$]";
            OleDbDataAdapter myDataAdapter = new OleDbDataAdapter(sqlQuery, conn);
            DataTable dt = new DataTable();

            myDataAdapter.Fill(dt);
            dataGridView1.DataSource = dt;
        }

        private void button3_Click(object sender, EventArgs e) //button Browse 2
        {
            OpenFileDialog openFileDialog1 = new OpenFileDialog();
            if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                this.textBox2.Text = openFileDialog1.FileName;
            }
        }
    }
}

根据您的描述,您想要创建一个显示 Excel 工作表名称的组合框。

您可以试试下面的代码。

 public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        Excel.Application app = new Excel.Application();
        Excel.Workbook workbook = null;
        private void btnbrowser_Click(object sender, EventArgs e)
        {
            OpenFileDialog openFileDialog1 = new OpenFileDialog();
            if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                this.textBox1.Text = openFileDialog1.FileName;
            }
            workbook = app.Workbooks.Open(textBox1.Text);
            foreach (Excel.Worksheet sheet in workbook.Worksheets)
            {
                comboBox1.Items.Add(sheet.Name);
            }
            app.Workbooks.Close();
            app.Quit();
        }

        private void btnRun_Click(object sender, EventArgs e)
        {
            string PathConn = "Provider = Microsoft.ACE.OLEDB.12.0; Data Source =" + textBox1.Text + ";Extended Properties=\"Excel 12.0 Xml;HDR=Yes;IMEX=1\"";
            OleDbConnection conn = new OleDbConnection(PathConn);

            var sqlQuery = string.Format("Select * from [{0}$]",comboBox1.SelectedItem.ToString());
            OleDbDataAdapter myDataAdapter = new OleDbDataAdapter(sqlQuery, conn);
            DataSet set = new DataSet();

            myDataAdapter.Fill(set);
            dataGridView1.DataSource = set.Tables[0];
        }

        private void btnBrow_Click(object sender, EventArgs e)
        {
            OpenFileDialog openFileDialog1 = new OpenFileDialog();
            if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                this.textBox2.Text = openFileDialog1.FileName;
            }
        }
       
        
    }

此外,请安装nuget包Microsoft.Office.Interop.Excel;并使用以下代码来使用它。 使用 Excel = Microsoft.Office.Interop.Excel;

测试结果:

关于将数据table添加到access数据库,我建议你先在table中创建table。然后,你可以使用下面的link来添加数据。

Insert dataset records in database

此要求不适用于新手编程 - 恕我直言......SQL 数据库 - Access 或其他品牌 - 已修复 table 定义,以便“打开任何 excel”表示各种各样的结构化数据。所以这真的是一个很难克服的冲突——虽然不是不可能,但非常复杂。

可能更好的方法是将 excel 数据写入 NoSQL 数据库,例如 MongoDB,根据定义,它具有灵活的架构。