ラベル ドキュメント操作 の投稿を表示しています。 すべての投稿を表示
ラベル ドキュメント操作 の投稿を表示しています。 すべての投稿を表示

2011年4月30日土曜日

ドキュメントが開いたときにフォームを表示する

この項は、スプレッドシートドキュメントが開いた時にダイアログを表示
させる方法について。
「無題1.ods」ドキュメントが開いたときに、「Dialog1」フォームを表示させる
為の手順を考える。ここで、「Dialog1」は「フォームから別のフォームを開く」
の項で使用したものを流用する。
また、「Dialog1」フォームを開くマクロは、「フォームを開く」の項で用いた
マクロ「ExampleOpenDialog1」をそのまま流用する。
  
1. メニューの「表示」→「ツールバー」→「カスタマイズ」を選択

  
2. 「カスタマイズ」ウィンドウが開いたら「イベント」タブを選択し、イベント一覧
   の中の「文書が開いた時」を選択し、「マクロ」ボタンをクリック
  
3. 「マクロセレクター」ウィンドウが表示されたら、「無題1.ods」のマクロ一覧
   より「ExampleOpenDialog1」を選択し「OK」ボタンをクリック
  
4. 再び「カスタマイズ」ウィンドウに戻り、選択したマクロが「割り当てられた
   アクション」列に表示されていることを確認し、「OK」ボタンをクリックする。
  
以上の手順でドキュメントが開くときのイベントにフォームを開くマクロを割り
当てることにより、下図のように、ドキュメントが開いた時にフォームが表示
される。
  
今回の例と同様に、「カスタマイズ」ウィンドウにあるイベントの一覧にマクロ
を割り当てることにより、Calc アプリケーションやドキュメントのイベントに
対応したイベント駆動型の処理を作成することができそうである。

2011年4月13日水曜日

アクティブドキュメントを取得する

Calc では Excel の ActiveWorkbook に相当するオブジェクトはない為、
アクティブになっているドキュメントを取得する為には、StarDesktop
オブジェクトの CurrentComponent プロパティを使用する。
  
以下はアクティブドキュメントのファイル名、URL 名 とパス名をメッセージ
ボックスに表示する例である :
  
Sub ExampleGetActiveDoc()
       Dim objDoc As Object
       Dim strFilename As String
       Dim strUrl As String
       Dim strPathname As String
       objDoc = StarDesktop.CurrentComponent
       '
       'Title プロパティでファイル名を取得
       strFilename = objDoc.Title
       '
       'URL プロパティでURL 名を取得 
       strUrl = objDoc.URL
       '
       'ConvertFromUrl 関数でパス名を取得
       strPathname = ConvertFromUrl(strURL)
       '
       Msgbox("ファイル名 : " & strFilename & Chr$(13) & _
                      "URL 名 : " & strUrl & Chr$(13) & _
                      "パス名 : " & strPathname)
End Sub

  
メッセージボックスへの表示内容は下記の通り :
  
  
ThisComponent を閉じたり、上書保存したり、或いは、名前を付けて
保存するサンプルコードを記載したが、アクティブドキュメントについて
も同様に記述できる。例えば、名前を付けてアクティブドキュメントを
保存する例は下記の通り :
  
Sub ExampleSaveAsActiveDoc()
       Dim objDoc As Object
       objDoc = StarDesktop.CurrentComponent
       objDoc.storeAsURL("file:///D:/SampleFolder/sample.ods", Array())
End Sub

  
尚、上記のサンプルコード中にあった ConvertFromUrl 関数とは、URL
形式のファイル名をパス名に変換する関数である。書式は下記の通り :
  
   ConvertFromUrl(UrlFilename)
  
UrlFilename には URL 形式のファイル名を指定する。
戻り値は、ファイルの絶対パスを表す文字列が返される。

名前を付けてドキュメントを保存する

Sub ExampleSaveAs()
       ThisComponent.storeAsURL("file:///D:/SampleFolder/sample.ods", Array())
End Sub

  
名前を付けてドキュメントを保存する場合は、(カレントドキュメントの場合
は) ThisComponent オブジェクトの storeAsURL メソッドを使用する。
上記メソッドの第一引数に URL 形式のファイル名を指定すると、その
ファイル名でドキュメントが保存される。
ConvertToUrl 関数を使用すれば、通常のファイル名を指定することが
できる。
  
Sub ExampleSaveAs2()
       Dim strUrl As String
strUrl = ConvertToUrl("D:\SampleFolder\sample.ods")

       ThisComponent.storeAsURL(strUrl, Array())
End Sub

2011年4月12日火曜日

ドキュメントを上書保存する

Sub ExampleSaveAndCloseThisDoc()
       If ThisComponent.isModified Then
              Msgbox("ドキュメントは変更されているので、上書保存して閉じます")
              ThisComponent.store()
              ThisComponent.close(True)
       End If
End Sub
  
カレントドキュメントを上書保存する場合は、ThisComponent オブジェクト
の store メソッドを使用する。store メソッドは、あくまでも上書保存する
機能しかないので、
  
ThisComponent.store()
  
のみ実行した場合、ドキュメントは閉じない。上記サンプルコードでは
  
ThisComponent.close(True)
  
を実行することによって、上書保存した後ドキュメントが閉じることが
できる。
  
また、上記のコードでは、ThisComponent オブジェクトの isModified
プロパティを用いて、ドキュメントが更新されていることを確認している。
isModified プロパティは、ドキュメントが更新されている場合は True を、
更新されていない場合は False を値として返す。

ドキュメントを保存せず閉じる

Sub ExampleCloseThisDoc()
ThisComponent.close(True)
End Sub
  
実行しているプロシージャが記述されているドキュメント、すなわち、
Excel のThisWorkbook に相当するスプレッドシートドキュメントを
以後、カレントドキュメントと呼ぶこととする。
  
カレントドキュメントを、更新の有無に関わらず、保存せず閉じる
には、ThisComponent オブジェクトの close メソッドを使用する。
このとき、引数には True を指定する。
因みに、引数に False を指定しても、ドキュメントが保存されずに
閉じられてしまった。引数の True の意味は不明であるが、他の
サイトを拝見すると、True が指定してあるので、お呪い代わりに
していしておいた方が良さそうである。

2011年4月11日月曜日

Excel の ThisWorkbook について補足

LibreOffice Calc には Excel のThisWorkbook に相当するオブジェクトとして
ThisComponent オブジェクトがある。
  
話しが脱線してExcel の話題になってしまうが、
  
ThisWorkbook と ActiveWorkbook
  
の違いについて記す(自分の為にも)。知識は厳密である方が望ましいので。
  
二つのブック Book1.xls と Book2.xls を用意し、Book1.xls に下記プロシージャ
を記述する :
  
Sub Test1()
MsgBox "ThisWorkbookの名前は : " & ThisWorkbook.Name & vbCrLf & _

                      "ActiveWorkbookの名前は : " & ActiveWorkbook.Name
End Sub
  
Book1.xls を選択(アクティブ)して状態で Test1 プロシージャを実行すると
結果は、
  
  
これに対して、Book2.xls を選択した状態で Test1 プロシージャを実行
すると、メッセージボックスに表示される内容が下記の通り、微妙に
異なる :
  
  
ThisWorkbook については、どちらのブックがアクティブかに関わらず
Name プロパティは「Book1」を返すが、ActiveWorkbook については
選択されているブックによって Name プロパティの値は変わってくる。
以上のことからわかるように、ThisWorkbook と ActiveWorkbook の
違いは下記の通りである :
  
ThisWorkbook : 実行しているプロシージャが記述されているブック
  
ActiveWorkbook : 実行されているプロシージャがどのブックに記述
                        されているかに関わらず、アクティブ(選択されて
                        いる)なブック
  
以上の記述は下記資料を参考にさせて頂いた :

EXCEL-LENCE web

2011年4月10日日曜日

既存ドキュメント(ブック)を開く

Sub ExampleOpenDoc()
Dim objDoc As Object
  objDoc = StarDesktop.loadComponentFromURL _
                        ("file:///D:/SampleFolder/sample.ods", "_blank", 0, Array())
End Sub
  
既に存在する ODS ドキュメントを開く場合も StartDesktop オブジェクトの
loadComponentFromURL メソッドを使用する。この場合、第一引数には、
対象のドキュメントファイルを URL 形式で指定する。上記例は、D ドライブ
のSampleFolder フォルダにある sample.ods ドキュメントを開くコードである。
  
ファイルパスを指定する方法もある。下記プロシージャは、ファイルの絶対
パスを ConvertToUrl 関数を使用して URL 形式に変換している。
  
Sub ExampleOpenDoc2()
  Dim objDoc As Object
       Dim strUrl As String
strUrl = ConvertToUrl("D:\SampleFolder\sample.ods")
objDoc = StarDesktop.loadComponentFromURL(strUrl, "_blank", 0, Array())
End Sub
  
ここで、ConvertToUrl 関数の書式は下記の通り :
  
ConvertToUrl(Pathname)
  
Pathname には、ファイル名を表す文字列式を指定する。フォルダ名、及び、
ドライブ名を含めて指定することも可。

新規ドキュメント(ブック)の作成

Sub ExampleCreateNewDoc()
       Dim objNewDoc As Object
       objNewDoc =  StarDesktop.loadComponentFromURL _
                                 ("private:factory/scalc", "_blank", 0, Array())
End Sub
  
不勉強の為、LibreOffice / OpenOffice のオブジェクトモデルを全くと言って
良いほど理解していないため、「参考文献」にあるサイトよりコードを「拝借」し、
実際Calc で動作確認をした結果、「ちゃんと動いたもの」を、以降掲載する。
こういういい加減なことをしてはいけないのは重々承知はしているが、並行
して勉強に努める所存ですので、何卒ご容赦のほどを。
  
推察するに StarDesktop オブジェクトは、Excelの Application オブジェクト
に相当するもののようである。loadComponentFromURL メソッドについても、
詳細はわからず。。。