在WebBrowser中调用excel时,
可以实现打印
但打印预览时出错
怎么办?
我要在自己的窗口中运行excel
OleContainer不好用

解决方案 »

  1.   

    我没用控件的
    procedure Tbroview.Button2Click(Sender: TObject);
    begin
    broview.PUBWriteExcel(DBGrid1, datetostr(date),screen.ActiveCustomForm.Caption);
    end;procedure Tbroview.PUBWriteExcel(FDBGrid1: TDBGrid; sName,Title1: string);
    var
      ExcelID: Variant;
      k, i, j: integer;
      filename: string;
    begin
      if FDBGrid1.DataSource.DataSet.IsEmpty then
      begin
        beep;
        showmessage('没有可导出的数据!');
        exit;
      end;  filename:= concat(extractfilepath(application.exename), sName, '.xls');  try
        ExcelID:= CreateOleObject('Excel.Application' ); //创建 Excel 对象
        ExcelID.Caption :='图书室信息管理系统'+'--调用 Microsoft Excel 打开导出文件'; //更改 Excel 标题栏
      except
        Application.Messagebox(pchar('Excel 没有安装!'),pchar(trim('system_name')), MB_ICONERROR + mb_Ok);
        Abort;
      end;   try 
        PubCreate_ProgressForm(self,'正在导出数据,请稍候...');//显示进度框
        Progress_Form1.Show; 
        ProgressBar1.Max := FDBGrid1.DataSource.DataSet.RecordCount;    ExcelID.Workbooks.Add;
        FDBGrid1.DataSource.DataSet.DisableControls;  //禁止dbgrid记录移动 
        FDBGrid1.DataSource.DataSet.First;
        for j := 0 to FDBGrid1.Columns.Count - 1 do   //插入字段名
        begin
          ExcelID.Worksheets[1].Cells[3, j + 1] := FDBGrid1.Columns[j].Title.Caption;
          ExcelID.Worksheets[1].Cells.item[3, j + 1].font.size := '10';
        end;     k:=2; 
        for i := 4 to FDBGrid1.DataSource.DataSet.RecordCount + 3 do  //插入记录(记录循环)
        begin 
          ProgressBar1.Position := k;
          for j := 0 to FDBGrid1.FieldCount - 1 do  //DBGrid列循环 
          begin
            ExcelID.Worksheets[1].Cells.item[i, j + 1] :=
            FDBGrid1.Fields[j].Asstring;
            ExcelID.Worksheets[1].Cells.item[i, j + 1].font.size := '10'; 
          end;
          FDBGrid1.DataSource.DataSet.Next; 
          k:=k+1;
        end;     ExcelID.Worksheets[1].Columns.AutoFit;              //宽度自适应 
        ExcelID.Worksheets[1].Cells.item[1, 2] := Title1;    //标题内容
        ExcelID.Worksheets[1].Cells.Item[1, 2].font.size := '14'; //标题大小 
      finally
        FDBGrid1.DataSource.DataSet.EnableControls;
        ExcelID.Visible := true;  //显示EXCEL窗口
        ProgressBar1.Position :=0;
        Progress_Form1.Close;
      end;
    end;//{创建进度显示窗口}
    procedure Tbroview.PubCreate_ProgressForm(AOwner: TComponent;Labeltext:string);
    var
      Panel: TPanel;
      Prompt: TLabel; {提示的标签}
    begin
      if assigned(Progress_Form1) then exit;  Progress_Form1 := TForm.Create(AOwner);
      with Progress_Form1 do
      begin
        try
          Font.Name := '宋体'; {设置字体}
          Font.Size := 9;
          BorderStyle := bsNone;
          Width := 300;
          Height := 100;
          BorderWidth := 2;
          Color := clBlue;
          Position := poScreenCenter;      Panel := TPanel.Create(Progress_Form1);
          with Panel do
          begin
            Parent := Progress_Form1;
            Align := alClient;
            BevelInner := bvNone;
            BevelOuter := bvRaised;
            Caption := '';
          end;      Prompt := TLabel.Create(Panel);
          with Prompt do
          begin
            Parent := panel;
            AutoSize := True;
            Left := 25;
            Top := 25;
            Caption := 'labeltext';
          end;      ProgressBar1 := TProgressBar.Create(panel);
          with ProgressBar1 do
          begin
            Parent := panel;
            Left := 20;
            Top := 50;
            Height := 18;
            Width := 260;
          end;    except
        end;
      end;
    end;
      

  2.   

    to: fuzhan820(fzd)
    我的麻烦在于:
    我要在自己的窗口中运行excel
    你的方法会显示一个独立的excel窗口