C# 使用后期绑定(bind)读取 Excel

标签 c# linq excel .net-4.0

嗨 我以前没有使用过后期绑定(bind),但它似乎是解决方案,如果我能找到一个简洁的例子就好了!

或者这可能不是解决方案,但我相信你们会知道的!

我需要填写一个下拉组合框列表,从 excel 中的一列向下读到第一个空白单元格。该解决方案需要使用 excel 2003 及更高版本一些 PC 从未安装过 2003,仅安装 office 2010 其他已从 2003 升级,有些仍在 2003 上!

我需要一个解决上述所有问题的解决方案。

所以我正在研究后期绑定(bind),这是正确的方法吗? Linq 会有帮助吗?

它是一个使用 .Net 4 的经典 Windows 窗体应用程序。

我想我会写一个方法来获取文件名和路径并返回一个列表,然后我将其分配给组合框。

但作为新手我还没有通过!

请提供任何帮助/示例

最佳答案

听起来您正在考虑将 COM 互操作/自动化与安装在客户端计算机上的 Excel 应用程序结合使用。

如果您唯一的要求是从 Excel 文件中提取数据,那么最好使用可以简单地从文件本身读取数据的库,而不是在后台启动 Excel 进程。

它更快、更干净且更易于测试。

我用过 NPOI对于 .xls 文件(当然还有其他文件),并且 .xlsx 文件有很多选项。 This SO question是关于创建文件的,但是任何建议的库当然也可以读取文件。

我唯一一次使用 COM 自动化是与正在运行的 Excel 实例进行交互。

编辑(回应评论)

下面是一个将 B 列的值作为字符串获取的示例:

using System;
using System.IO;
using NPOI.HSSF.UserModel;
using NPOI.SS.UserModel;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            var stream = new FileStream(@"c:\my_workbook.xls", FileMode.Open);
            var workbook = new HSSFWorkbook(stream);
            stream.Close();

            var sheet = workbook.GetSheet("My Sheet Name");
            var row_enumerator = sheet.GetRowEnumerator();

            while (row_enumerator.MoveNext())
            {
                var row = (Row)row_enumerator.Current;
                var cell = row.GetCell(1); // in Excel, indexes are 1-based; in NPOI the indexes are 0-based
                Console.WriteLine(cell.StringCellValue);
            }

            Console.ReadKey();
        }
    }
}

关于C# 使用后期绑定(bind)读取 Excel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4475013/

相关文章:

vb.net - 使用 linq 而不是 foreach 更新列表

excel - PHPSpreadsheet 无法设置工作表边距

c# - 在 Azure 表存储中筛选日期时间字段时出现异常

c# - 通过反射获取继承类的所有单例

c# - 如何使用 MongoDB C# Driver Aggregate 获取 2 个字段上具有特定值的最新项目?

c# - LINQ查询题,需要加入

Excel VBA 嵌套字典 - 访问项目

excel - 如何使用条件格式或 VBA 根据行中的颜色为单元格着色

c# - 如何检查应用程序是否从\program files\运行

c# - 从 Azure DevOps 发布管道部署时,从 Visual Studio 发布的 ASP.NET Core 3.1 Web 应用程序不起作用