2014-02-27 92 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