2

我有一个将大量数据转储到 Excel 的 Delphi XE2 应用程序。

当我们使用 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。那么有没有办法解决这个问题?

4

2 回答 2

3

这是因为 Delphi 本身只支持 Excel 2000 或 Excel 2003

1) Delphi 本身不支持任何 Excel。这一切都是通过手动调整的 OCX 导入完成的,您可以随时进行自己的导入!

Delphi 菜单:Component / Import COMpionent / Type Library / excel.exe

2) 但如果您谈论 Delphi XE2,它包含c:\RAD Studio\9.0\OCX\Servers\pas2010\Excel2010.pas为您手动调整的内容

因此,Delphi 为您提供了 3 个设计时包:

  • c:\RAD Studio\9.0\bin\dcloffice 2010160.bpl
  • c:\RAD Studio\9.0\bin\dcloffice 2K160.bpl
  • c:\RAD Studio\9.0\bin\dcloffice xp160.bpl
于 2012-12-10T13:06:20.800 回答
2

我认为那是因为 ActiveSheet 是作为 IDispatch 公开的。您可以先进行类型转换:

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

如果这确实是一个根本不可用的新特性,你可以导入一个更新的类型库。您可能需要先卸载包含当前 TExcelApplication 对象的包。之后:

  • 转到Component->Import Component...
  • 选择“导入类型库”并单击“下一步”
  • 选择正确的类型库,我认为它被命名为Microsoft Excel 14.0 Object Library.
  • 选择要安装组件的调色板页面,或键入一个新页面,例如 Office 2010
  • 选中该框Generate component wrapper,它将为您提供一个 TExcelApplication 组件。
  • 点击下一步
  • 选择安装到新包中,然后单击下一步
  • 选择文件名并键入程序包名称 (Office 2010)。
  • 点击完成

您现在将拥有一个新单元,但在这个单元中(我只是按照这些步骤操作),ActiveSheet 仍然是一个 IDispatch,因此您仍然需要我最初发布的类型转换。

于 2012-12-10T10:32:32.337 回答