* カルク帳票への差込印刷 [#x9a7bab7]
 |RIGHT:|LEFT:|c
 |~ページ|[[OpenOffice.org FAQの登録ページ]]|
 |~投稿者|o-yasu|
 |~分類|#listbox3(要望,faq03,class)|
 |~優先順位|#listbox3(低,faq03,priority)|
 |~状態|#listbox3(Issues,faq03,state)|
 |~カテゴリー|#listbox3(Calc 表計算,faq03,category)|
 |~投稿日|2010-09-18 16:31:48 (土)|
 |~OS|win7|
 |~依存するページ|[[Issue #35410>http://ja.openoffice.org/issues/show_bug.cgi?id=35410]]|
 |~バージョン|#listbox3(3.2.1,faq03,version)|
 
 //////////バグ対策(以降マッチさせない)
 
 ** メッセージ [#s821954b]
 |LEFT:|c
 |回答ページでは行末に「~」を付加する必要はありません|
 お世話になります。
 
 宛名をセル参照にして、必要に応じて一枚ずつ出力するため、カルクでつくった帳票があります。
 
 それを使って、カルクで作っている宛名リストの分全て一気に出力したいのですが、良い方法はありませんか?
 
 ライターで作った帳票に差込印刷をするイメージなのですが・・・。
 エクセルでのマクロをいじった経験はあるので、マクロで繰り返し処理するようにしたら良いのかとも考えたのですが、OOoのマクロを理解できていないので、簡易な方法はないものかと思っています。
 
 よろしくおねがいします。
 
 -----
 ***IssueTrackerを調べてみました [#r4c9a6be]
 >M.Kamataki (2010-09-19 10:22:13 (日))~
 ~
 Calcに差し込み印刷機能を取り入れて欲しいという要望が、OpenOffice.orgの不具合・要望データベースに登録されていないか、調べてみました。以下のものが該当しそうです。ということで、Calcには差し込み印刷機能はないわけです。~
 ~
 mail merge database into Calc~
 http://ja.openoffice.org/issues/show_bug.cgi?id=35410~
 ~
 >簡易な方法はないものかと思っています。~
 ~
 Calcには差し込み印刷機能はありませんから、難しいですね。(マクロなら可能性はあるでしょう)~
 ~
 >カルクで作っている宛名リストの分全て一気に出力したいのです~
 ~
 OpenOffice.orgで実現するなら、Calcの宛名リストをデータソースに登録し、「ファイル」−「新規作成」−「ラベル」で宛名印刷用のWriterファイルを作成するのが、一番「簡易な方法」だと思います。~
 
 //
 ***マクロ例 [#effd45e9]
 >M.Kamataki (2010-09-19 18:14:56 (日))~
 ~
 Calcの帳票に出力という意味では全然ダメですが、とりあえず以下のマクロを操作中のCalcで実行すると、標準で利用できる「Bibliography」データベースの「biblio」テーブルから読み込んだ4つのフィールドを縦に並べてアクティブシートに書き出します。~
  Sub MailMergeByCalc
  Dim DatabaseContext as Object
  Dim DataSource as Object
  Dim Connection as Object
  Dim Statement as Object
  Dim ResultSet as Object
  Dim Sheet as Object
  Dim metadata as object
  Dim columnCount as integer
  Dim x as Integer
  Dim y as Integer
  Dim n as Integer
  
  ' DBとの接続部分
  DatabaseContext=createUnoService("com.sun.star.sdb.DatabaseContext")
  DataSource=DatabaseContext.getByName("Bibliography")
  Connection = DataSource.GetConnection("","")
  
  ' SQLのセット
  Statement = Connection.createStatement()
  ResultSet= Statement.executeQuery( "SELECT ""ISBN"" ,  ""Title"" , ""Author"" , ""Publisher"" FROM ""biblio""" )
  
  ' Calcのシートはアクティブシート
  Sheet = thisComponent.currentController.ActiveSheet
  
  ' ResultSetのメタデータからフィールド(カラム)数を取得
  metadata = resultSet.getMetaData
  columnCount = metadata.getColumnCount
  
  ' レコードの読み込みとCalcシートへの書き出し
  If  IsNull(ResultSet) Then
  		MsgBox("レコードがありません")
  	Else
  		x = 1 ' xがcol方向の座標値 例はB2から書き出し
  		While ResultSet.next
  		y = 1 ' yがrow方向の座標値
  		n = 1
  			While n <= columnCount
  			Sheet.getCellByPosition(x,y).String = ResultSet.getString(n)
  			n = n + 1
  			y = y + 1
  			Wend
  		x = x + 7
  		Wend
  End If
  
  ' データベースを閉じる
  Statement.Close()
  Connection.Close()
  Connection.Dispose()
  End Sub
 ※9/20 faq/4/164を参考にフィールド数をマクロで取得するよう変更~
 ~
 通常、Calcにデータベースのデータを書き出すサンプルは、横に1レコードが並ぶものが多いのですが、そのサンプの変数の「x」と「y」を入れ替え上記のようなサンプルにしてみました。~
 
 //
 ***シートを縦に使う [#q7ac6976]
 >M.Kamataki (2010-09-20 01:11:37 (月))~
 ~
 上記のマクロ例はシートを横に使うものでしたが、下記のように「レコードの読み込みとCalcシートへの書き出し」部分を変更するとシートを縦に使うようになります。~
  If  IsNull(ResultSet) Then
  		MsgBox("レコードがありません")
  	Else
  		x = 1 ' xがcol方向の座標値 例はB2から書き出し
  		y = 1 ' yがrow方向の座標値
  		While ResultSet.next
  		n = 1
  			While n <= columnCount
  			Sheet.getCellByPosition(x,y).String = ResultSet.getString(n)
  			n = n + 1
  			y = y + 1
  			Wend
  		y = y + 43
  		Wend
  End If
 
 //
 ***差し込み印刷(もどき)サンプル [#sc5c9458]
 >M.Kamataki (2010-09-21 12:16:11 (火))~
 ~
 色々考えたんですが、1ページずつPDFにするのが一番簡単そうだったので、マクロ版のCalc帳票の差し込み印刷(もどき)のサンプルを作成してみました。~
 ~
 &attachref(faq6_20sample4.ods);~
 ~
 サンプルファイルを読み込んだら、「PDFに出力」ボタンをクリックしてください。Bibliographyデータベースのbiblioテーブルから4つのフィールド値を1ページの帳票にしてPDF出力します。「Finish」というメッセージボックスが表示されたら、サンプルファイルと同じフォルダをチェックしてみてください。サンプルでは、WHERE句でレコードを絞り込んでいるので、帳票ファイルのファイル名から「〜_0001.pdf」という名称のPDFファイルを6つ生成します。~
 ~
 本番では適宜エラー処理を入れてください。~
 ~
 なお、もしBaseにデータが登録されているのなら、Sun Report Builder(いずれOracleブランドになります)で帳票を作成されたほうが大変楽だと思います。~
 
 //
 ***要望にします [#u8809b2e]
 >M.Kamataki (2010-09-21 12:23:08 (火))~
 ~
 Calcで差し込み印刷機能を取り入れて欲しいという要望がIssueTrackerに登録されてるので、ご質問自体は「要望」にします。~
 ~
 一応、IssueにはCCしておきました。もし、機能追加をお望みでしたら、o-yasuさんも「当サイトの使い方/不具合・要望を出す」の「5.実装を待ちます。」をお読みになり、投票かCCをお願いします。~
 
 //
 ***Excelでも同様の要望が [#e69c390a]
 >M.Kamataki (2011-08-04 18:07:57 (木))~
 ~
 Excelでも事情は同じようです。以下のような質問がありました。~
 ~
 excelからexcelへの差し込み印刷~
 http://oshiete.goo.ne.jp/qa/3597313.html~
 ~
 ベストアンサーで紹介された記事が以下です。~
 ~
 Excelでカンタン差し込み印刷~
 http://pc.nikkeibp.co.jp/article/NPC/20070301/263710/~
 ~
 サンプルはVBA付きExcelファイルですが、OpenOffice.org/LibreOffice、いずれも3.3で問題なくマクロも動作します。Calcでも参考になりそうなので、情報を加えてみました。~
 
 //
 #article