【问题标题】:C# Windows-Form Excel Database PullC# Windows 窗体 Excel 数据库拉取
【发布时间】:2019-07-13 11:01:19
【问题描述】:

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

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

【问题讨论】:

  • 发布您的代码,我们将尽力帮助您解决问题。附带说明:Excel 是电子表格,而不是数据库。
  • 我知道这不是一个数据库,但是这家公司用它来跟踪他们的记录。
  • 他们是否可能会在您的程序运行时更改 Excel?如果没有,我建议使用 ADO.Net 并像查询数据库中的表一样查询工作表,这样会容易得多。
  • @NetMage 不,Excel 文件是静态的。 ado.net 是如何工作的?
  • 我用示例代码添加了答案。它确实需要在客户端 PC 上安装来自 Microsoft 的软件。

标签: c# excel database visual-studio user-interface


【解决方案1】:

这是一个使用 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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多