■TPrinterを使った印刷
■メタファイルの使い方
■Queryの利用(IB&FB)
■TeeChart
■TExcelApplication
|
TExcelApplicationの使い方 |
エクセルを制御してデータベースから任意のフォーマットで書き出したいと思うことがあります。
で、役に立つのがServersのTExcelApplicationコンポーネントです。
掲示板とかで質問してもVBAを勉強しましょう。とか言われて、急ぎのときに困るので最低限度必要な処理を残します。
|
コンポーネント配置 |
フォームなりデータモジュールに3つのコンポーネントを配置します。
慣れたら、動的生成(Create)もいいかもしれません。 |
var
ExcelApp:TExcelApplication;
ExcelBook:TExcelWorkBook;
ExcelSheet:TExcelWorkSheet;
|
スマートな制御(データ出力のみ) |
自分の中のスマートな制御として
@エクセルファイルの雛形を用意しておく
Aエクセルファイルをデスクトップなどにコピーして、コピーしたモノを制御して書き出す。
B書き出し中は、プログレスバー(自作DLL)などにして、エクセルを見せない。
C最後に自動保存
|
var
FromPath,ToPath:String;
LCID:Windows.LCID;
FileOp:TShFileOpStruct;
SelectRange:ExcelRange;
cnt:Integer;
measure:Integer;
FromPath := DocumentPath + '\管理表.xls' + #0#0;
ToPath := ExportPath + '\管理表.xls' + #0#0;
with FileOp do
begin
Wnd := Handle;
wFunc := FO_COPY;
pFrom := PChar(FromPath);
pTo := PChar(ToPath);
fFlags := FOF_NOCONFIRMATION;//上書き問い合わせ無し
end;
SHFileOperation(FileOp);
LCID := GetUserDefaultLCID;
ExcelApp.Connect;
ExcelApp.DisplayAlerts[LCID] := False;
ExcelBook.ConnectTo(Excelapp.Workbooks.Open(ToPath,EmptyParam,EmptyParam,EmptyParam,EmptyParam,
EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,LCID));
try
measure := RecordCount;
ProgressShow(0,1,measure,1,PChar('EXCEL出力処理中'));
for cnt := 1 to StringGlird.RowCount - 1 do
begin
ProgressStep;
end;
ExcelBook.Save;
finally
ExcelApp.Visible[LCID] := True;
ProgressEnd;
ExcelSheet1.Disconnect;
ExcelBook.Disconnect;
ExcelApp.Disconnect;
end;
|
セルの選択 |
範囲指定での入力や編集と単体セルへの入力があります。
|
Cells.Item[ARow,ACol].Value := '文字列';var SelectRange:ExcelRange;
SelectRange := ExcelSheet1.Range['A1','E5']
var RangeCode1,RangeCode2:String;
RangeCode1 := ExcelSheet1.Cells.Item[ARow,ACol].Address;
RangeCode2 := StringReplace(ExcelSheet1.Cells.Item[ARow,ACol].Address,'$','',[rfReplaceAll]);
SelectRange := ExcelSheet1.Range[RangeCode1,RangeCode2]
SelectRange.Select;
ExcelSheet1.Range[RangeCode1,RangeCode2].Select;
SelectRange.EntireRow.Select;
|
セルの設定 |
セルの設定。
単セル(Cells.Items[ARow,ACol])
or 範囲(Range) |
機能名 |
関数名 |
意味 |
|
|
|
固定セル名の取得 |
Address |
固定セル名称の取得 |
シートの選択 |
Select |
シートを選択します。 |
|
Activate |
|
|
Cut |
|
コピー |
Copy |
シートをコピーします。 |
削除 |
Delete |
シートを削除します。 |
移動 |
Move |
シートタブを移動します。 |
挿入 |
Insert |
行または列の挿入
引数:xlShiftDown,xlShiftUp, xlShiftToLeft,xlShiftToRight |
消去 |
Clear |
すべてをクリアします。 |
書式消去 |
ClearFormats |
書式をクリアします。 |
データ消去 |
ClearContents |
データのみクリアします。 |
コメント消去 |
ClearComments |
コメントをクリアします。 |
オートフィル |
AutoFill |
セルを引っ張るやつです。 |
改ページ |
PageBreak |
選択セルを改ページして先頭行にします。
|
|
FormatConditions |
|
オートフィット |
AutoFit |
|
単セル(Cells.Items[ARow,ACol])
or 範囲(Range) |
項目名 |
プロパティ名 |
型 |
意味 |
セル内の文字 |
Value |
String |
実際に入力される文字列 |
数字の表示形式 |
NumberFomula |
String |
セルの書式のユーザー定義のところを参照コピペ |
条件付き書式 |
FormatConditions |
|
|
セルの結合 |
Merge |
Boolean |
※Rangeのときのみ使用可 |
フォント |
Font |
TFont |
フォントのフォント名や色やオプションを設定できます。 |
セル内の文字の折り返し |
WrapText |
Boolean |
セル内の文字が収まりきらないときに、折り返すかどうか。 |
セル内の文字の縮小全表示 |
ShrinkToFit |
Boolean |
セル内の文字が収まりきらないとき、縮小表示するかどうか。 |
インデントを追加する |
AddIndent |
Boolean |
インデントを追加します。 |
|
IndentLevel |
Integer |
インデントの移動量を設定します。AddIndentとセット利用。 |
|
|
|
|
|
|
|
|
|
|
|
|
縦位置 |
VerticalAlignment |
|
|
横位置 |
HorizontalAlignment |
|
|
列幅 |
ColumnWidth |
|
|
行高 |
RowHeight |
|
|
|
ExcelSheet.Range['A1','A2'].NumberFomula := '#,##0;[赤]-#,##0';
ExcelSheet.Range['A1','A2'].MergeCells := True;
var RangeCode1,RangeCode2:String;
RangeCode1 := ExcelSheet.Cells.Item[ARow1,ACol1].Address;
RangeCode2 := ExcelSheet.Cells.Item[ARow2,ACol2].Address;
ExcelSheet.Range[RangeCode1,RangeCode1].AutoFill(Range[RangeCode1,RangeCode2],xlFillDefault);
※RangeCode1とRangeCode2は、縦一列か横1列でないとエラーが出るヨ。
var RangeCode1,RangeCode2,RangeCode3:String;
RangeCode1 := ExcelSheet.Cells.Item[ARow1,ACol1].Address;
RangeCode2 := ExcelSheet.Cells.Item[ARow2,ACol2].Address;
RangeCode3 := ExcelSheet.Cells.Item[ARow3,ACol3].Address;
ExcelSheet.Range[RangeCode1,RangeCode2].AutoFill(Range[RangeCode1,RangeCode3],xlFillDefault);
※RangeCode1とRangeCode3は対角線であることが必要
Range[RangeCode3,RangeCode3].PageBreak := 1;
※いろいろ試しましたが、何ページ目だろうが、入力するのは1
Range[RangeCode3,RangeCode3].Interior.ColorIndex := 6;
Range[RangeCode3,RangeCode3].Font.ColorIndex := 6;
|
TExcelWorkSheet |
エクセルファイルのシート単位での制御に使用します。
TExcelWorkSheet |
機能名 |
関数名 |
意味 |
接続 |
ConnectTo |
実在シートと接続し、制御可能にします。 |
接続解除 |
DisConnect |
シートとの接続を解除します。 |
シートの選択 |
Select |
シートを選択します。 |
|
Activate |
|
コピー |
Copy |
シートをコピーします。 |
削除 |
Delete |
シートを削除します。 |
移動 |
Move |
シートタブを移動します。 |
印刷 |
Print |
印刷プレビューを表示します。 |
印刷プレビュー |
PrintPreview |
印刷します。 |
|
|
|
TExcelWorkSheet |
項目名 |
変数名 |
型 |
意味 |
セル |
Cells |
|
単体のセル。セル位置を指定しない場合は、すべてのセルを対象とします。 |
用紙向きと用紙サイズ |
PageSetup |
|
|
|
.Orientation |
|
用紙の向き |
|
.PaperSize |
|
用紙のサイズ |
|
.LeftMargin |
|
左余白 |
|
.RightMargin |
|
右余白 |
|
.TopMargin |
|
上余白 |
|
.BottomMargin |
|
下余白 |
|
|
|
|
|
ExcelSheet.Cells[1,1].Select;
ExcelSheet.Cells.Select;
with ExcelSheet.PageSetup do
begin
Orientation := xlPortrait;
PaperSize := xlPaperA4;
LeftMargin := 1;
RightMargin := 1;
TopMargin := 1;
BottomMargin := 1;
end;
|
TExcelWorkBook |
エクセルファイル全体の制御に使用します。
TExcelWorkBook |
機能名 |
関数名 |
意味 |
保存 |
Save |
|
名前を付けて保存 |
SaveAs |
|
TExcelWorkBook |
項目名 |
変数名 |
型 |
意味 |
|
Count |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
TExcelApplication |
エクセルアプリ自体の制御に使用します。
TExcelApplication |
機能名 |
関数名 |
意味 |
接続 |
Connect |
|
接続解除 |
Disconnect |
|
表示終了 |
Quit |
|
|
|
|
|
|
|
TExcelApplication |
項目名 |
変数名 |
型 |
意味 |
表示 |
Visible[integer] |
Boolean |
|
警告表示 |
DisplayAlerts[integer] |
Boolean |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
超簡単プログレスバーのDLL |
スマートな制御で利用したプログレスバーのソースを公開
プログレスバーフォームの表示 |
プログレスバーのダイアログフォームを起動初期化します。 |
function ProgressShow(hWnd:
THandle;AMin,AMax,AStep:Integer;Title:PChar):Wordbool;stdcall;
begin
Result := False;
Application.Handle := hWnd;
frmProgress := TfrmProgress.Create(Application);
try
frmProgress.pbrInfo.Min := AMin;
frmProgress.pbrInfo.Max := AMax;
frmProgress.pbrInfo.Step:= AStep;
frmProgress.Caption := Title;
frmProgress.Show;
finally
Result := True;
end;
end;
Exports ProgressShow;
|
プログレスバーのステップアップ |
プログレスバーをひとつ進めます。 |
procedure ProgressStep;stdcall;
begin
frmProgress.pbrInfo.StepIt;
end;
Exports ProgressStep;
|
プログレスバーフォームの終了 |
フォームを終了します。 |
procedure ProgressEnd; stdcall;
begin
frmProgress.Release;
Application.Handle := 0;
end;
exports ProgressEnd;
|
|
|