人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

Libreoffice 3.6.3 のマクロの使い方:cellの削除の方法
このサイトにcellの削除スクリプト例があります。
http://openoffice3.web.fc2.com/OOoBasic_Calc.html#OOoIR2d
その中で、次のコードを単に転記して実行しました。
セルの削除(列全体が左方向に移動) Sub oDeleteCell
しかし、削除にならず、単なる列挿入のようになってしまいました。
CellRangeAddressの設定、com.sun.star.sheet.CellDeleteMode.COLUMNS も役立っていないようです。
こちらのマニュアルも列全体の挿入削除だけで、Rangeを指定してその範囲を削除して詰める方法が載っていません。
http://www.ja-fukuoka.or.jp/blog/archives/2012/05/exceltocalkpdf.php
どのようにすればよろしいのでしょうか。
Libreofficeのマクロの使い方が記載されているサイトがありましたら、お教えください。

●質問者: hathi
●カテゴリ:コンピュータ
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● oil999
●0ポイント

Cellの削除(列全体が左方向に移動)

http://openoffice3.web.fc2.com/OOoBasic_Calc.html#OOoIR2d


hathiさんのコメント
この方法でやったのですが、削除にならず、単なる列挿入のようになってしまいました。 Sub oDeleteCell Dim Doc As Object Dim Sheet As Object Dim CellRangeAddress As New com.sun.star.table.CellRangeAddress Dim iStart as integer Dim iRows as integer Dim iSheetindex as integer iSheetindex = 0 iStart = 0 iRows=3 Sheet =ThisComponent.getSheets().getByIndex(iSheetindex) CellRangeAddress.Sheet = iSheetindex CellRangeAddress.StartColumn = 0 CellRangeAddress.StartRow = iStart CellRangeAddress.EndColumn = 2 CellRangeAddress.EndRow = iStart + iRows-1 Sheet.insertCells(CellRangeAddress, com.sun.star.sheet.CellDeleteMode.COLUMNS) End Sub これでは、うまくできませんでした。

2 ● fiwa
●200ポイント ベストアンサー

質問文にあるスクリプト例のメソッドが間違っています。
最後から2行目のinsertCellsのところを、removeRangeに、COLUMNSをLEFTに書き換えてみて下さい。

Sub oDeleteCell 
Dim Doc As Object 
Dim Sheet As Object 
Dim CellRangeAddress As New com.sun.star.table.CellRangeAddress 
Dim iStart as integer 
Dim iRows as integer 
Dim iSheetindex as integer 
iSheetindex = 0 
iStart = 0 
iRows=3 
Sheet =ThisComponent.getSheets().getByIndex(iSheetindex) 
CellRangeAddress.Sheet = iSheetindex 
CellRangeAddress.StartColumn = 0 
CellRangeAddress.StartRow = iStart 
CellRangeAddress.EndColumn = 2 
CellRangeAddress.EndRow = iStart + iRows-1 
Sheet.removeRange(CellRangeAddress, com.sun.star.sheet.CellDeleteMode.LEFT)
End Sub

参考
セルと範囲 - Apache OpenOffice Wiki


fiwaさんのコメント
少し訂正しました。 CellRangeAddressの範囲だけ詰める場合は、CellDeleteMode.LEFTみたいですね。

hathiさんのコメント
ありがとうございました。 黒の地の中に示されている記述で、思う位置(範囲)を左詰めできました。 Sheet.removeRange(CellRangeAddress, com.sun.star.sheet.CellDeleteMode.LEFT)
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ