我在做一个Excel报表的东西,
用一个Button来实现很多连锁功能:
procedure TForm1.BitBtn1Click(Sender: TObject);
var
  x :Integer;
begin
  x:=1;
  if not FileExists(ComboBox1.Text+'.xls') then
  begin
    CreatExcel(ComboBox1.Text);
  end
  else
  begin
    OpenExcel(ComboBox1.Text);
    while v.Cells[x,1].Value<>'' do
      x:=x+1;
  end;  v.Cells[x,1].Value :=bcle.Text;
  v.Cells[x,2].Value :=lere.Text;
  v.Cells[x,3].Value :=cle.Text;
  v.Cells[x,4].Value :=bcde.Text;
  v.Cells[x,5].Value :=dere.Text;
  v.Cells[x,6].Value :=cde.Text;
  v.Cells[x,7].Value :=bcee.Text;
  v.Cells[x,8].Value :=eere.Text;
  v.Cells[x,9].Value :=cee.Text;  SaveExcel(ComboBox1.Text);
end;这里的OpenExcel是自己写的函数:
procedure OpenExcel(Wjm : String);
begin
  try
    v:= CreateOleObject('Excel.Application');
    v.Visible := True;
    v.Workbooks.Open(MyPath+Wjm+'.xls');
  except
    ShowMessage('初始化Excel失败,可能没装Excel,或者其他错误;请重起再试。');
    v.DisplayAlerts := false;
    v.Quit;
    exit;
  end;
end;还有SaveExcel也是
procedure SaveExcel(SaveFile : String);
begin
  v.WorkBooks[1].Saveas(MyPath+SaveFile+'.xls');
end;而这在执行过程中,出现错误提示:
1、OpenExcel执行时,其实,Excel文件已经打开了,但是还是出现错误提示。
2、SaveExcel执行时,提示说SaveAs参数数目不够。这是怎么回事?具体的在这里的Excel函数是怎么应用的?
谢谢!

解决方案 »

  1.   

    var
      V: Variant;
    procedure TForm1.BitBtn1Click(Sender: TObject);
    var
      x :Integer;
    begin
      x:=1;
      if not FileExists(ComboBox1.Text+'.xls') then
      begin
        CreatExcel(ComboBox1.Text);
      end
      else
      begin
        OpenExcel(ComboBox1.Text);
        while v.Cells[x,1].Value<>'' do
          x:=x+1;
      end;  v.Cells[x,1].Value :=bcle.Text;
      v.Cells[x,2].Value :=lere.Text;
      v.Cells[x,3].Value :=cle.Text;
      v.Cells[x,4].Value :=bcde.Text;
      v.Cells[x,5].Value :=dere.Text;
      v.Cells[x,6].Value :=cde.Text;
      v.Cells[x,7].Value :=bcee.Text;
      v.Cells[x,8].Value :=eere.Text;
      v.Cells[x,9].Value :=cee.Text;  SaveExcel(ComboBox1.Text);
    end;这里的OpenExcel是自己写的函数:
    procedure OpenExcel(Wjm : String);
    begin
      try
        v:= CreateOleObject('Excel.Application');
        v.Visible := True;
        v.Workbooks.Open(MyPath+Wjm+'.xls');
      except
        ShowMessage('初始化Excel失败,可能没装Excel,或者其他错误;请重起再试。');
        v.DisplayAlerts := false;
        v.Quit;
        exit;
      end;
    end;还有SaveExcel也是
    procedure SaveExcel(SaveFile : String);
    begin
      v.WorkBooks[1].Saveas(MyPath+SaveFile+'.xls');
    end;
      

  2.   

    var
    eclApp,wkBook,wkSheet:Variant;
    s:string;
    colname:string;
    begin
    if SelectDirectory('请选择一个文件夹,用于保存生成的Excel文件。','',fname) then
    begin
    fname:=fname+'\';//fname是要保存的目标Excel
          try
          //创建OLE对象Excel Application与 WorkBook
          eclApp:=CreateOleObject('Excel.Application');
          wkBook:=CreateOleobject('Excel.Sheet');
          except
          ShowMessage('您的机器里未安装Microsoft Excel。');
          Exit;
          end;
          wkBook:=eclApp.workBooks.Add;
          wkBook:=eclApp.workBooks.Open('tmp.excel');//打开模版
    //这里用你的代码
          
    s:=fname+'.xls';
    wkBook.saveas(s);
    wkBook.Close;
    eclApp.Quit;
    eclApp:=Unassigned;
    showmessage('文件:'+s+' 已经存储。');
    end;end;
      

  3.   

    eclApp.Cells.Item[x,1].Value:=bcle.Text;
      

  4.   

    谢谢!但是  wkBook.saveas(s);
    这里还是提示函数的参数数目不够,是怎么回事??
      

  5.   

    还有点问题:我怎么能检测到一个CreateOleObject('Excel.Application')执行过了?
    就是说,怎么知道有一个Excel在执行??