【问题标题】:Microsoft Access Runtime 2013 - import from ExcelMicrosoft Access Runtime 2013 - 从 Excel 导入
【发布时间】:2014-02-27 18:51:00
【问题描述】:

我开发了一个 Access 数据库解决方案,它使用 Excel 自动化来打开 xls 和 xlsx 文件,以便我可以导入我需要的特定单元格。

现在我不得不将我的软件部署给一个没有安装 Office 或 Excel 并且使用 Runtime 的用户运行我的程序,我不能再使用自动化了。

有什么方法可以在没有 Excel 的情况下打开 Excel 文件并导入比如说单元格 B7 和单元格 E4 ?我不需要直接将它导入表中,而是对内存中 xls 的结果进行操作(就像我对 Excel 对象所做的那样)并稍后保存。

提前致谢。

【问题讨论】:

    标签: excel ms-access vba


    【解决方案1】:

    由于一些(相当严重的)限制,至少可以使用 Jet(即 Access 数据库引擎,其老化版本是标准 Windows 组件)来读取 XLS 文件。有关限制,请参见此处:

    http://support.microsoft.com/kb/257819/en-gb

    举个例子……

    Function ReadCell(XLSFileName As String, SheetName As String, CellName As String)
      Dim DB As DAO.Database, RS As DAO.Recordset
      Set DB = DBEngine.OpenDatabase(XLSFileName, False, True, "Excel 8.0;HDR=No;")
      Set RS = DB.OpenRecordset("SELECT * FROM [" + SheetName + "$" + CellName + ":" + CellName "]")
      ReadCell = RS(0)
      RS.Close
      DB.Close
    End Function
    
    Sub Foo
       MsgBox ReadCell("C:\Users\ExeBat\Documents\Test.xls", "Summary Details", "C5")
    End Sub
    

    【讨论】:

      【解决方案2】:

      我的猜测并非没有某种第 3 方库。如果文件存储为 office open XML,您可能可以将文件读取为文本,我的猜测是 MS 默认加密/混淆您的标准 xls/xlsx 文件,因此您不能。如果 Excel 在所有情况下都不能在您的用户计算机上使用,您可能需要考虑使用另一种格式(文本、csv 等)的源数据,但我知道这可能不是一个理想的答案。

      【讨论】:

      • 我也在从我的软件中导出相同的文件(我需要导入),所以我也可以将它导出为 csv 或类似的东西。
      • 回复:“我的猜测是 MS 默认加密/混淆您的标准 xls/xlsx 文件” - 不,.xlsx 文件只是使用标准 ZIP 压缩进行压缩。将 Excel 工作表另存为 .xlsx,将其重命名为 .zip,然后提取内容,您将看到 OpenXML 的所有优点。 (即便如此,自己解析这些 XML 文件还是……具有挑战性……至少可以这么说!)
      • 但是如何像使用 Excel 一样从代码中操作 CSV?这是非常实用的,因为我可以使用例如填充单元格 A1-DocumentID、A2-Date、A3-INVNumber、B2-CreatedBy... 和范围 A10-F10 填充发票项目。我以相同的方式将文件导入回来,并将 xls 中的所有内容恢复到正确的表中。我使用该文件将发票从一个位置转移到另一个位置。
      • 您将编写 vba 代码以读取文本文件,并在逗号或您选择的任何分隔符处自己进行拆分。我刚刚做了一个快速的谷歌搜索(所以我确信有更好的东西)但这里是一个读取文本文件的 vba 代码示例:stackoverflow.com/questions/10744113/… 感谢 Gord 的更正,我不知道那个 zip 会将来可能对我有用。
      猜你喜欢
      • 2019-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-25
      • 1970-01-01
      • 2012-11-24
      相关资源
      最近更新 更多