Excel 2010を操作してみる。
Delphi XE2でも、ServersのTExcelApplicationは、Office 2000かOffice XPとなっているので、Excel2010のタイプライブラリを読み込んで試してみました。
次の処理で新規にブックを作成して、セルにデータ、罫線、スパークライン、データバーを設定し、そのシートをPDFにしています。手元にあるExcel VBAの本によるとスパークラインは、2010しか使えないようです。古いExcel+スパークラインアドインの場合は・・・知りません(^_^)
コンポーネントのインストールから、Microsoft Excel 14.0 Object Libraryを取り込みます。
実行すると次のようなPDFが作成されます。
Excelの操作については、Mr.XRAYさんのところにExcelに関するいろいろな処理がわかりやすくまとめられています。
Delphi Library [Mr.XRAY]
http://mrxray.on.coocan.jp/
次の処理で新規にブックを作成して、セルにデータ、罫線、スパークライン、データバーを設定し、そのシートをPDFにしています。手元にあるExcel VBAの本によるとスパークラインは、2010しか使えないようです。古いExcel+スパークラインアドインの場合は・・・知りません(^_^)
コンポーネントのインストールから、Microsoft Excel 14.0 Object Libraryを取り込みます。
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が作成されます。
Excelの操作については、Mr.XRAYさんのところにExcelに関するいろいろな処理がわかりやすくまとめられています。
Delphi Library [Mr.XRAY]
http://mrxray.on.coocan.jp/
| 固定リンク