☆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で設定しなきゃいけないと思うのですけど、うまくできなかったです。又、機会があれば検討してみますね。

|

☆xlsをcsvで保存

[Delphi7]

今更、載せる必要もないかも知れませんが、エクセルファイルの指定シートをCSV形式で保存するサンプルです。今まで Excel2000 というユニットを使ってきましたが、今回 ExcelXP を使ったので、今までのプログラムがコンパイルできずに少し焦りました。

プログラム中にはありませんが、今まで
  ExcelWorksheet1.Range['A1','A1'].Value := 'データ';
としていたものも
  ExcelWorksheet1.Range['A1','A1'].Value2 := 'データ';
というような変更が必要でした。


uses ExcelXP;


{ Excelファイルの指定されたシートをCSVに保存します。 }
procedure TForm1.Button1Click(Sender: TObject);

  { セルの列名を数字からアルファベットに変換します。 }
  function GetAlfa(I: Integer): String;
  var
    J,K: Integer;
    S1,S2: String;
  begin
    Result := '';
    J := I div 26;
    K := I mod 26;

    if (K = 0) then
    begin
      J := J - 1;
      K := K + 26;
    end;

    if (J = 0) then
      S1 := ''
    else
      S1 := Chr(J+64);

    S2 := Chr(K+64);
    Result := S1+ S2;
  end;

const
  FileName = 'エクセルのファイル';
  WorkSheetName = 'CSVで保存したいシート名';
  CSVFile  = 'CSVファイル名';
var
  LCID, ColumnCount, RowCount: Integer;
  ExcelApplication1: TExcelApplication;
  ExcelWorkBook1: TExcelWorkBook;
  ExcelWorkSheet1: TExcelWorkSheet;
begin
  ExcelApplication1 := TExcelApplication.Create(nil);
  ExcelWorkBook1 := TExcelWorkBook.Create(nil);
  ExcelWorkSheet1 := TExcelWorkSheet.Create(nil);
  try
    LCID := GetUserDefaultLCID;
    ExcelApplication1.Connect;
    ExcelApplication1.Visible[LCID] :=  False;
    ExcelApplication1.DisplayAlerts[LCID] := False;

    { Excelファイルをオープンします。 }
    ExcelApplication1.Workbooks.Open(
        FileName,   //FileName: WideString
        EmptyParam, //UpdateLinks: OleVariant
        EmptyParam, //ReadOnly: OleVariant
        EmptyParam, //Format: OleVariant
        EmptyParam, //Password: OleVariant
        EmptyParam, //WriteResPassword: OleVariant
        EmptyParam, //IgnoreReadOnlyRecommended: OleVariant
        EmptyParam, //Orign: OleVariant
        EmptyParam, //Delimiter: OleVariant
        EmptyParam, //Editable: OleVariant
        EmptyParam, //Notify: OleVariant
        EmptyParam, //Converter: OleVariant
        EmptyParam, //AddToMru: OleVariant
        EmptyParam, //Local
        EmptyParam, //CorruptLoad
        LCID        //lcid: Integer;
         );

    ExcelWorkbook1.ConnectTo(ExcelApplication1.ActiveWorkbook);
    ExcelWorksheet1.ConnectTo(ExcelWorkbook1.Worksheets[WorkSheetName] as _Worksheet);

    { 使用されている列数を取得します。 }
    ColumnCount := ExcelWorksheet1.UsedRange[LCID].Columns.Count;

    { 使用されている行数を取得します。 }
    RowCount    := ExcelWorksheet1.UsedRange[LCID].Rows.Count;

    { オートフィルタを解除します。 }
    if ExcelWorksheet1.AutoFilterMode[LCID] then
      ExcelWorksheet1.AutoFilterMode[LCID] := False;

    { セルに設定されている書式を消去します。 }
    ExcelWorksheet1.Range['A1',GetAlfa(ColumnCount)+IntToStr(RowCount)].ClearFormats;

    { 参考 - 書式を設定する場合 }
    //ExcelWorksheet1.Range['H2','H10'].NumberFormatLocal :='yyyy/m/d';

    { CSV形式でファイルを名前を付けて保存させます。 }
    ExcelWorkbook1.SaveAs(CSVFile,     //Filename
         xlCSV,       //FileFormat
        EmptyParam,  //Password
        EmptyParam,  //WriteResPassword
        False,       //ReadOnlyRecommended
        False,       //CreateBackup
        xlNoChange,  //AccessMode
        EmptyParam,  //ConflictResolution
        EmptyParam,  //AddToMru
        EmptyParam,  //TextCodepage
        EmptyParam,  //TextVisualLayout
        EmptyParam,  //Local
        LCID);       //LCID

    ExcelWorkbook1.Disconnect;  //要らないかも?
    ExcelApplication1.Quit;
    ExcelApplication1.Disconnect;
  finally
    ExcelWorkSheet1.Free;
    ExcelWorkBook1.Free;
    ExcelApplication1.Free;
  end;
end;

|