Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi能否插入Excel 2007/2010表格_Delphi_Vba_Delphi Xe2_Excel 2010 - Fatal编程技术网

Delphi能否插入Excel 2007/2010表格

Delphi能否插入Excel 2007/2010表格,delphi,vba,delphi-xe2,excel-2010,Delphi,Vba,Delphi Xe2,Excel 2010,我有一个DelphiXe2应用程序,它将大量数据转储到Excel中 当我们使用Excel 2010时,用户询问是否可以将该数据格式化为表格,即使用标题行中的内置过滤器和搜索工具 从VBA来看,它应该相当简单 ActiveSheet.ListObjects.Add(xlSrcRange, Range("$A1:$Z$999"), , xlYes).Name = "fee" 1) 我知道要转换的范围 2) TExcelApplication和TExcelWorkbook都将ActiveSheet列

我有一个DelphiXe2应用程序,它将大量数据转储到Excel中

当我们使用Excel 2010时,用户询问是否可以将该数据格式化为表格,即使用标题行中的内置过滤器和搜索工具

从VBA来看,它应该相当简单

ActiveSheet.ListObjects.Add(xlSrcRange, Range("$A1:$Z$999"), , xlYes).Name = "fee"
1) 我知道要转换的范围

2) TExcelApplicationTExcelWorkbook都将ActiveSheet列为可用属性

问题出在这里

3) 然后,这两个列表都不会列出可用的对象


我假设这是因为Delphi本机只支持Excel2000或Excel2003。有什么办法可以解决这个问题吗?

我认为这是因为ActiveSheet是作为IDispatch公开的。您可以先键入:

var
  w: ExcelWorksheet;
begin
  w := ExcelApplication1{....}.ActiveSheet as ExcelWorksheet;
  w.ListObjects.DoAsYouWish;
如果这确实是一个根本不可用的新功能,您可以导入一个更新的类型库。您可能希望首先卸载包含当前TExcelApplication对象的包。之后:

  • 转到
    组件
    ->
    导入组件…
  • 选择“导入类型库”,然后单击“下一步”
  • 选择正确的类型库,我认为它的名称为
    MicrosoftExcel14.0ObjectLibrary
  • 选择要安装组件的调色板页面,或键入新页面,如Office 2010
  • 选中框
    generatecomponentwrapper
    ,它将为您提供一个TExcelApplication组件
  • 单击下一步
  • 选择“安装到新软件包中”,然后单击“下一步”
  • 选择文件名并键入包名(Office 2010)
  • 单击“完成”
现在您将拥有一个新的单元,但在这个单元中(我只是按照这些步骤),ActiveSheet仍然是一个IDispatch,因此您仍然需要我最初发布的类型转换

这是因为Delphi本机仅支持Excel2000或Excel2003

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

Delphi菜单:组件/导入组件/类型库/excel.exe

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

因此,Delphi为您提供了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

XE2具有现成的Office 2010支持;-)这可能是一项新功能,
ExcelXP.pas
Excel2000.pas
中缺少了
ListObjects
作为@Arioch',下面提到的是XE2附带的Office2010.bpl-它只是没有安装到包列表中!谢谢你。为什么2010年的bpl包括但没有安装?我以为支持被冻结了!与VBA版本相比,加载项dclOffice2010似乎需要更多的参数。它需要(源类型、源、链接源、ObjectHashHeaders、目标、表样式名)。我认为目的地是唯一真正的新目的地。有什么想法吗?因为你需要兼容性!如果你发布了新版本,突然有一半的客户无法再使用他们版本的MS Office,这会伤害你。您需要新功能—显式更新库并降低兼容性。如果您不这样做-您只需留下状态quoNo的想法,除了阅读Office 2010中的VBA帮助。通常,大多数参数都可以用默认存根值填充,比如nil或CURRENT_LOCALE,或者类似我在这里需要的内容:。大部分是空的