2012-12-10 41 views
2

我有一個Delphi XE2應用程序,可以將大量數據轉儲到Excel中。Delphi可以插入Excel 2007/2010表

我們用戶的Excel 2010的用戶問是否有可能對這些數據被格式化爲即與標題行

在內置過濾器和搜索工具縱觀VBA它應該是相當簡單的

ActiveSheet.ListObjects.Add(xlSrcRange, Range("$A1:$Z$999"), , xlYes).Name = "fee" 

1)我知道的範圍要被轉換

2)兩個TExcelApplicationTExcelWorkbook列表ActiveSheet作爲可用的屬性

這裏的問題

3)這些都不然後列出ListObjects爲可用。

我假設這是因爲Delphi只支持Excel 2000或Excel 2003 nativly。那麼有沒有辦法解決這個問題?

回答

3

這是因爲德爾福只支持Excel 2000或Excel 2003中本身

1)Delphi有任何的Excel不支持原生。這一切都是通過手動調整的OCX導入完成的,您可以隨時在需要時自行導入!

德爾福菜單:組件/導入COmpionent /類型庫/ EXCEL.EXE

2),但如果你談論德爾福XE2它containsthat手工調整你

c:\RAD Studio\9.0\OCX\Servers\pas2010\Excel2010.pas並由此德爾福有3個設計 - 爲您的時間包:

  • C:\ RAD Studio在\ 9.0 \ BIN \ dcloffice 2010 160.bpl
  • C:\ RAD Studio在\ 9.0 \ BIN \ dcloffice 2K 160.bpl
  • C:\ RAD Studio在\ 9.0 \ BIN \ dcloffice xp 160.bpl
+0

謝謝。爲什麼2010年的bpl包含但未安裝?我假定支持被凍結了! –

+0

dclOffice2010中的ListObjects.Add似乎需要比VBA版本更多的參數。它需要(Source Type,Source,LinkSource,ObjectHasHeaders,Destination,TableStyleName)。我假設目的地是唯一真正新的目的地。有任何想法嗎? –

+1

因爲你需要兼容性!如果您發佈新版本,突然有一半的客戶無法再使用他們的MS Office版本 - 這會對您造成傷害。 您需要新功能 - 您明確更新庫並降低兼容性。如果你不這樣做 - 你只是保持現狀 –

2

我認爲這是因爲ActiveSheet是作爲IDispatch暴露的。你可以先強制轉換它:

var 
    w: ExcelWorksheet; 
begin 
    w := ExcelApplication1{....}.ActiveSheet as ExcelWorksheet; 
    w.ListObjects.DoAsYouWish; 

如果這確實是一個新的功能不可用在所有的,您可以同時導入新的類型庫。您可能需要先卸載包含當前TExcelApplication對象的軟件包。之後:

  • 轉到Component - >Import Component...
  • 選擇`Importy類型庫,然後單擊下一步
  • 選擇合適的類型庫,我認爲這是一個名爲Microsoft Excel 14.0 Object Library
  • 選擇要安裝該組件的調色板頁面,或者鍵入一個新的,如Office 2010
  • 選中框Generate component wrapper,這會給你一個TExcelApplication組件。
  • 單擊下一步
  • 選擇安裝到新的包,然後單擊下一步
  • 選擇一個文件名,然後鍵入包的名稱(辦公室2010)。
  • 單擊Finish

現在,您將有一個新的單元,但在這一個(我只是按照這些步驟),ActiveSheet仍然是一個IDispatch,所以你仍然需要我張貼在第一類型轉換。

+0

XE2了Office 2010支持開箱;-) –

+0

的這可能是新的功能,'ListObjects'從'ExcelXP失蹤.pas'和'Excel2000.pas' –

+0

as @ Arioch'下面提到的是隨XE2一起提供的Office2010.bpl - 它只是未安裝到軟件包列表中! –