我が社は現在、Microsoft社のOffice97からオープンソースのOpenOfficeに移行中です。
いままでも少しではあるがマクロを組んだりしてできるだけ事務処理が便利になるように努力をしてきた。Office97用のBasicは参考書が多く発売されていることもあって、比較的すんなりと作成することができた。
OpenOfficeには今までのマクロが使用できないので作り直す必要がある。
それは昔々「これからはC++だ」と言われた頃、私はC++を独学しようとした。しかしオブジェクト指向プログラミングという考え方につまずき、それ以来オブジェクト指向プログラミングという言葉がトラウマになっている。
NECのPC-8800やSHARPのX-1の頃のBASIC出身の私には理解できない。(当然、理解できる人もいるだろうけど・・・)あの頃は良かった・・・
「Rubyならばできるかも」と期待して参考書もごっそりと買ったあげく、やはりオブジェクト指向プログラミングが壁となってしまい本棚の肥やしになっている・・・
OpenOfficeのBasicもそのオブジェクト指向プログラミングなのだ。
現在、泣きがはいっています。
とりあえず、自分の記録用に現在作成中のプログラムを載せておきます。
詳しい説明をする気はさらさらないのですが、ざっと説明するとOpenOfficeの表計算ソフトCalcのB2セルの数値を読み込み、B1セルに1から先ほど読み込んだ数になるまで1つずつ足しながらpdfを出力するというものです。
sub main
dim SearchDot as integer
GetFilename
SearchDot = instr ( GetFilename,".")
oSheet = ThisComponent.Sheets(0)
oCellMax = oSheet.getCellRangeByName("B2")
oCellCount = oSheet.getCellRangeByName("B1")
for i = 1 to oCellMax.getValue
oCellCount.value = i
PDFPrint ( left(Getfilename,SearchDot-1) + "-" + Format( i , "00" ) + ".pdf"
next
end sub
function PDFPrint (FileName As string)
rem ファイル名を指定してpdfファイルを作成する。
rem FileName ファイル名
dim document as object
dim dispatcher as object
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dim args1(1) as new com.sun.star.beans.PropertyValue
args1(0).Name = "URL"
args1(0).Value = FileName
args1(1).Name = "FilterName"
args1(1).Value = "calc_pdf_Export"
dispatcher.executeDispatch(document, ".uno:ExportDirectToPDF", "", 0, args1())
end function
function GetFilename
rem ファイル名を取得する。
Dim oUrl As String
GetFilename = StarDesktop.CurrentComponent.getURL
End function
やっぱり、無理かも・・・
いままでも少しではあるがマクロを組んだりしてできるだけ事務処理が便利になるように努力をしてきた。Office97用のBasicは参考書が多く発売されていることもあって、比較的すんなりと作成することができた。
OpenOfficeには今までのマクロが使用できないので作り直す必要がある。
それは昔々「これからはC++だ」と言われた頃、私はC++を独学しようとした。しかしオブジェクト指向プログラミングという考え方につまずき、それ以来オブジェクト指向プログラミングという言葉がトラウマになっている。
NECのPC-8800やSHARPのX-1の頃のBASIC出身の私には理解できない。(当然、理解できる人もいるだろうけど・・・)あの頃は良かった・・・
「Rubyならばできるかも」と期待して参考書もごっそりと買ったあげく、やはりオブジェクト指向プログラミングが壁となってしまい本棚の肥やしになっている・・・
OpenOfficeのBasicもそのオブジェクト指向プログラミングなのだ。
現在、泣きがはいっています。
とりあえず、自分の記録用に現在作成中のプログラムを載せておきます。
詳しい説明をする気はさらさらないのですが、ざっと説明するとOpenOfficeの表計算ソフトCalcのB2セルの数値を読み込み、B1セルに1から先ほど読み込んだ数になるまで1つずつ足しながらpdfを出力するというものです。
sub main
dim SearchDot as integer
GetFilename
SearchDot = instr ( GetFilename,".")
oSheet = ThisComponent.Sheets(0)
oCellMax = oSheet.getCellRangeByName("B2")
oCellCount = oSheet.getCellRangeByName("B1")
for i = 1 to oCellMax.getValue
oCellCount.value = i
PDFPrint ( left(Getfilename,SearchDot-1) + "-" + Format( i , "00" ) + ".pdf"
next
end sub
function PDFPrint (FileName As string)
rem ファイル名を指定してpdfファイルを作成する。
rem FileName ファイル名
dim document as object
dim dispatcher as object
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dim args1(1) as new com.sun.star.beans.PropertyValue
args1(0).Name = "URL"
args1(0).Value = FileName
args1(1).Name = "FilterName"
args1(1).Value = "calc_pdf_Export"
dispatcher.executeDispatch(document, ".uno:ExportDirectToPDF", "", 0, args1())
end function
function GetFilename
rem ファイル名を取得する。
Dim oUrl As String
GetFilename = StarDesktop.CurrentComponent.getURL
End function
やっぱり、無理かも・・・