我采用delphi控件的方法(而不是动态创建“Excel.Application”的方法),目前已经实现了把数据数据输出到excel中,可是一些控制性的功能却不知如何实现,主要包括:
1.设置指定列的宽度
  葵花宝典提供的方法是:
  ActiveSheet.Columns[1].ColumnsWidth := 5;
  但是这个方法在我这里却会出现如下错误:
  Class does not have a default property2.如何设置指定列的自动换行属性
  如果在excel中,可以通过“设置单元格格式-〉对齐-〉自动换行”实现,可如果用代码怎么实现?3.选定一些列以后如何将它们合并?郁闷ing请高手指点!

解决方案 »

  1.   

    我有一段代码(用TExcelApplicon)也许可以帮你,如果要参考,给我你的邮件
      

  2.   

    unit Unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, Excel2000, OleServer, DB, ADODB, Grids, DBGrids,comobj;type
      TForm1 = class(TForm)
        DataSource1: TDataSource;
        DBGrid1: TDBGrid;
        ADOQuery1: TADOQuery;
        ExcelApplication1: TExcelApplication;
        ExcelChart1: TExcelChart;
        ExcelWorksheet1: TExcelWorksheet;
        ExcelWorkbook1: TExcelWorkbook;
        ExcelOLEObject1: TExcelOLEObject;
        Button1: TButton;
        SaveDialog1: TSaveDialog;
        procedure Button1Click(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);var
       fieldcounts,j,i:integer;
    begin
      excelapplication1.Connect ;
      excelapplication1.Workbooks.Add(null,0);
      excelworkbook1.ConnectTo(excelapplication1.Workbooks[1]);
      excelworksheet1.ConnectTo(excelworkbook1.Sheets[1] as _worksheet);
      fieldcounts:=dbgrid1.FieldCount;
       For j:=0 to FieldCounts-1 do
        excelworksheet1.Cells.Item[1,j+1]:=dbgrid1.Fields[j].FieldName;
        i:=2;
        adoquery1.First;
        while not adoquery1.Eof do begin
         For j:=0 to FieldCounts-1 do
          excelworksheet1.Cells.Item[i,j+1]:=adoquery1.Fields[j].Value;
          i:=i+1;
          adoquery1.Next;
        end;
        if savedialog1.Execute then
        begin
        adoquery1.First;
        excelworksheet1.SaveAs(savedialog1.FileName);
        excelworkbook1.Close;
        excelapplication1.Quit ;
        end;
        adoquery1.First;
    end;end.
      

  3.   

    qiqi97可能没有注意,输出数据并不是我的问题
    不过上述的几个问题已经解决的,具体如下:
    1.设置指定列的宽度
        这个问题在我这里实现起来有点别扭,不过也算是绕弯解决了(先交差再说  ^_^),代码为:
         ExcelWorksheet1.Columns.ColumnWidth:=2;(设置所有列)
         ExcelWorksheet1.Range['a1','a3000'].ColumnWidth :=3;(设置第a列)
    2.设置指定列的自动换行属性
        ExcelWorksheet1.Range['a1','a3000'].WrapText :=true;
    3.合并某些单元格
        ExcelWorksheet1.Range['a1','c2'].Merge(true);另外补充几点,希望对大家有帮助1.设置某个单元格的对齐属性:
    ExcelWorksheet1.Range['a1','a1'].HorizontalAlignment :=xlHAlignCenter;
    或者xlHAlignLeft,或者xlHAlignRight
    同理,也可以设置VerticalAlignment
    2.一个比较有用的方法是ShrinkToFit,作用是某一格的文字与宽度匹配(如果太大了会自动缩小)
    3.设置某一列的数据格式
    excel会自动去掉小数部分最后面的零,这一点很让人讨厌,所以必须设置它的数字格式:
    ExcelWorksheet1.Range['a1','a3000'].NumberFormat:='#,###,###0.00';最后说明一点,delphi中没有excel的帮助,网上也不好找,这些都是我一个一个试出来的!辛苦啊!wjlsmail,我的email是[email protected]
      

  4.   

    查MSDN,或者看OFFICE 2000中的中文帮助(VBA)