Microsoft Access Runtime 2013 - 从 Excel 导入
Posted
技术标签:
【中文标题】Microsoft Access Runtime 2013 - 从 Excel 导入【英文标题】:Microsoft Access Runtime 2013 - import from Excel 【发布时间】:2014-02-27 18:51:00 【问题描述】:我开发了一个 Access 数据库解决方案,它使用 Excel 自动化来打开 xls 和 xlsx 文件,以便我可以导入我需要的特定单元格。
现在我不得不将我的软件部署给一个没有安装 Office 或 Excel 并且使用 Runtime 的用户运行我的程序,我不能再使用自动化了。
有什么方法可以在没有 Excel 的情况下打开 Excel 文件并导入比如说单元格 B7 和单元格 E4 ?我不需要直接将它导入表中,而是对内存中 xls 的结果进行操作(就像我对 Excel 对象所做的那样)并稍后保存。
提前致谢。
【问题讨论】:
【参考方案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 代码示例:***.com/questions/10744113/… 感谢 Gord 的更正,我不知道那个 zip 会将来可能对我有用。以上是关于Microsoft Access Runtime 2013 - 从 Excel 导入的主要内容,如果未能解决你的问题,请参考以下文章
具有基于用户的安全性的 Microsoft Access 2010 (mdb) 自动化
access 2003 runtime 和 access 2003 LI 的区别
Microsoft Visual C++ Runtime Libuary
markdown Microsoft Scripting Runtime
如何找到有关 System.Runtime.InteropServices.COMException 的参考? (0x800A08FE)