将应用程序数据导出到 excel 对某些用户有效,但对其他用户无效

Exporting application data to excel works for some users but not others

我有一个遗留应用程序 (Delphi 5),允许用户将数据导出到 excel。据我所知,此应用程序适用于 Office 2013 之前的所有用户。我们最近开始推出 Office 365/2013 - 在获得 O365 之后,一些用户不再能够将数据导出到 Excel。据我们所知,对于这些用户,什么都没有发生(Excel 没有获得焦点,没有新的工作表/选项卡被添加到现有实例,Excel 如果不是运行).其他已经拿到O365的用户,好像应用没有问题。

几个月前,我们有一位用户在收到 Office 2013(非 O365)后遇到了这个问题。在进行任何编码/重大研究之前,用户获得了一个不同的硬盘驱动器(我认为这是她以前的硬盘驱动器,但我不是 100% 确定),瞧,一切都对她有用。这让我相信它可能是注册表设置或其他一些配置问题。

是否有人知道可能导致/解决此问题的任何注册表设置/应用程序配置设置,我们是否必须重新编写导出数据的逻辑,或者是否还有其他我没有想到的事情?

作为参考,这里是执行导出到 Excel 的代码片段(我添加了 'ExcelApplication1.Connect;',如此处所示 http://www.djpate.freeserve.co.uk/AutoExcl.htm#StartingExcel - 但是,这并没有解决问题) :

interface
uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, StdCtrls,// excel_tlb,
  Forms, Dialogs, checklst, Buttons, ToolWin, ComCtrls, Menus, Grids, DBGrids,
  ExtCtrls, Db, DBTables, DBClient, About, Report, IniFiles, Cdberr32,
  Ulogin32, ComObj, olectnrs, Find, ImgList, excel97, OleServer, clipbrd,
  AppEvnts;

. . .

procedure TfrmMain.btnExportClick(Sender: TObject);
var
    RangeE :Excel97.range ;
    I, Row : integer ;
    myClip : TClipBoard ;
    Arr : variant ;
    j : integer ;
begin
 //Replacing zoli code with OLE server code  GM
 //Create and show Excel spread sheet
    if qrylocations.RecordCount = 0 then
      Exit;

    try
        //Replace the after scroll procedure slows down process.
        qrylocations.AfterScroll := DummyMethod ;
        //Open Excel App and create new worksheet
        ExcelApplication1.Connect;
        ExcelApplication1.Visible[0] := True ;
        ExcelApplication1.Workbooks.Add(Null, 0) ;
        Arr := VarArrayCreate([1,qryLocations.Recordcount,1,3],varvariant) ;
        //Set teh data to the variant array
        with qryLocations do
        begin
            First;
            DisableControls ;
            for i := 0 to recordcount -1 do
            begin
                Arr[i+1,1] := Fields[0].ASstring ;
                Arr[i+1,2] := Fields[2].ASstring ;
                Arr[i+1,3] := Fields[5].ASstring ;
                Next ;
            end ;
        end ;
        //Set the excel worksheet to the variant array
        ExcelApplication1.Range['A1', 'C' + IntToStr(qrylocations.recordcount)].value := Arr ;
    finally
        qryLocations.EnableControls;
        //Reset the after scroll method back to original state
        qrylocations.AfterScroll :=  qryLocationsAfterScroll ;
    end ;
end;

ExcelApplication1 的属性如下:

我怀疑问题是 "virtual sandbox" 中的较新版本的 Office 运行,有点像伪虚拟机,无法 "see" 您机器上安装的所有内容和传统方法从非 Office 应用程序自动化 Office 不再有效,因为您的应用程序无法 "see" 安装 Office。

查看 Is it possible to automate a Click-to-run application? 了解更多详情。