【问题标题】:How can I search through an Excel sheet in a C# GUI?如何在 C# GUI 中搜索 Excel 工作表?
【发布时间】:2020-09-19 01:55:24
【问题描述】:

我有这个代码

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 框架中创建了一个 GUI,它允许您上传 .xls 或 .xlsx,Excel 文件将显示为 DataGrid 视图。我实现了一个新的文本框( textBox1_TextChanged(object sender, EventArgs e) 方法),并根据用户的输入,我希望它只显示与输入对应的行。我该怎么做?提前致谢!

【问题讨论】:

    标签: c# .net excel user-interface


    【解决方案1】:

    您有 3 个选项来处理办公格式:

    • 如果您只需要支持新格式 (.xslx),您可以使用 OpenXML SDK,这是人们为其编写的任何包装器。甚至是 ZipArchive 和 XMLReader 类。它众所周知且易于处理
    • 如果您还需要支持旧格式 (.xls),则必须使用 (t)rusty Office COM 互操作。那个有 COM 互操作的常见问题,以及一些独特的问题。就像由于糟糕的设计选择而需要交互式会话一样。
    • 对于任何给定的问题、任何给定的文件格式、任何给定的 GUI 技术,都可能有另一种方法。但这两者之间的差距很小

    我的一贯建议是使用 OpenXML 方式并学会完全摆脱旧格式。支持它们要麻烦得多。

    【讨论】:

    • 嘿!感谢您的建议,但不幸的是我只能使用 C# :(。没有办法完成该方法以使其工作吗?
    • OpenXML 是一个 nuget 包,你可以在这里找到它:nuget.org/packages/DocumentFormat.OpenXml
    • @Cristian25 旧格式是专有的东西,文档很差,在使用它们时会导致所有问题。使用新格式?只是重命名的 .zip 容器中的 .xml 文件。 | ZipArchive 允许您“在内存中解压”或“像文件夹一样对待”任何 .zip 文件:docs.microsoft.com/en-us/dotnet/api/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多