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にコピーしてください。

                    

16D9のセルに金額の合計を求める計算式を設定する

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で開いてみた、アイデアしだいでは使えるかも?

 

                           24Excelオブジェクトの開放

oExcel.Quit()                     Excelを終了する。

RELEASE oExcel             作成したExcelオブジェクトを開放する(この時点で、タスクが終了します、タスクマネージャーで確認してください。)

 

注意:作成したブックを保存せずに終了すると、毎回「’Bookへの変更を保存しますか?」のダイアログボックスが表示されます。このダイアログボックスを表示させずにオブジェクトを開放したい場合には、以下のコマンドを実行すればダイアログボックスの表示を抑制できます。

                                           oWorkbook.Saved = .T.

                                            oExcel.Quit() を実行する前に実行のこと)

 

 

Excelオブジェクトの調査方法

VFPObject 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 と入力すれば組込定数の値を知ることができます。