C#使用后期绑定读取Excel

时间:2010-12-17 21:46:57

标签: c# linq excel .net-4.0

您好   我以前没有使用过后期绑定,但它似乎是解决方案,只要我能找到一个简洁的例子!

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

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

我需要一个适用于以上所有方案的解决方案。

所以我正在研究后期绑定这是正确的方法吗? Linq会帮忙吗??

它是一个使用.Net 4的clasic windows Form应用程序。

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

但是新的我没有通过去!

任何帮助/示例请

1 个答案:

答案 0 :(得分:6)

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

如果您唯一的要求是从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();
        }
    }
}