* 帳票作成時のシートへのデータを一括書き込みの方法 [#c0285b60]
 |RIGHT:|LEFT:|c
 |~ページ|[[OpenOffice.org FAQの登録ページ]]|
 |~投稿者|匿名|
 |~分類|#listbox3(Q&A,faq03,class)|
 |~優先順位|#listbox3(普通,faq03,priority)|
 |~状態|#listbox3(完了回答待ち,faq03,state)|
 |~状態|#listbox3(完了,faq03,state)|
 |~カテゴリー|#listbox3(Calc 表計算,faq03,category)|
 |~投稿日|2010-02-17 07:57:55 (水)|
 |~OS|WindowsXP|
 |~依存するページ||
 |~バージョン|#listbox3(3.1.1,faq03,version)|
 
 ** メッセージ [#z15f2c6e]
 |LEFT:|c
 |回答ページでは行末に「~」を付加する必要はありません|
 シートのセルへのデータ書き込みの高速処理として~
 setdataArrayを使う方法が他のサイトで紹介されているんですが、~
 セルに文字列を書き込んで帳票を作成するような場合はどうにすれば~
 いいんでしょうか?~
 特定のセルにsetdataArrayを使って文字列を書き込む方法を~
 教えていただけないでしょうか?~
 document.getCellRangeByName("A2").String = "品番"~
 document.getCellRangeByName("B2").String = "製品名"~
 document.getCellRangeByName("C2").String = "製品名"~
 上記のような処理を~
 celldataに文字列をセットして~
 document.getCellRangeByPosition(0,0,x,y).setDataArray(celldata)~
 で一括書き込みすることはできるのでしょうか?
 ほかにもっと効率的な方法があれば教えていただきたいです。
 よろしくお願いいたします。
 
 
 ----
 ***無題 [#j53a4615]
 >tani (2010-02-17 09:19:00 (水))~
 ~
 >celldataに文字列をセットして~
 >document.getCellRangeByPosition(0,0,x,y).setDataArray(celldata)~
 >で一括書き込みすることはできるのでしょうか?~
 ~
 可能です。~
 ~
 >ほかにもっと効率的な方法があれば教えていただきたいです。よろしくお願いいたします。~
 ~
 例えば元データがCSVであれば、~
 StarDesktop.LoadComponentFromURL(○○)~
 とかで直接読み込んだほうが早いと思います。~
 
 //
 ***入力済みのドキュメントを使う方法 [#z36b2385]
 >M.Kamataki (2010-02-17 10:54:15 (水))~
 ~
 「品番」「製品名」などの文字列を入力済みのドキュメントを用意しておき、そのドキュメントの特定の位置にデータをマクロで書き込む方法もあると思います。~
 ~
 マクロを簡略化できるので、プログラミングも楽になると思います。~
 
 //
 ***シートへの一括書き込みの方法を具体的に教えて頂きたいです。 [#nef4840d]
 >匿名 (2010-02-17 11:44:14 (水))~
 ~
 任意のセル位置に文字列を一括で書き込むコードを~~
 具体的に教えて頂けないでしょうか?たとえば、~~
 品番、製品名、価格という固定の文字タイトル行の下に~~
 別シートから入力する商品の品番、製品名、価格が30行に渡って~~
 印字される1ページの商品一覧を作成する場合はどのようにして~~
 setDataArrayを使えばいいのでしょうか?~
 
 //
 ***無題 [#fa49683a]
 >tani (2010-02-17 13:58:42 (水))~
 ~
 setDataArrayの使い方は以下のような感じです。~
  thiscomponent.getSheets().getByIndex(0).getCellRangeByname("A2:C3").setDataArray(Array(Array("aaa2", "bbb2", "ccc2"), Array("aaa3", "bbb3", "ccc3")))
 ~
 ただ、別のシートにデータがあるのであれば、単純にコピペの動作とかをマクロ記録でとったコードでもいいんじゃないか、という気がします。~
 
 //
 ***無題 [#e46eb65c]
 >ike@九州 (2010-02-22 14:21:02 (月))~
 ~
 横からすみません~
 Tsunoda さんが詳しく解説されています~
 http://blog.livedoor.jp/addinbox/archives/51265222.html~
 ~
 元のデータをどのように選別するのか述べられていないので適当に元データ作成してますが~
 以下のように応用してます~
  Sub Main
   oTargetSheet = ThisComponent.getSheets.getByName("Sheet2")
   oSheet = ThisComponent.getSheets.getByName("Sheet1")
   oRange = oTargetSheet.getCellRangeByName("A3:C32")
   'セル範囲を消去(文字、数値、数式)
   oRange.clearContents(31)
   
   'セル範囲を配列に格納
   vntArray = oRange.getDataArray
   
   '行数繰り返す --- vntArray(行インデックス)(列インデックス) = データ
   For nRow = 0 to UBound(vntArray)
   
     'A列 文字
      vntArray(nRow)(0) = oSheet.getCellByPosition(0,nRow).string
     
     'B列 文字
      vntArray(nRow)(1) = oSheet.getCellByPosition(1,nRow).string
     
     'C列 数値
      vntArray(nRow)(2) = oSheet.getCellByPosition(2,nRow).value
  
     '途中で抜ける場合条件文作成して Exit for を使う
   Next nRow
   
   '配列をセル範囲に適用
   oRange.setDataArray(vntArray)
  End Sub
 上記は文字列、数値をはっきりと区別できる場合です~
 ~
 データタイプが区別できない場合(混在)は~
 ~
 vntArray = oRange.getFormulaArray~
 〜~
 vntArray(nRow)(0) = oSheet.getCellByPosition(0,nRow).formula~
 〜~
 oRange.setFormulaArray(vntArray)~
 ~
 のようにすると、自動で文字、数値が判別されますね~
 
 //
 ***変更完了いたしました。 [#v15e3d5d]
 >匿名 (2010-02-26 07:54:06 (金))~
 ~
 報告が遅くなって申し訳ありません。~
 setDataArrayでのシートへの書き込み処理~
 変更が完了しました。~
 いろいろとご指導いただきありがとうございます。~
 
 //
 #article