2014-02-27 58 views
0

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

现在我必须将我的软件部署到没有安装Office和Excel的用户,并且正在使用Runtime运行我的程序,我不能再使用自动化。

有什么办法可以打开Excel文件没有Excel和导入让我们说单元格B7和单元格E4?我不需要将它直接导入到表中,而是使用xls在内存中的结果进行操作(就像我对Excel对象所做的那样),然后再保存它。

在此先感谢。

回答

0

我的猜测并非没有某种第三方库。如果将文件存储为办公开放式XML,可能会将文件读取为文本,但我的猜测是默认情况下MS会默认加密/模糊您的标准xls/xlsx文件,所以您不能。如果Excel在所有情况下都不在您的用户机器上,您可能需要考虑以其他格式(文本,csv等)获取源数据,但我知道这可能不是理想的答案。

+0

我也从我的软件出口相同的文件(即我需要进口),所以我也可以出口它作为csv或类似的东西。 –

+1

回复:“我的猜测是MS默认加密/模糊您的标准xls/xlsx文件” - 不,.xlsx文件仅使用标准ZIP压缩进行压缩。将Excel工作表保存为.xlsx,将其重命名为.zip,然后提取内容,您将看到所有OpenXML的优点。 (即便如此,自己解析这些XML文件将会......挑战......至少可以说!) –

+0

但是,如何像Excel一样操作代码中的CSV?这非常实用,因为我可以使用填充单元格A1-DocumentID,A2-Date,A3-INVNumber,B2-CreatedBy ...和范围A10-F10填写发票项目。我以相同的方式重新导入文件,并将xls中的所有内容都恢复到正确的表格。我使用该文件将发票从一个地点转移到另一个地点。 –

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