你用application.Terminate;来结束程序, 把这条语句放在关闭按钮里

解决方案 »

  1.   

    一定是你程序写有些问题, 你是想把数据导到execl中是吗?
      

  2.   

    我已经把数据导入EXECL了,而且也保存好了,在我不关闭这个程序之前,EXECL我都可以打开,但不知道为什么我一关闭程序,就会把CPU占用100%,EXECL也不能打开。
     
      我导入数据的代码如下,你看有什么问题吗?请指教。
    procedure TForm1.Button3Click(Sender: TObject);
    var
     xlsapp,xlssheet:variant;
     i,j:integer;
    begin
     try
      if varisempty(xlsapp) then
       xlsapp:=createoleobject('excel.application');
      xlsapp.workbooks.add;
      xlssheet:=xlsapp.worksheets['sheet1'];
     except
      application.MessageBox('不能打开EXCEL',pchar('警告'),mb_ok);
      abort;
     end;
     for j:=0 to query1.FieldCount-1 do
     begin
      xlssheet.cells[1,j+1]:=query1.Fields[j].FieldName;
     end;
     with query1 do
     begin
      first;
      for i:=0 to recordcount-1 do
      begin
       for j:=0 to fieldcount-1 do
       begin
        xlssheet.cells[i+3,j+1]:=fields[j].AsString;
       end;
       next;
      end;
     end;
     xlsapp.visible:=true;   
    end;
      

  3.   

    创建一个对必,用完后必须释放xlsapp.Quit;
      

  4.   

    我把xlsapp.quit;放在xlsapp.visible:=true; 后面,还是不行啊,MY GOD 我要疯了,救命啊~~~~~~~!
      

  5.   

    xlsapp.free 加进去看看。
    给你一段源程序,参考一下。稍等
      

  6.   

    话题517256的标题是: 关于Excel的问题,急死我也! (100分)
    分类:OLE/Automation Langrisser (2001-4-27 12:18:00)  
    请看:
    procedure TProtocol.BitBtn5Click(Sender: TObject);
    var
         ExcelApp,MyWorkBook,MyWorkBook1:Variant;
         filename: string;
    begin
      if query1.RecordCount=0 then
         raise exception.Create('没有记录可供导出!');  try
         ExcelApp:=CreateOleObject('Excel.Application');
      except
          on Exception do raise exception.Create('请确认您的机器是否已经安装EXCEL。')
      end;  filename:='c:\AAA.xls';               //模板文件  ExcelApp.workBooks.Open(filename);
      MyworkBook1:=ExcelApp.workBooks[1];        //MyworkBook1存放模板内容
      MyWorkBook:=ExcelApp.Workbooks.Add;        //MyWorkBook是新文件  ......     //这段程序是将模板中的固定内容写入MyWorkBook中  MyworkBook1.Close;  MyWorkBook.WorkSheets[1].Cells[5,3].Value := Query1CNO.Value;
      ......    //这里是将Query1中当前记录部分字段的值写入MyWorkBook的WorkSheets[1]中
      MyWorkBook.WorkSheets[2].Cells[6,2].Value := Query1NOTE.Value;
      ......   //这里是将Query1中当前记录其他字段的值写入MyWorkBook的WorkSheets[2]中
      //保存文件(问题就出在这里)
      filename:='d:\BBB.xls';
        SaveDialog1.InitialDir:='d:\';
        if SaveDialog1.Execute then   //按‘确定’时执行这句
          begin
            filename:=SaveDialog1.FileName;
            try
              if FileExists(filename) then
                 DeleteFile(FileName);
              MyWorkBook.saveas(filename);
              MyWorkBook.close;
              beep;beep;
              showmessage('导出数据记录执行完毕!');
            except   
              MyWorkBook.close; 
            end;
          end
        else MyWorkBook:=Unassigned;   //按‘取消’时执行这句    ExcelApp.Quit;   //如果在保存时按‘确定’则没问题;如果按‘取消’,则执行这句时弹出一条提示信息:‘文件"book1"已被修改,保存其修改内容吗?’并有'是'、'否'和'取消'三个按钮。
                         //这时如按'否'则没问题;若仍按'取消',那么在系统中的某一个Excel文件中就会多出一个名为'book1'的WorkBook,并处于未保存的状态。
        ExcelApp:=Unassigned; 
    end;
    我期望的情况是:在保存时按‘取消’,不弹出提示信息,而且在Excel中已经写了很多内容的MyWorkBook也自动关闭了,且没保存。 
    tinytao (2001-4-27 13:01:00)      MyWorkBook.Close(False, EmptyParam, EmptyParam);
        ExcelApp.Quit;    //在这句前加入 
    Langrisser (2001-4-27 13:31:00)  
    多谢tinytao,问题顺利解决了,不过MyWorkBook.Close(False, EmptyParam, EmptyParam);
    要加在MyWorkBook:=Unassigned; 这句前才可以。
    还有一个问题想请教各位:
    我用上面这种方式将数据导出到Excel中虽然可以,但速度很慢。请问最快的方法是什么,
    怎样实现?   
     
    hclee (2001-4-27 14:59:00)  
    当然是用现成的控件啦!
    我有一个,不过导出的EXECL格式是旧的,凑合着可以用一用。 
     
     
     
      

  7.   

    我也遇到了一个这种问题,正在解决,希望交流一下,我是在做报表时出现的这种错误,我这儿是能打开,不过光有excel的报表表头,就是工具栏什么的都有,就是没有客户区!
      

  8.   

    同志啊,一模一样的问题,你要是能解决一定要告诉我啊,我被这个问题搞破头了,MY QQ:44216607
      

  9.   

    是的,是不行的,我先也发了差不多内容的贴子,其实就是没有完全的彻底的关闭excel的问题!
      

  10.   

    这是什么问题呀?我把你程式测试了一下,完全正常呀,没什么问题。不知你用的操作系统和Delphi都是多少版本的?