いつもお世話になります。 エクセル出力で改ページの指定方法を教えて下さい。
winXP、Del4でエクセル出力しています。印刷するために改ページの指定をしたいと思いますが、挿入方法がわかりません。過去ログにも無いようです。
文字の書き込みは以下の様にしています。 どなたか教えて下さい。
E_WorkSheet.Cells( 5, 2) := 'データ1';
E_WorkSheet.Cells(15, 2) := 'データ2';
E_WorkSheet.Cells(25, 2) := 'データ3';
E_WorkSheet.Cells(35, 2) := 'データ4';
E_WorkSheet.Cells(45, 2) := 'データ5';
46行目で改ページしたい
E_WorkSheet.Cells(55, 2) := 'データ6';
エクセルのマクロの自動記録で改ページ挿入の操作をすれば参考になるのでは。
たこ さん早速のコメントありがとうございます。
>エクセルのマクロの自動記録で改ページ挿入の操作をすれば
エクセルのマクロはわかりません。
エクセルを操作していて改ページしたい箇所で改ページを挿入するように、データを設定している途中で改ページコードのようなものを設定できないのでしょうか。 VBでは設定できるようですが、よくわかりません。どなたか教えてください。
エクセルのマクロの自動記録で改ページ挿入の操作をマクロに記録すれば、参考になりませんか?
参考にどうぞ
http://delphi-faq.zoxt.net/1278.htm
VB用からDelhpi用に多少コード変更する必要はありますが
エクセルマクロが一番参考になりますよ。
HOtaさん、Ruさん、ありがとうございます。
たこさんもご指導いただいたマクロの記録を始めて行ってみました。
以下のような結果が出ました。
ActiveWindow.SelectedSheets.HPageBreaks.Add Before:=ActiveCell
delphiで以下のようにしましたがコードの変換が必要なようでコンパイルすら出来ません。
E_Application.Range['A46'].HPageBreaks.Add Before;
どなたか教えてください。
>コードの変換が必要なようで.....
VBSとDelphiの記述方法は当然違うからね。
E_WorkSheet.HPageBreaks.Add(Before:=E_WorkSheet.Range['A46']);
または、
E_WorkSheet.HPageBreaks.Add(E_WorkSheet.Cells[46, 1]);
そうねぇさん、、ありがとうございます。
E_Application.HPageBreaks.Add(Before:=E_Application.Range['A46']);
で以下の実行時エラーが発生します。
EOleErroeクラス例外を生成しました。'メソッド'HPageBreaks'はオートメーションオブジェクトでサポートしていません。
どなたか教えてください。
>どなたか教えてください。
そう言われても、「サポートしていません」じゃぁ諦めるしかないね。
ところで、E_Applicationってなに?
そう言われてもさん、ありがとうございます。
> ところで、E_Applicationってなに?
var
E_Excel : oleVariant;
E_Application : Variant;
E_WorkBook : Variant;
E_WorkSheet : Variant;
E_Application.WorkBooks.Open('C:\BUNN.xls'); //xlsファイルを指定
E_WorkBook := E_Application.ActiveWorkbook;
E_WorkSheet := E_Application.ActiveSheet;
細やかな設定は最初の文で設定しておきデータを貼り付ける方法です。
行数が何行になるかわからないので途中で改ページを挿入したいのです。
> そう言われても、「サポートしていません」じゃぁ諦めるしかないね。
たしかにそうですが、指定方法が間違っているのではないかと思っています。
>指定方法が間違っているのではないかと思っています
その通りだね。
×E_Application
○E_WorkSheet
突然、E_Applicationが出てきて、
なにかと思ったよ。(察しはついたけどね(^。<)
>指定方法が間違っているのではないかと思っています。
もう一度そうねぇさんの提示されたコードと自身のコードを見比べてください。
そう言われてもさんの「ところで、E_Applicationってなに?」の意味がわかるかと思います。
既に気付いたかな?さんが指摘された後でしたね。
そう言われてもさん、気付いたかな?さん、たこさん、ありがとうございました。
できるように成りましたが、データを貼り付ける途中でこの処理を行うとエラーが発生します。
PG_GY := 26;
for PriPg := 1 to 3 do begin
E_Application.Range['AA1', 'AN26'].Copy; // 基本のセルをコピー
E_Application.Range['A'+IntToStr((PriPg-1)*PG_GY+ 1)].PasteSpecial;
// ここに改ページの処理を入れると以下のRowHeightでエラーが発生します。
if PriPg > 1 then begin
E_WorkSheet.HPageBreaks.Add(Before:= E_WorkSheet.Range['A'+IntToStr((PG_GY-1) + 1)]);
end;
//
E_Application.Rows[IntToStr((PriPg-1)*PG_GY+3)].RowHeight:= 13.50; // セルの高さを調整
E_Application.Rows[IntToStr((PriPg-1)*PG_GY+4)].RowHeight:= 19.50;
E_Application.Rows[IntToStr((PriPg-1)*PG_GY+5)].RowHeight:= 24.00;
.
.
E_WorkSheet.Cells((PriPg-1)* PG_GY+1,2) := 'データ';
.
// その他データをセット
end;
改ページの指定をしてセルの高さを変更するとだめなんですか?
2行目のセルの高さの変更時にエラーが出ました。
EOleErroeクラス例外を生成しました。RangeクラスのRowHeightプロバティを設定できません。
仕様なのかわかりませんがExcelが非表示だと動かない?
E_Application.Visible := True;
でExcelを表示してあげれば動くことを確認しました。
Excel非表示でも以下で動きました。
指定方法によって動きが違う??
E_Application.Range[E_Application.Cells.Item[10, 1], E_Application.Cells.Item[10, 1]].RowHeight:= 30.50;
※行位置は10行目にしていますので適当に変更してください。
返事遅れてすみませんでした。
Ruさん、みなさん、ありがとうございました。
ツイート | ![]() |