Excel 2010を操作してみる。

Delphi XE2でも、ServersのTExcelApplicationは、Office 2000かOffice XPとなっているので、Excel2010のタイプライブラリを読み込んで試してみました。
次の処理で新規にブックを作成して、セルにデータ、罫線、スパークライン、データバーを設定し、そのシートをPDFにしています。手元にあるExcel VBAの本によるとスパークラインは、2010しか使えないようです。古いExcel+スパークラインアドインの場合は・・・知りません(^_^)


コンポーネントのインストールから、Microsoft Excel 14.0 Object Libraryを取り込みます。

Import_2



uses
  ComObj,
  Excel_TLB; // Microsoft Excel 14.0 Object Library ver1.7

const
  LCID: DWORD = LOCALE_SYSTEM_DEFAULT;

var
  ExcelApp : Excel_TLB.ExcelApplication;
  WorkBook : Excel_TLB.ExcelWorkbook;
  WorkSheet: Excel_TLB.ExcelWorksheet;

// ブック(ファイル)を閉じます。
procedure WorkBook_Close;
begin
  if ExcelApp.Visible[LCID] then
  begin
    Workbook.Close(
      False,        // SaveChanges  : OleVariant
      EmptyParam,   // FileName     : OleVariant
      False,        // RouteWorkBook: OleVariant
      LCID          // lcid         : Integer;
    );

    WorkSheet := nil;
    WorkBook  := nil;

    Sleep(50); // おまじない
  end;
end;

// ExcelApplicationを開始します。
procedure ExcelApplication_Create;
begin
  ExcelApp := CreateComObject(CLASS_ExcelApplication) as ExcelApplication;
  ExcelApp.DisplayAlerts[LCID] := False;
end;

// ExcelApplicationを終了します。
procedure ExcelApplication_Close;
begin
  WorkBook_Close;

  if Assigned(ExcelApp) then
  begin
    ExcelApp.Quit;
    ExcelApp := nil;
  end;
end;

// PDF作成 WorkSheet
procedure WorkSheet_MakePDF(Open: Boolean);
var
  FileName: String;
begin
  FileName := IncludeTrailingPathDelimiter(Workbook.Path[LCID])+
    WorkSheet.Name+'.PDF';

  WorkSheet.ExportAsFixedFormat(
    xlTypePDF,         // Type_                 : XlFixedFormatType(xlTypePDF,xlTypeXPS)
    FileName,          // Filename              : OleVariant
    xlQualityStandard, // Quality               : OleVariant XlFixedFormatQuality(xlQualityStandard, xlQualityMinimum)
    True,              // IncludeDocProperties  : OleVariant
    True ,             // IgnorePrintAreas      : OleVariant
    EmptyParam,        // From                  : OleVariant
    EmptyParam,        // To_                   : OleVariant
    Open,              // OpenAfterPublish      : OleVariant // True:ODF作成後表示
    EmptyParam         // FixedFormatExtClassPtr: OleVariant
  );
end;


procedure TForm1.Button1Click(Sender: TObject);
var
  DBar: Databar;
begin
  ExcelApplication_Create;
  try
    // ブックの新規作成
    WorkBook := ExcelApp.Workbooks.Add(EmptyParam, LCID);
    try
      // WorkSheetの設定
      WorkSheet := WorkBook.Worksheets['Sheet1'] as ExcelWorksheet;
      WorkSheet.Activate(LCID);

      // サンプルデータの設定
      WorkSheet.Range['C1',EmptyParam].Value2 := 'Period1';
      WorkSheet.Range['D1',EmptyParam].Value2 := 'Period2';
      WorkSheet.Range['E1',EmptyParam].Value2 := 'Period3';
      WorkSheet.Range['F1',EmptyParam].Value2 := 'Sparklines1';
      WorkSheet.Range['G1',EmptyParam].Value2 := 'Sparklines2';

      WorkSheet.Range['B2',EmptyParam].Value2 := 'Item1';
      WorkSheet.Range['B3',EmptyParam].Value2 := 'Item2';
      WorkSheet.Range['B4',EmptyParam].Value2 := 'Item3';

      WorkSheet.Range['C2',EmptyParam].Value2 := '120';
      WorkSheet.Range['C3',EmptyParam].Value2 := ' 50';
      WorkSheet.Range['C4',EmptyParam].Value2 := '200';

      WorkSheet.Range['D2',EmptyParam].Value2 := '130';
      WorkSheet.Range['D3',EmptyParam].Value2 := '180';
      WorkSheet.Range['D4',EmptyParam].Value2 := ' 80';

      WorkSheet.Range['E2',EmptyParam].Value2 := '200';
      WorkSheet.Range['E3',EmptyParam].Value2 := ' 30';
      WorkSheet.Range['E4',EmptyParam].Value2 := '230';

      // 列幅の設定
      WorkSheet.Range['C1','G1'].EntireColumn.AutoFit;

      // 罫線の設定
      WorkSheet.Range['B1','G4'].Borders.LineStyle := xlContinuous;

      // 外枠罫線
      WorkSheet.Range['B1','G4'].BorderAround(xlContinuous,xlMedium,
        0, EmptyParam, xlThemeColorAccent1);

      // スパークライン
      WorkSheet.Range['F2','F4'].SparklineGroups.Add(xlSparkLine,'C2:E4' );
      WorkSheet.Range['G2','G4'].SparklineGroups.Add(xlSparkColumn,'C2:E4' );

      // データバー
      DBar := (WorkSheet.Range['C2','E4'].FormatConditions.AddDatabar as Databar);
      DBar.BarFillType := xlDataBarFillGradient;
      // Excel2010では、BarColorでテーマの色が選べるみたいけど、タイプライブラリでは
      // property BarColor: IDispatch readonly dispid 2722;
      // と読み取り専用になっていますね。
      DBar.MinPoint.Modify(xlConditionValueNumber, WorkSheet.Range['E3',EmptyParam]);
      DBar.MaxPoint.Modify(xlConditionValueNumber, WorkSheet.Range['E4',EmptyParam]);

      // PDFの作成
      WorkSheet_MakePDF(True);
    finally
      WorkBook_Close;
    end;
  finally
    ExcelApplication_Close;
  end;
end;


実行すると次のようなPDFが作成されます。

1



Excelの操作については、Mr.XRAYさんのところにExcelに関するいろいろな処理がわかりやすくまとめられています。


Delphi Library [Mr.XRAY]
http://mrxray.on.coocan.jp/

|