« ☆DBGridでのTopRow設定 | トップページ | ■Malcolm Groves氏のブログ »

☆Excelの書式設定を行う。

次のような書式設定を行います。マクロから抜き出して並べているだけですけどね。

Excel


uses ExcelXP;

procedure TForm1.Button1Click(Sender: TObject);
const
  FileName = 'c:\test.xls';
  S1 = 'こんにちは \(^o^)/';
  S2 = 'CodeGear Delphi for Win32';
var
  LCID: Integer;
  ExcelApplication1: TExcelApplication;
  ExcelWorkBook1: TExcelWorkBook;
  Len1, Len2: Integer;
begin
  ExcelApplication1 := TExcelApplication.Create(nil);
  ExcelWorkBook1 := TExcelWorkBook.Create(nil);
  try
    LCID := GetUserDefaultLCID;
    ExcelApplication1.Connect;
    ExcelApplication1.Visible[LCID] :=  False;
    ExcelApplication1.DisplayAlerts[LCID] := False;

    ExcelApplication1.Workbooks.Add(EmptyParam, LCID);
    ExcelWorkBook1.ConnectTo(ExcelApplication1.ActiveWorkBook);

    Len1 := Length(WideString(S1));
    Len2 := Length(WideString(S2));

    // セルを選択
    ExcelApplication1.Range['B5','B5'].Select;
    
    // セルの書式設定--文字の制御--折り返して全体を表示する
    ExcelApplication1.ActiveCell.WrapText := True;

    // セルの書式設定--文字の配置--縦位置--中央揃え
    ExcelApplication1.ActiveCell.VerticalAlignment := xlCenter;

    // 一つのセルに2行に分けて表示
    ExcelApplication1.ActiveCell.FormulaR1C1 := S1 + #10 + S2;

    // 一行目のフォントサイズの設定
    ExcelApplication1.ActiveCell.Characters[1,Len1].Font.Size := 18;

    // 二行目のフォントサイズの設定
    ExcelApplication1.ActiveCell.Characters[Len1+1,Len2+1].Font.Size := 9;

    // セル(カラム)幅の自動設定
    // ※ColumnWidthを設定しないとAutoFitの動作が不安定でした。
    ExcelApplication1.ActiveCell.ColumnWidth := 100; // 数値は適当です。
    ExcelApplication1.ActiveCell.EntireColumn.AutoFit;

    // セル(行)高さの自動設定
    // ※RowHeightを設定しないとAutoFitの動作が不安定でした。
    ExcelApplication1.ActiveCell.RowHeight := 50;  // 数値は適当です。
    ExcelApplication1.ActiveCell.EntireRow.AutoFit;

    // 罫線
    ExcelApplication1.ActiveCell.Borders[xlEdgeLeft].LineStyle := xlContinuous;
    ExcelApplication1.ActiveCell.Borders[xlEdgeTop].LineStyle := xlContinuous;
    ExcelApplication1.ActiveCell.Borders[xlEdgeBottom].LineStyle := xlContinuous;
    ExcelApplication1.ActiveCell.Borders[xlEdgeRight].LineStyle := xlContinuous;    

    // 保存します。
    ExcelWorkBook1.SaveAs(FileName,     //Filename
                  Integer(xlNormal),    //FileFormat
                  EmptyParam,    //Password
                  EmptyParam,    //WriteResPassword
                  False,         //ReadOnlyRecommended
                  False,         //CreateBackup
                  xlNoChange,    //AccessMode
                  EmptyParam,    //ConflictResolution
                  EmptyParam,    //AddToMru
                  EmptyParam,    //TextCodepage
                  EmptyParam,    //TextVisualLayout
                  EmptyParam,    //Local
                  LCID);         //LCID

    ExcelApplication1.Quit;
    ExcelApplication1.Disconnect;
  finally
    ExcelWorkBook1.Free;
    ExcelApplication1.Free;
  end;
end;

カラム幅や行高さは、Cellに対してではなく、ColumnsやRowsで設定しなきゃいけないと思うのですけど、うまくできなかったです。又、機会があれば検討してみますね。

|

« ☆DBGridでのTopRow設定 | トップページ | ■Malcolm Groves氏のブログ »