如何在C#GUI中搜索Excel工作表?

如何在C#GUI中搜索Excel工作表?,c#,.net,excel,user-interface,C#,.net,Excel,User Interface,我有这个密码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace T

我有这个密码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

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

        private void cboSheet_SelectedIndexChanged(object sender, EventArgs e)
        {
            DataTable dt = tableCollection[cboSheet.SelectedItem.ToString()];
            dataGridView1.DataSource = dt;
        }

        DataTableCollection tableCollection;

        private void btnBrowse_Click(object sender, EventArgs e)
        {
            using(OpenFileDialog openFileDialog=new OpenFileDialog() { Filter="Excel|*.xls|Excel|*.xlsx" })
            {
                if(openFileDialog.ShowDialog()==DialogResult.OK)
                {
                    txtFilename.Text = openFileDialog.FileName;
                    using(var stream=File.Open(openFileDialog.FileName, FileMode.Open, FileAccess.Read))
                    {
                        using (IExcelDataReader reader = ExcelReaderFactory.CreateReader(stream))
                        {
                            DataSet result = reader.AsDataSet(new ExcelDataSetConfiguration()
                            {
                                ConfigureDataTable=(_)=>new ExcelDataTableConfiguration() { UseHeaderRow=true }
                            });
                            tableCollection = result.Tables;
                            cboSheet.Items.Clear();
                            foreach (DataTable table in tableCollection)
                                cboSheet.Items.Add(table.TableName);
                        }
                    }
                }
            }
        }

        private void textBox1_TextChanged(object sender, EventArgs e)
        {


        }
    }
}

该代码在.NET framework中创建了一个GUI,允许您上载.xls或.xlsx,Excel文件将显示为DataGrid视图。我实现了一个新的textbox(textBox1_TextChanged(objectsender,EventArgs e)方法),基于用户的输入,我希望它只显示与输入相对应的行。我该怎么做?提前谢谢

使用office格式有3个选项:

  • 如果您只需要支持新格式(.xslx),则可以使用为其编写的任何包装器。甚至ZipArchive和XMLReader类。这是众所周知的,易于加工
  • 如果还需要支持旧格式(.xls),则必须使用(t)生锈的Office COM互操作。那一个通常有COM互操作的问题,加上一些独特的问题。比如,由于设计选择不当,需要进行交互式会话
  • 对于任何给定的问题、任何给定的文件格式、任何给定的GUI技术,都可能有另一种方法。但这两者之间的差距很小

我的长期建议是使用OpenXML方式,学会完全脱离旧格式。支持它们比支持它要麻烦得多。

嘿!谢谢你的建议,但不幸的是我只能用C:(.难道没有办法完成该方法以使其工作吗?OpenXML是一个nuget软件包,您可以在这里找到:@Cristian25旧格式,是文档质量差的专有格式,这导致了使用它们时的所有问题。使用新格式?只需重命名.zip容器中的.xml文件。| ZipArchive允许您“在内存中解包”或“像文件夹一样对待”存在的任何.zip文件: