「Web出版サイト」ベータ公開

Q&A集[?]

当サイトでのご質問の受付は終了しました

すべてのコンテンツを読み込み専用としたため、回答欄からも投稿できません

Apache OpenOffice/LibreOfficeのご質問はそれぞれのフォーラムへご投稿ください

質問コーナー

サイト内検索

分類メニュー

関連サイト


本日:1
昨日:0
総数:1583
現在:1


帳票作成時のシートへのデータを一括書き込みの方法

ページOpenOffice.org FAQの登録ページ
投稿者匿名
分類
edit/refer
優先順位
edit/refer
状態
edit/refer
カテゴリー
edit/refer
投稿日2010-02-17 07:57:55 (水)
OSWindowsXP
依存するページ
バージョン
edit/refer

メッセージ

回答ページでは行末に「~」を付加する必要はありません

シートのセルへのデータ書き込みの高速処理として
setdataArrayを使う方法が他のサイトで紹介されているんですが、
セルに文字列を書き込んで帳票を作成するような場合はどうにすれば
いいんでしょうか?
特定のセルにsetdataArrayを使って文字列を書き込む方法を
教えていただけないでしょうか?
document.getCellRangeByName("A2").String = "品番"
document.getCellRangeByName("B2").String = "製品名"
document.getCellRangeByName("C2").String = "製品名"
上記のような処理を
celldataに文字列をセットして
document.getCellRangeByPosition(0,0,x,y).setDataArray(celldata)
で一括書き込みすることはできるのでしょうか? ほかにもっと効率的な方法があれば教えていただきたいです。 よろしくお願いいたします。


無題

tani (2010-02-17 09:19:00 (水))

>celldataに文字列をセットして
>document.getCellRangeByPosition(0,0,x,y).setDataArray(celldata)
>で一括書き込みすることはできるのでしょうか?

可能です。

>ほかにもっと効率的な方法があれば教えていただきたいです。よろしくお願いいたします。

例えば元データがCSVであれば、
StarDesktop.LoadComponentFromURL(○○)
とかで直接読み込んだほうが早いと思います。

入力済みのドキュメントを使う方法

M.Kamataki (2010-02-17 10:54:15 (水))

「品番」「製品名」などの文字列を入力済みのドキュメントを用意しておき、そのドキュメントの特定の位置にデータをマクロで書き込む方法もあると思います。

マクロを簡略化できるので、プログラミングも楽になると思います。

シートへの一括書き込みの方法を具体的に教えて頂きたいです。

匿名 (2010-02-17 11:44:14 (水))

任意のセル位置に文字列を一括で書き込むコードを~
具体的に教えて頂けないでしょうか?たとえば、~
品番、製品名、価格という固定の文字タイトル行の下に~
別シートから入力する商品の品番、製品名、価格が30行に渡って~
印字される1ページの商品一覧を作成する場合はどのようにして~
setDataArrayを使えばいいのでしょうか?

無題

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")))


ただ、別のシートにデータがあるのであれば、単純にコピペの動作とかをマクロ記録でとったコードでもいいんじゃないか、という気がします。

無題

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)

のようにすると、自動で文字、数値が判別されますね

変更完了いたしました。

匿名 (2010-02-26 07:54:06 (金))

報告が遅くなって申し訳ありません。
setDataArrayでのシートへの書き込み処理
変更が完了しました。
いろいろとご指導いただきありがとうございます。

お名前:
題名: