** [[OOobbs2/132]] [#y4d6c685] -''サマリ'': シートごとのセルカーソル -''環境'': Calc -''状態'': 未解決 -''状態'': 解決 -''投稿者'': [[七志乃権兵衛]] -''投稿日'': 2008-08-27 (水) 01:26:08 *** 質問 [#yfafa4eb] アクティブでないシートのセルカーソルの位置を変えることは出来るのでしょうか? *** 回答 [#zf5a4126] - セルカーソル・・・。表示されているカーソルは .uno:GoToCell コマンドで移動できますが、現在のシート以外の範囲を指定するとアクティブなシートも同時に変わってしまいます。select で選択しても同様です。 -- はにゃ? &new{2008-08-27 (水) 08:51:38}; - すいません、質問があいまいでした。 アクティブなシートを他に移して、また戻すと選択状態などは解除されていますが、アクティブなシートの変更前にカーソルがあった位置にセルカーソルがあります。 その、アクティブではない時に保持しているカーソル(?)位置を変更したいのです。 -- 七志乃権兵衛 &new{2008-08-28 (木) 00:44:41}; - やはり、アクティブでないシート上のカーソルを動かそうとするとアクティブシートまで変更されてしまいます。 -- はにゃ? &new{2008-08-28 (木) 01:01:58}; - コントローラで ViewData を restoreViewData すればうまくいくかもしれません。試したことがないのですが・・・。 -- はにゃ? &new{2008-08-28 (木) 01:05:47}; - restoreViewData で変更できるようです。ViewData を理解するにはソースコードを調べる必要があるのですが・・・。 次のコードを実行すると ViewData が取得できます。 Sub viewdata_1 oDoc = ThisComponent oController = oDoc.getCurrentController() inputbox ,,oController.getViewData() End Sub たとえば、ViewData は次のようになっています。シートが三つのとき。 100/60/0;0;tw:270;0/0/0/0/0/0/2/0/0/0/0;; (1) 100/60/0;0;tw:270;3/2/0/0/0/0/2/0/0/0/0;; (2) 100/60/0;1;tw:270;3/2/0/0/0/0/2/0/0/0/0;1/7/0/0/0/0/2/0/0/0/0; (3) + 最初のシートのみ表示したことがある。カーソルは 0, 0 + 同上。カーソルが 3, 2 + 二番目のシートまで表示したことがある。二番目のシートのカーソルが 1, 7 0/0/0/0/0/0/2/0/0/0/0 は Column/Row/0/0/0/0/2/0/0/0/0 を指定します。 たとえば、次のようにすると二番目のシートのカーソルが 5, 7 に移動します。省略してある指定していないシートのカーソルは移動しません。 oController.restoreViewData(_ "100/60/0;1;tw:270;;5/7/0/0/0/0/2/0/0/0/0;") -- はにゃ? &new{2008-08-28 (木) 01:57:29}; - 変更する必要のないシートの指定は削除したほうがいいんでしょうかねぇ・・・? 次のコードでは元の ViewData をいじってシートインデックス 0 のシート上のカーソルを 4, 3 に移動します。 Sub viewdata_2 oController = ThisComponent.getCurrentController() sData = oController.getViewData() sData = MakeViewData(sData, 0, 4, 3) oController.restoreViewData(sData) End Sub 'returns ViewData to change the position of the cursor on the sheet 'sViewData: taken from getViewData method 'nSheetIndex: index of the sheet that you want to change the cursor 'nColumnIndex, nRowIndex: new position of the cursor on the sheet Function MakeViewData( _ sViewData As String, _ nSheetIndex As Integer, _ nColumnIndex As Long, nRowIndex As Long ) As String sData = Split(sViewData, ";") nSheetNum = 3 + nSheetIndex sSheetData = sData(nSheetNum) sSheetDesign = Split(sSheetData, "/") If UBound(sSheetDesign) > 0 Then sSheetDesign(0) = CStr(nColumnIndex) sSheetDesign(0) = CStr(nRowIndex) sSheetData = Join(sSheetDesign, "/") Else sSheetData = CStr(nColumnIndex) & "/" & CStr(nRowIndex) & "/0/0/0/0/2/0/0/0/0" End If Dim sNewData(UBound(sData)) As String For i = 0 To 2 step 1 sNewData(i) = sData(i) Next sNewData(nSheetNum) = sSheetData MakeViewData = Join(sNewData, ";") End Function 追記: %%このままだと画面の分割や表示位置がリセットされてしまいます。あとで修正してみます。%%修正済み。 -- はにゃ? &new{2008-08-28 (木) 02:20:47}; - そもそも ViewData はドキュメントのカーソル位置などをドキュメントに/から保存、復元するためにあります。こういった用途で使用しているのは見たことがありません、というか使用しているのも見たことがありませんが。 -- はにゃ? &new{2008-08-28 (木) 02:30:49}; - 細かくありがとうございます。 そうですか、あまり使われない方法なのですね。 他の方法でできないか模索し、だめなようならこの方法を使わせていだだきます。 -- 七志乃権兵衛 &new{2008-08-29 (金) 18:09:21}; #comment *** 感想,コメント,メモ [#q1669e39] - ViewData メモ。2.4.1。3 系では変更されている? 前半 1/2/3;4;5:6 + 表示倍率。2.4.1 ではシートごとに倍率が設定できない + 2 + 3 + アクティブシートインデックス + 5 + Horizontal Scrollbar の左位置 シートごと 1/2/3/4/5/6/7/8/9/10/11 + カーソルの Column + カーソルの Row + 横方向での区切り。1: 普通。2: Freeze + 縦方向での区切り。1: 普通。2: Freeze + 横方向での区切り位置 + 縦方向での区切り位置 + 7 + 左右区切り時には左の表示開始 Column インデックス + 左右表示区切り時の右側の表示開始 Column インデックス + 上下区切り時の上段の表示開始 Row インデックス + 上下区切り時には下段の表示開始 Row インデックス //横方向表示区切り時の左側の最左部での表示 Column インデックス -- はにゃ? &new{2008-08-28 (木) 02:33:57}; #comment |