OpenOfficeの話で、いままで印刷とデータベースの話を書いたので、2つあわせて
データベース(Base)の内容を、表計算(Calc)に書いて印刷するマクロについて取り上げてみます。
■仕様
●C:¥temp¥テスト.ods(¥は、本当は半角)にあるOpenOffice Calc(表計算)の"テスト"というシートを開き、
●データベース名が"テスト用"という名前の、データベースをアクセスして、
"Select * From 顧客テーブル"
を実行して、顧客テーブルの内容を受け取り
●DBの内容を
1項目目をA桁、
2項目目をB桁、
3項目目をC桁、
4項目目をD桁、
に、1行目から、1レコードづつ、順に、上記の「テスト」というシートに書いて
印刷する
■ソース
ソースはこんなかんじです。
sub Main dim document as object dim dispatcher as object dim args1(1) as new com.sun.star.beans.PropertyValue Dim oDoc as object '**** データベース関係 Dim DatabaseContext as object Dim DataSource as Object Dim Connection as Object Dim Statement as Object Dim ResultSet as Object '**** スプレッドシートを開く sURL = ConvertToURL("C:¥temp¥テスト.ods") oDoc = starDesktop.loadComponentFromURL(sURL,"_default",0,Array()) '**** 値を設定する Sheet= oDoc.Sheets.getByName("テスト") ' シートを選ぶ REM ***** データベースのコネクション ***** DatabaseContext=createUnoService("com.sun.star.sdb.DatabaseContext") DataSource=DatabaseContext.getByName("テスト用") REM ***** SQLの実行 ***** Connection = DataSource.GetConnection("","") Statement = Connection.createStatement() ResultSet= Statement.executeQuery("Select * From 顧客テーブル") REM ***** レコードをワークシートに設定 ***** If IsNull(ResultSet) Then MsgBox("レコードがありません") Else i = 0 While ResultSet.next Cell =Sheet.getCellByPosition(0,i) Cell.setString(ResultSet.getString(1)) Cell =Sheet.getCellByPosition(1,i) Cell.setString(ResultSet.getString(2)) Cell =Sheet.getCellByPosition(2,i) Cell.setString(ResultSet.getString(3)) Cell =Sheet.getCellByPosition(3,i) Cell.setString(ResultSet.getString(4)) i = i + 1 Wend End If '**** 印刷 mPrintopts = oDoc.getPrinter() mPrintopts(0).Name = "CopyCount" mPrintopts(0).Value = 1 '1個出力 oDoc.Print(mPrintopts()) end sub |
(上記¥は、本当は半角)