我在Delphi下直接操作Excel,想画出表格,可我只能画出外框, 中间的线画不出.请高人指点
谢谢.

解决方案 »

  1.   

    给你个单元,自己去研究巴
    unit dbgridtoexcel;interfaceuses    OleServer, Excel97, DBGrids, dbtables, Dialogs, Sysutils, windows, graphics, FileCtrl, classes, common_p;var
    // XLApp:Excel_TLB.APPLication_;
        XLApp: TExcelApplication;
    procedure CreateExcelRep(DBGrid: TDBGrid; Title: string);
    procedure HandleData(Worksheet: _Worksheet; DBGrid: TDBGrid; Title: string);
    procedure HandleData1(Worksheet: _Worksheet; DBGrid: TDBGrid; Title: string);
    procedure savefile(tablename: string; DBGrid: TDBGrid; title: string);
    function textformat(str: string; count: integer): string;
    implementationprocedure savefile(tablename: string; DBGrid: TDBGrid; title: string);
    var
        myfile: TStringList;
        i: integer;
        s: string;
        myquery: TQuery;
    begin
        myquery := TQuery.Create(nil);
        myquery.DatabaseName := 'apms99';
        myquery.SQL.Clear;
        myquery.SQL.Text := 'select * from ' + tablename;
        try
            myquery.Open;
        except
        end;
        myfile := TStringList.Create;
        s := '';
        for i := 0 to myquery.FieldCount - 1 do
            s := s + textformat(DBGrid.Columns.Items[i].Title.Caption, myquery.Fields[i].DisplayWidth);
        myfile.Add(s);
        while not myquery.EOF do
        begin
            s := '';
            for i := 0 to myquery.FieldCount - 1 do
                s := s + textformat(myquery.Fields[i].asstring, myquery.Fields[i].DisplayWidth);
            myfile.Add(s);
            myquery.Next;
        end;
        if not DirectoryExists('repfile') then
            CreateDir('repfile');
        myfile.SaveToFile('repfile\' + title + '_' + datetostr(now) + '.txt');
        myfile.Free;
        myquery.free;
    end;function textformat(str: string; count: integer): string;
    var
        mystr: string;
    begin
        mystr := copy('                                                 ', 1, count - length(str));
        mystr := mystr + str;
        result := mystr;end;procedure CreateExcelRep(DBGrid: TDBGrid; Title: string);
    var
        WorkBks: WorkBooks;
        Workbk: _Workbook;
        WorkSheets: Sheets;
        Worksheet: _WorkSheet;
    begin
        try
            XLApp := TExcelApplication.Create(nil);
        except
            savefile('t_temp1', DBGrid, Title);
            exit;
        end;
        XLApp.Visible[0] := True;
        WorkBks := XLApp.Workbooks as WorkBooks;
        WorkBks.Add(XLWBatWorkSheet, 0);
        Workbk := WorkBks.Item[1];
        WorkSheets := Workbk.Worksheets;
        Worksheet := Worksheets.Get_Item(1) as _WorkSheet;
        WorkSheet.Name := Title;
        if not llff then
            HandleData1(Worksheet, DBGrid, Title)
        else
            handledata(worksheet, dbgrid, title);
        xlapp.Free;
    end;procedure HandleData1(Worksheet: _Worksheet; DBGrid: TDBGrid; Title: string);
    var
        i, j: integer;
        ARange: Range;
        MyQuery: TQuery;
    begin
        WorKSheet.Cells.Item[1, 4] := Title;    for i := 1 to DBGrid.Columns.Count do
            WorkSheet.Cells.Item[3, i + 1] := DBGrid.Columns.Items[i - 1].Title.caption;
        Myquery := TQuery.Create(nil);
        MyQuery.DatabaseName := 'apms99';
        Myquery.SQL.Text := 'select * from t_temp1';
        try
            MyQuery.Open;
        except
        end;
        for i := 0 to Myquery.RecordCount - 1 do
        begin
            for j := 0 to myquery.FieldCount - 1 do
                WorkSheet.Cells.Item[4 + i, j + 2] := Myquery.Fields[j].value;
            Myquery.Next;
        end;
        ARange := WorkSheet.Range[WorkSheet.Cells.Item[3, 2], WorkSheet.Cells.Item[3, myquery.FieldCount + 1]];
        ARange.Columns.Interior.ColorIndex := 24;
        ARange := WorkSheet.Range[WorkSheet.Cells.Item[3, 2], WorkSheet.Cells.Item[3 + Myquery.RecordCount, myquery.FieldCount + 1]];
        ARange.Borders.LineStyle := xlContinuous;end;procedure HandleData(Worksheet: _Worksheet; DBGrid: TDBGrid; Title: string);
    var
        i, j, k, d, l, p: integer;
        ARange: Range;
        MyQuery: TQuery;
    begin
        WorKSheet.Cells.Item[1, 11] := Title;
    // Worksheet.SetBackgroundPicture('C:\Program Files\Microsoft Office\Office\Bitmaps\Styles\Stone.bmp');
      //arange:=worksheet.Range[worksheet.cells.item[3,4],worksheet.cells.item[3,7]];
     //ARange.Columns.Dependents;
        for i := 1 to 2 do
            WorkSheet.Cells.Item[3, i + 1] := DBGrid.Columns.Items[i - 1].Title.caption;
        if k < 10 then
            for k := 3 to DBGrid.Columns.Count - 1 do
                WorkSheet.Cells.Item[3, 3 * k - 4] := DBGrid.Columns.Items[k].Title.caption
        else
            for k := 3 to DBGrid.Columns.Count - 2 do
                WorkSheet.Cells.Item[3, 3 * k - 4] := DBGrid.Columns.Items[k].Title.caption;
        WorkSheet.Cells.Item[3, DBGrid.Columns.Count + 12] := DBGrid.Columns.Items[DBGrid.Columns.Count - 1].Title.caption;
        Myquery := TQuery.Create(nil);
        MyQuery.DatabaseName := 'apms99';
        Myquery.SQL.Text := 'select * from t_temp1';
        try
            MyQuery.Open;
        except
        end;
        for i := 1 to 6 do
            WorkSheet.Cells.Item[4, i * 3 + 1] := '×&Uuml;&acute;&Icirc;&Ecirc;&yacute;';
        for i := 1 to 6 do
            WorkSheet.Cells.Item[4, i * 3 + 2] := '×&Uuml;&Ecirc;±&sup3;¤(·&Ouml;)';
        for i := 1 to 6 do
            WorkSheet.Cells.Item[4, i * 3 + 3] := '×&Uuml;&raquo;°·&Ntilde;(&Ocirc;&ordf;)';
        d := 0;
        for l := 0 to myquery.recordcount div 3 - 1 do
        begin
      //   for i:=0 to 2 do
          // begin        for j := 0 to 1 do
            begin
                WorkSheet.Cells.Item[5 + d, j + 2] := Myquery.Fields[j].value;
            end;        d := d + 1;
         //l:=l+2;
            Myquery.Next;
            myquery.next;
            myquery.next;
      //end;
        end;
    {for l:=0 to myquery.recordcount div 3-1 do
    begin
     for i:=0 to 2 do
      begin
       // p:=1;
         for j:=0 to 2 do
            begin
              WorkSheet.Cells.Item[5+l,j+2]:=Myquery.Fields[j].value;
            //P:=p+1;
             Myquery.Next;
           end;
    end;end;}
    {Myquery:=TQuery.Create(nil);
     MyQuery.DatabaseName:='apms99';
     Myquery.SQL.Text:='select * from t_temp1';
     try
       MyQuery.Open;
     except
     end; }
        Myquery.first;
        for l := 0 to myquery.recordcount div 3 - 1 do
        begin
            for i := 0 to 2 do
            begin
                p := 1;
                for j := 3 to myquery.FieldCount - 1 do
                begin
                    WorkSheet.Cells.Item[5 + l, 3 * p + 1 + i] := Myquery.Fields[j].value;
                    P := p + 1;
                end;            Myquery.Next;
            end;
        end;    ARange := WorkSheet.Range[WorkSheet.Cells.Item[3, 2], WorkSheet.Cells.Item[3, myquery.FieldCount + 12]];
        ARange.Columns.Interior.ColorIndex := 24;
        ARange := WorkSheet.Range[WorkSheet.Cells.Item[3, 2], WorkSheet.Cells.Item[3 + Myquery.RecordCount div 3 + 1, myquery.FieldCount + 12]];
        ARange.Borders.LineStyle := xlContinuous;end;end.
      

  2.   

    f1book
    是什么?我在Delphi下创建一个Excel文件并打印出来,
    打印结果没有表格线,我想用程序生成表格线一个格子的画太慢了.有没有快点的办法?