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/

|

その他のカテゴリー

ADO | ADT | API | ArrayList | ASP.NET | BDE | BDP.NET | BdpConnection | Borland Developer Studio 2006 | CAPICOM | class | ClipBoard | CodeEditor | Convert.ToString | Custom component | DBExpress | Delphi 2005 | Delphi 2006 | Delphi 2007 | Delphi XE2 | Delphi7 | Delphi8 | Device Driver | Dialog | Docking | DocuWorks | Docuworks SDK | Drag&Drop | Evernote | EXCEL | Firebird | FireMonkey | Game | General | Generics | Google Earth COM API | Google Maps | Google SketchUp | Graphic | IDE | Imm | Indy | InstallAware Express6 | InterBase Admin | JWW | Microsoft SQL Server | MyBase | OnMouseDown | Oracle XE | Paradox | PreviewHandler | PrintDialog | PrintPreviewDialog | PropertyGrid | PSDファイル | Ribbon Controls | RichTextBox | Servers | SubClass | TAction | TActionList | TAnimate | TButton | TCategoryButtons | TClientDataSet | TComboBox | TComboBoxEx | TCustomEdit | TDBGrid | TDockTabSet | TDrawGrid | TEdit | TExcelApplication | TFont | TForm | third party | TImage | TLabel | TList | TListBox | TListView | TMemo | TOpenDialog | TOutlookApplication | TPageControl | TPanel | TRichEdit | TShellResources | TStringGrid | TTabControl | TToolBar | TToolButton | TTreeView | TWebBrowser | Update | VCL Styles | WinInet | XE2 | XPman | オープン配列パラメータ | グループ化 | トランスレーションマネージャー | ファイル処理 | ファイル名処理 | 動的配列 | 投票 | 文字列処理 | 日本語入力 | 暗号 | | 音声合成利用