首页 > 解决方案 > C# Windows 窗体 Excel 数据库拉取

问题描述

好的,所以我有一个非常大/复杂的问题,请耐心等待。我正在为一家公司编写软件。它基本上将作为他们在 Excel 中的数据库的 GUI 运行。我遇到了一个我个人不知道如何解决的问题。我有一个带有文本框的 Windows 表单,工人将填写这些文本框,形成公司的每日报告。我在下面附上了我的表格的打印机。我的程序要做的是,当人输入阶段编号,然后选择焊接或法兰时,我需要代码进入我的 excel 电子表格并拉出所有法兰编号的焊接(以第二个中选择的为准)框)并将它们放入第三个框中的自动完成或下拉列表中。基本上,这将通过不允许手动输入的人为错误空间来证明公司报告的制作。我还附上了我的 excel 数据库的图片,以便您了解它是如何工作的。如果有人可以帮助我,我将不胜感激。 每日报表 GUI --- Excel 数据库

 private void textBox2_TextChanged(object sender, EventArgs e)
    {
        string phasetocheck = textBox1.Text;
        Form1 form1 = new Form1();
        string cells = Form1.filePath;
        Excel ex = new Excel(cells, 1);
        string[,] phasenumbers = ex.ReadRange(2, 2, 57400, 4);
        int j = 0;
        List<string> list = new List<string>();


        int i = 2;

        foreach (string x in phasenumbers)
        {
            if(phasetocheck.Contains(x))
            {
                list.Add(phasenumbers[4, j]);
                j++;
            }
            i++;
        }

        string[] weldnums = list.ToArray();

        textBox2.AutoCompleteCustomSource.AddRange(weldnums);

标签: c#exceldatabasevisual-studiouser-interface

解决方案


这是使用 ADO.Net 访问 Excel 数据库的示例。您需要有 Access 或 Access 运行时引擎(我相信我使用带有 32 位 .Net 的 MS Access 数据库引擎 2010 - 也应该可以使用 64 位)。

const string provider = "Microsoft.ACE.OLEDB.12.0";
const string filePath = @"C:\temp";
const string filenameTemplate = "*DataFile.xlsx";
string filename = Directory.GetFiles(filePath, filenameTemplate).First();

var cn = new OleDbConnection($"Provider={provider};Data Source={filename};Extended Properties='Excel 12.0 Xml;HDR=YES'");
cn.Open();

var cmd = new OleDbCommand();
cmd.Connection = cn;

var SheetName = "[ALL USERS WITH ACCESS$]";

cmd.CommandText = $"select * from {SheetName}";

var da = new OleDbDataAdapter(cmd);
var dt = new DataTable();

da.Fill(dt);

推荐阅读