配列で取得したセルのフォント色 †
ページ | OpenOffice.org FAQの登録ページ |
---|---|
投稿者 | S-Osaka |
分類 | |
優先順位 | |
状態 | |
カテゴリー | |
投稿日 | 2010-10-06 09:28:24 (水) |
OS | winvista |
依存するページ | |
バージョン |
メッセージ †
回答ページでは行末に「~」を付加する必要はありません |
いつもお世話になります。
処理速度が極端に遅いので
.getDataArray()でセル範囲のデータを取って 数値をそれぞれ加工処理し .setDataArray()で一括書込み と言うことをやっています。
さて、この書込みの際にデータ視覚化のためにフォントの色をそれぞれの結果ごとに指定したいのですが、これはデータの一括書込みと共に範囲に一括指定と言うことはできるのでしょうか?
ちなみに今は個別に指定しています。
よろしくお願いします。
無題 †
tani (2010-10-06 10:59:02 (水))
データの結果によって書式を変えたいということでしょうか。
単純に考えると、マクロでやるのではなく、あらかじめその範囲に条件付き書式を設定しておく、とかが効率が良いのではないかなと思います。
ありがとうございます †
S-Osaka (2010-10-06 12:07:58 (水))
なるほど、マクロで条件付書式をコントロールできるかですが、参考にさせていただきます。
ただ、打ち出す計算結果によって条件はまちまちです。
例えばある結果ではセルxが1か0かで色を変える、また別の結果ではセルyがセルzより大きいか小さいか同じかで色を変える
と言った具合です。
七種類くらいの株価指標計算を切り替えグラフ表示しています。
グラフはcalcのチャートではなく故あって自作のキャラクタをセル上に並べた特殊なものです。
お恥ずかしいのですがリアルタイムで現在の市場イメージをビジュアル化してつかむためにこういう変わったことをしております。
もしあれば一括でフォントカラーを変えたいのですが・・、
配列で一括処理しても個別処理するエクセルの3〜5倍の時間がかかるのでいろいろニツマっています。
ループと条件文に弱いようです
ThisComponent.addActionLock()などを使ってもなぜか書き出す順番が微妙にみえてますし・・・・
どうぞよろしくお願いします。
無題 †
S-Osaka (2010-10-06 21:56:22 (水))
なるほど
フラグを立てるダミーセルを作ってそこのフラグを毎回マクロで制御と言うことですね。
条件付書式を使うのは初めてなので教えていただいた意味がピンときませんでした。
大変失礼しました。
無題 †
tani (2010-10-07 09:46:47 (木))
すいません。ちょっと説明不足だったかもしれませんね。
・データをシート上に展開する部分は、マクロで行う
・データによって書式を切り替えるのは、あらかじめシート上に設定しておいた条件付き書式で行う
みたいな感じをイメージしてました。
条件付き書式には数式も使えるようですので、IF文をネストさせたりAND, ORなどを組み合わせるとかなり複雑な条件分岐もできると思います。
ありがとうございます †
S-Osaka (2010-10-07 10:35:37 (木))
大体そのような使い方を試してみました。
ひとまず、打ち出す指標ごとにフラグ用セルにbyte変数でフラグをたててそのフラグ数値でフォント色を制御と言うことでやっています。
無題 †
S-Osaka (2010-10-13 09:34:37 (水))
どなたかこの項の本題に関するアドバイスをいただけませんでしょうか。
よろしくお願いします。
サンプルの提供は可能ですか †
M.Kamataki (2010-10-13 10:56:51 (水))
どこでつまずいているのかがわかるサンプルがあると良いですね。作成途中でかまわないので、アップしてみてはどうでしょうか。当ページへのファイルの添付方法は、「当サイトの使い方/高度な使い方」をご覧ください。
無題 †
S-Osaka (2010-10-13 20:13:40 (水))
つまずいてはないと思うのですが・・・、
.getDataArray()でセル範囲のデータを取って 数値をそれぞれ加工処理し .setDataArray()で一括書込み
この際に配列範囲内のセルのフォント色を配列の結果を反映させるときに一括で指定・変更させる方法はないのかな?
と言うことが知りたいのですが、
よろしくお願いします。
現状簡単な方法はないようです †
ike@九州 (2010-10-14 11:30:55 (木))
各色のセル範囲コンテナにセルを追加して行き、最後にフォントカラーを変更するという手順ですが"速度的に速い"のかは不明です
Sub Main On Error goto ErrorHandler oDoc = Thiscomponent oSheet = oDoc.getSheets.getByIndex(0) oCellRange = oSheet.getCellRangeByPosition(0,0,50,50) '行の高さの調整停止 oDoc.IsAdjustHeightEnabled = False oDoc.lockControllers() For i = 0 To 50 Step 1 For j = 0 To 50 Step 1 oCellRange.getCellByPosition(j,i).setString("■■■") Next Next 'セル範囲コンテナ初期化 oBRanges = oDoc.createInstance("com.sun.star.sheet.SheetCellRanges") oRRanges = oDoc.createInstance("com.sun.star.sheet.SheetCellRanges") oGRanges = oDoc.createInstance("com.sun.star.sheet.SheetCellRanges") oYRanges = oDoc.createInstance("com.sun.star.sheet.SheetCellRanges") For n = 0 to 48 oRange = oSheet.getCellRangeByPosition(n,n,n,n+2) nFlag = n mod 4 Select Case nFlag case 0 oBRanges.addRangeAddress(oRange.getRangeAddress(),false) case 1 oRRanges.addRangeAddress(oRange.getRangeAddress(),false) case 2 oGRanges.addRangeAddress(oRange.getRangeAddress(),false) case 3 oYRanges.addRangeAddress(oRange.getRangeAddress(),false) case else End select Next n oBRanges.charcolor = "&H0000ff" oRRanges.charcolor = "&Hff0000" oGRanges.charcolor = "&H00ff00" oYRanges.charcolor = "&Hffff00" ErrorHandler: oDoc.unlockControllers() End Sub
ありがとうございました。 †
S-Osaka (2010-10-14 19:38:22 (木))
いつもお世話になります。
自分のマクロに充ててみました。
addRangeAddressと言うのを知りませんでしたので大変勉強になりました。