【问题标题】:How can I create a ComboBox dropdown List that shows Excel Sheets names which I can select?如何创建一个组合框下拉列表,其中显示我可以选择的 Excel 表格名称?
【发布时间】:2020-06-24 08:53:42
【问题描述】:

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

但是我是 C# 的绝对新手,所以我一直被卡住了很多。无论如何,你们中的任何人都知道如何制作一个 ComboBox 下拉列表,您可以从中选择您想要查看的 Excel 表格并将其显示在 Gridview 中吗?

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

这是应用程序目前的样子:

这是代码:

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;
            }
        }
    }
}

【问题讨论】:

  • 你卡在哪里了,你目前的问题是什么?也许这可以帮助你:stackoverflow.com/a/1165281/13687491
  • 所以我希望能够单击组合框中的下拉菜单并选择我想要的 excel 文件的工作表。但是我不知道这个代码。
  • 由于您使用 OleDb 来查询 Excel 工作表,这些答案应该会有所帮助:stackoverflow.com/questions/1164698/…
  • 我没有使用将 Excel 位置硬编码到其中的代码,因为该应用程序的工作方式如下:您可以“浏览”并选择所需的任何 Excel 文件,它将显示路径textBox1 中的文件。并且“浏览”您想要的任何 Access 数据库,它将在 textBox2 中显示该路径。所以我需要一种方法让它动态地知道位置。希望这可以澄清有关我在寻找什么的任何问题。
  • 首先我认为您应该编辑所有控件的名称。例如,对于按钮的名称应该像 btnDoSomething,这样你的代码会更容易理解。 (已生成事件的方法,尝试右键单击方法名称,选择重命名,然后编辑为 btnDoSomething_Click - 我使用的是 Visual Studio 2017)

标签: c# excel winforms combobox


【解决方案1】:

根据您的描述,您希望创建一个显示 Excel 表格名称的 ComboBox。

你可以试试下面的代码。

 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;

测试结果:

至于将datatable加入access数据库,我建议你需要先在表中创建表。然后,您可以使用以下链接添加数据。

Insert dataset records in database

【讨论】:

    【解决方案2】:

    此要求不适合新手编程 - 恕我直言...... SQL 数据库 - Access 或其他品牌 - 具有固定的表定义,因此“打开任何 excel”意味着各种结构化数据。所以这确实是一个很难克服的冲突——虽然不是不可能,但非常复杂。

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

    【讨论】:

      猜你喜欢
      • 2011-01-28
      • 1970-01-01
      • 2011-05-16
      • 2011-06-11
      • 2016-11-01
      • 1970-01-01
      • 2012-07-21
      • 2016-08-18
      • 1970-01-01
      相关资源
      最近更新 更多