【问题标题】:Can Delphi insert Excel 2007/2010 tableDelphi可以插入Excel 2007/2010表格吗
【发布时间】:2012-12-10 10:16:50
【问题描述】:

我有一个将大量数据转储到 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。那么有什么办法解决这个问题吗?

【问题讨论】:

    标签: delphi vba delphi-xe2 excel-2010


    【解决方案1】:

    这是因为 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\dcloffice2010160.bpl
    • c:\RAD Studio\9.0\bin\dcloffice2K160.bpl
    • c:\RAD Studio\9.0\bin\dclofficexp160.bpl

    【讨论】:

    • 谢谢。为什么包含 2010 bpl 但未安装?我以为支持被冻结了!
    • dclOffice2010 中的 ListObjects.Add 似乎需要比 VBA 版本更多的参数。它需要(Source Type、Source、LinkSource、ObjectHasHeaders、Destination、TableStyleName)。我假设 Destination 是唯一真正新的。有什么想法吗?
    • 因为你需要兼容性!如果您发布新版本,突然间一半的客户无法再使用他们的 MS Office 版本 - 那会伤害您。您需要新功能 - 您明确更新库并降低兼容性。如果你不这样做 - 你只是保持现状
    • 除了阅读 Office 2010 中的 VBA 帮助外没有其他想法。通常大多数参数都可以填充默认存根值,如 nil 或 CURRENT_LOCALE 等
    • 在这里找到了我需要的东西:msdn.microsoft.com/en-us/library/office/…。大部分为空参数
    【解决方案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,因此您仍然需要我最初发布的类型转换。

    【讨论】:

    • XE2 具有开箱即用的 Office 2010 支持 ;-)
    • 这可能是新功能,ExcelXP.pasExcel2000.pas 中缺少 ListObjects
    • as @Arioch'下面提到了 XE2 附带的 Office2010.bpl - 它只是没有安装到包列表中!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-23
    • 2012-01-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多