将应用程序数据导出到excel适用于某些用户但不适用于其他用户

时间:2016-06-02 18:36:32

标签: excel delphi office365 delphi-5

我有一个遗留应用程序(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的属性如下:

  • AutoConnect = false
  • AutoQuit = false
  • ConnectKind = ckRunningOrNew
  • 名称= ExcelApplication1
  • RemoteMachineName = [EMPTY]
  • 标签= 0

1 个答案:

答案 0 :(得分:1)

我怀疑问题是较新版本的Office在“虚拟沙箱”中运行,这种伪虚拟机无法“看到”您计算机上安装的所有内容以及从非Office应用程序自动执行Office的传统方法更长的工作,因为您的应用程序无法“看到”Office已安装。

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