如何从Visual Studio 2013中查询Excel中的数据?

时间:2015-04-02 13:08:28

标签: sql excel visual-studio-2013 office-automation

背景

我正在将数据从一个Excel文档doc0传输到模板化的Excel文档doc1,以加快工作流程。我唯一真正的限制是我不能修改文档的格式,所以常规VBA不是一个选项。我只能从doc0中提取数据,然后将其修改为doc1。我正在使用Visual Studio 2013这样做。

我需要做的是:

  
      
  1. 首先按照Col 1以数字方式组织doc0,然后按Col 3秒组织。然后将前10个结果放在doc1

  2. 中的特定单元格范围内   
  3. 获取分配给每个worker的作业的计数,并将该结果返回给Visual Studio。工作人员姓名列在第4栏。

  4.   

我知道如何使用SQL进行查询,但我可以使用其他可以执行相同任务的函数/语言。

问题:

  

如何查询数据以执行上述操作?

下面的链接可以看到一个简单的例子。蓝色表示doc0,红色表示结果显示在doc1中,绿色表示我需要返回到Visual Studio中相应文本框的结果。

enter image description here

1 个答案:

答案 0 :(得分:0)

有几个选择。 ADO.NET能够使用OleDB连接到您的Excel工作表,以便使用简单的查询功能读取数据。 Examples can be found in KB316934

连接到Excel文件以读取和写入数据:

连接字符串

要使用Jet OLE DB提供程序访问Excel工作簿,请使用具有以下语法的连接字符串:

  

Provider = Microsoft.Jet.OLEDB.4.0; Data Source = C:\ Book1.xls; Extended Properties =“Excel 8.0; HDR = YES;”

根据您的Excel版本,连接字符串可能略有不同。 Look them up here。例如。 2013年看起来像:

  

Provider = Microsoft.ACE.OLEDB.12.0; Data Source = c:\ myFolder \ myExcel2007file.xlsx;   扩展属性=“Excel 12.0 Xml; HDR = YES”;

读取和写入数据

  • 使用工作表名称后跟美元符号(例如,[Sheet1 $]或[My Worksheet $])。以这种方式引用的工作簿表包括工作表的整个使用范围。

      

    从[Sheet1 $]

    中选择*
  • 使用具有已定义名称的范围(例如,[MyNamedRange]):

      

    从[MyNamedRange]

    中选择*
  • 使用具有特定地址的范围(例如,[Sheet1 $ A1:B10]):

      

    从[Sheet1 $ A1:B10]

    中选择*

如果你正在使用OleDB

,写作也会在类似的情况下完成
  

INSERT INTO [Sheet1 $](F1,F2)值('111','ABC')

     

UPDATE [Sheet1 $] SET F2 ='XYZ'WHERE F1 ='111'

您可能需要创建一个临时副本,您可以从中查询数据,因为您可能正在使用不同的技术读取和写入文档。

链接的完整示例(不幸的是在VB.NET中)。

替代解决方案

如果您真的想要完全保真地访问Excel文件,而不依赖Excel存在或运行,您还可以调查:

这些软件包不支持查询,因此您需要将数据提取到对象中,并在将数据写回文件之前使用Linq-to-Objects查询/排序数据。