Copyright© Torigoe 2005
Object Oriented XBASE Forum
FoxProのコマンドラインからExcelを操作する
コマンドラインでExcelを操作すると、インテリセンスのサポートを受けられるので、各コマンドの動作を確認しながら進めることができます。各コマンドの動作確認ができれば後は簡単、アプリを組むだけです。
取り合えず、こんな感じのExcelシートをFoxProのコマンドラインから作成してみよう。「網がけ」されているコマンドをFoxProのコマンドウィンドウに入力して動作を確認してください。
1.準備
タスクマネージャーを起動し、”EXCEL.EXE”が起動されていないことを確認しておきます。
2.EXCELオブジェクトの作成
コマンドウィンドウに下記のコマンドを入力します。
oExcel =
CREATEOBJECT("Excel.Application")
タスクマネージャーを起動し、”EXCEL.EXE”が起動されたことを確認します。(この状態では、まだExcelは画面上に表示されません)
3.Excelオブジェクトの表示
コマンドウィンドウに下記のコマンドを入力します。
oExcel.Visible = .T.
(実際のプログラムでは、プレビューの直前で実行します、プレビュー無しで印刷する場合は必要ありません。)
FoxProのコマンドウィンドウをIDEから出しIDEのサイズを調整して、このような画面にすると動作を確認しやすくなります。
4.新規ブックを作成する時に、自動的に挿入されるシート数の設定
oExcel.SheetsInNewWorkbook = 2
(この例では、新規にシートを2枚挿入します。)
5.Excelオブジェクトにブックを追加
oWorkbook = oExcel.Workbooks.Add()
既存のExcelシートを開くには
oWorkbook = oExcel.Workbooks.Open("c:\temp\book1.xls")
ここまで出来れば、後はExcel VBAの世界です。 VBAに詳しい方は、24へ飛んで作成したオブジェクトの開放を確認してください。
6.シートを選択
oWorksheet = oWorkbook.WorkSheets(2)
oWorksheet.Activate()
“Sheet2”が手前に表示されます。
7.Activeなシートを”Sheet1”に戻す
oWorksheet = oWorkbook.WorkSheets(1)
oWorksheet.Activate()
8.シートの名前の変更
oWorksheet.Name = “売上集計”
9.カラム幅の変更
oWorksheet.columns[1].columnWidth = 20
oWorksheet.columns[2].columnWidth = 11
oWorksheet.columns[3].columnWidth = 11
oWorksheet.columns[4].columnWidth = 11
10.行高の変更
1行目の行高を変更します。
oWorksheet.Rows(1).RowHeight = 25
Rangeを設定すれば複数行を一度に変更できます。
11.セルの結合
A1からD1までのセルを結合します。
cRange = “A1:D1”
oWorksheet.Range(“&cRange.”).Merge
ここでは、oWorksheet.Range(“A1:D1”).Merge として構いません。
データ量によってRangeに指定する値画が変わるような場合でもマクロ展開が使えるFoxProは強力な処理が可能です。
12.タイトルの設定
oWorksheet.Cells(1, 1).Value = “1月売上集計”
oWorksheet.Cells(3, 1).Value = “品 名”
oWorksheet.Cells(3, 2).Value = “数 量”
oWorksheet.Cells(3, 3).Value = “単 価”
oWorksheet.Cells(3, 4).Value = “金 額”
oWorksheet.Cells(9, 3).Value = “合 計”
13.フォントサイズの指定
タイトルのフォントサイズを16に設定し、ボールドにします。
oWorksheet.Cells(1, 1).Font.Size = 16
oWorksheet.Cells(1, 1).Font.Bold = .T.
ちなみに、
・フォント名を変更するには
oWorksheet.Cells(1, 1).Font.Name = “MS 明朝”
・斜体にするには
oWorksheet.Cells(1, 1).Font.Italic = -1 又は .T.
・フォントにアンダーラインを付けるには
oWorksheet.Cells(1, 1).Font.underline = -4119
xlUnderLineStyleDouble -4119
xlUnderLineStyleDoubleAccounting 5
xlUnderLineStyleNone -4142
xlUnderLineStyleSingle 2
xlUnderLineStyleSingleAccounting 4
・フォントの色を変えるには
oWorksheet.Cells(1, 1).Font.Color = RGB(255, 0, 0)
・セルの色を変えるには
oWorksheet.Cells(1,1).Interior.Color = RGB(0,255,0)
14.タイトルのセンタリング
oWorksheet.Cells(1, 1).HorizontalAlignment = -4108
oWorksheet.Cells(9, 3).HorizontalAlignment = -4108
cRange = “A3:D3”
oWorksheet.Range(“&cRange.”). HorizontalAlignment = -4108
水平方向 右寄せ xlHAlignRight -4152
左寄せ xlHAlignLeft -4131
中央 xlHAlignCenter -4108
垂直方向 下 xlVAlignBotton -4107
中央 xlVAlignCenter -4108
上 xlVAlignTop -4160
15.金額の計算式を設定
oWorksheet.Cells(4, 4).Value = “= B4*C4”
D5~D8にも同じように計算式を設定してください。面倒な場合は、D4のセルをD5~D8にコピーしてください。
16.D9のセルに金額の合計を求める計算式を設定する
oWorksheet.Cells(9, 4) = “=SUM(D4:D8)”
現在、このようになっているはずです。
17.明細の1行目を入力する
oWorksheet.Cells(4, 1).Value = “なまずパイ”
oWorksheet.Cells(4, 2).Value = 2500
oWorksheet.Cells(4, 3).Value = 300
金額と合計の欄が計算されていることを確認する
18.自動再計算の抑止
Excelはセルに計算式が設定されていると、セルの値が変わるごとに影響を受けるセルが自動的に再計算されます。大量のデータをセルに貼り付ける場合は、実行スピードが遅くなるので自動的に再計算が行われるのを停止します。
oWorksheet.EnableCalculation = .F.
この状態で、明細1行目の数量又は単価を変更し、金額・合計欄が再計算されないことを確認してください。
19.明細2〜5行目までを設定します
oWorksheet.Cells(5, 1).Value = “喜多方うどん”
oWorksheet.Cells(5, 2).Value = 3000
oWorksheet.Cells(5, 3).Value = 250
:
以下同様
こんな、感じになっています。自動計算を抑止しているので、金額欄は計算されていません。
20.自動計算を有効に
各セルに値を設定したので、自動計算を行います。
oWorksheet.EnableCalculation = .T.
金額・合計欄が再計算されることを確認してください。
一瞬にして、金額欄・合計欄が再計算されます。FoxProから各セルに計算式を設定する場合には、実行スピードを高めるために EnableCalculationのプロパティは、最初
.F. に設定し、計算が必要になったところで .T. に設定します。
21.カンマ編集
数量・単価・金額をカンマ編集します。
cRange = “B4:D8”
oWorksheet.Range(“&cRange.”). NumberFormat = “###,###”
oWorksheet.Cells(9, 4). NumberFormat = “###,###”
22.罫線
cRange = “A3:D8”
oWorksheet.Range(“&cRange.”).Borders.LineStyle = 1
cRange = “C9:D9”
oWorksheet.Range(“&cRange.”).Borders.LineStyle = 1
xlContinuous 1
xlDash -4115
xlDashDot 4
xlDashDotDot 5 (LineStyleプロパティの値)
xlDot -4118
xlDouble -4119
xlLineStyleNone -4142
xlSlantDashDot 13
ちなみに、10行目の下に太線の罫線を引いてみる。
cRange = “A10:D10”
oWorksheet.Range(“&cRange.”).Borders(9). Weight = -4138
xlEdgeBottom 9
xlEdgeLeft 7
xlEdgeRight 10 罫線を引く場所
xlEdgeTop 8
xlEdgeBox 3
xlHairline 1
xlThin 2 (Weightプロパティの値)
xlMedium -4138
xlThick 4
カンマ編集をして罫線を引くと、シートらしくなりました。
23.印刷
cRange = "A1:D10"
oWorksheet.PageSetup.Orientation = 1
xlPortrait 1 (Orientationプロパティの値)
xlLandscape 2
oWorksheet.PageSetup.PaperSize = 9
xlPaperA3 8
xlPaperA4 9
xlPaperA5 11 (PaperSizeプロパティの値)
xlPaperB4 12
xlPaperB5 13
oWorksheet.PageSetup.TopMargin = 20
oWorksheet.PageSetup.HeaderMargin = 1.3
oWorksheet.PageSetup.LeftMargin = 35
oWorksheet.PageSetup.RightMargin = .5
oWorksheet.PageSetup.BottomMargin = 1.6
oWorksheet.PageSetup.FooterMargin = 1.3
oWorksheet.PageSetup.PrintArea = cRange
oWorksheet.PageSetup.RightHeader = "Page &P/&N"
oWorksheet.Printout()
プレビューを表示する場合は
oWorksheet.PrintPreview()
23.保存
oWorkbook.Save() Book nがファイル名になる
oWorkbook.SaveAs(“パス名\ファイル名”) 名前を付けて保存する場合
Webページとして保存する場合
oWorkbook.SaveAs("c:\temp\test1.html", 44)
xlHTML 44
保存したWebページをIEで開いてみた、アイデアしだいでは使えるかも?
24.Excelオブジェクトの開放
oExcel.Quit() Excelを終了する。
RELEASE oExcel 作成したExcelオブジェクトを開放する(この時点で、タスクが終了します、タスクマネージャーで確認してください。)
注意:作成したブックを保存せずに終了すると、毎回「’Book1’への変更を保存しますか?」のダイアログボックスが表示されます。このダイアログボックスを表示させずにオブジェクトを開放したい場合には、以下のコマンドを実行すればダイアログボックスの表示を抑制できます。
oWorkbook.Saved = .T.
(oExcel.Quit() を実行する前に実行のこと)
Excelオブジェクトの調査方法
VFPのObject Browserを開いて、「Open Type Library」(左上のアイコン)をクリックし、OpenダイアログボックスのCOM Libraryタブをクリック、Microsoft Excel nn.m Object Libraryにチェックを付けてOKボタンを押します。
Excel組込定数の値は constantsで調べることができます、又 各メソッドに渡すパラメータも調べることができます。
FoxProのオブジェクトブラウザ
Excel組込定数は、Microsoftのサイトに文書番号 407881, 407882, 407883でドキュメントされています。(但し、Excel95)
別の方法として、Excelの「ツール」−「マクロ」からVisual Basic Editorを開いて、イミディエイト ウィンドウに ? xlHTML と入力すれば組込定数の値を知ることができます。