Delphi XE2でも、ServersのTExcelApplicationは、Office 2000かOffice XPとなっているので、Excel2010のタイプライブラリを読み込んで試してみました。
次の処理で新規にブックを作成して、セルにデータ、罫線、スパークライン、データバーを設定し、そのシートを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/