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のマクロの使い方が記載されているサイトがありましたら、お教えください。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2012/11/12 08:56:52
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:fiwa No.2

回答回数1200ベストアンサー獲得回数253

ポイント200pt

質問文にあるスクリプト例のメソッドが間違っています。
最後から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

id:fiwa

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

2012/11/11 23:39:55
id:hathi

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

2012/11/12 08:55:27

その他の回答1件)

id:oil999 No.1

回答回数1728ベストアンサー獲得回数320

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

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

id: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
これでは、うまくできませんでした。

2012/11/11 17:24:37
id:fiwa No.2

回答回数1200ベストアンサー獲得回数253ここでベストアンサー

ポイント200pt

質問文にあるスクリプト例のメソッドが間違っています。
最後から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

id:fiwa

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

2012/11/11 23:39:55
id:hathi

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

2012/11/12 08:55:27

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません