指定された行をループし、定義済みのヘッダーを検索してから列全体 (ヘッダーを含む) を削除する次のマクロを Calc で作成しました。コードは機能し、関連する列は削除されますが、
私は欠陥を発見しました。事前定義されたリストのヘッダーのいずれかがファイルにない場合、「検索キーが見つかりません」というエラー メッセージが表示され、代わりに他の関連のない列が削除されます (たとえば、コードが「Text1」を検索している場合など)。ただし、"Text2" が見つからない場合、エラー メッセージがポップアップ表示され、無関係な列が削除されます)。
このファイルに存在しない場合、ループ内の次の値に自動的にスキップする、ある種の検証チェックが必要です。
条件:
- ヘッダー行は常に 7 です。
- リスト アイテム 関連する列は、言及された行のどこにでも表示できます。
ヘッダーが見つかった場合は、列全体を削除する必要があります (
後で空白の列は残らないでください)。一部のヘッダーが欠落している場合、コードは自動的に次の
検索値に移動する必要があります。
必要なことを実行する Excel コード例をいくつか見つけましたが、Calc/Excel コードがわずかに異なるため、私の場合は使用できません。
どんな助けでも大歓迎です。
sub DeleteSystemFields
rem ----------------------------------------------------------------------
rem define variables
dim document as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
rem switch to active cell A7
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "ToPoint"
args1(0).Value = "$A$7"
dispatcher.executeDispatch(document, ".uno:GoToCell", "", 0, args1())
rem search conditions
dim args4(17) as new com.sun.star.beans.PropertyValue
args4(0).Name = "SearchItem.StyleFamily"
args4(0).Value = 2
args4(1).Name = "SearchItem.CellType"
args4(1).Value = 0
args4(2).Name = "SearchItem.RowDirection"
args4(2).Value = true
args4(3).Name = "SearchItem.AllTables"
args4(3).Value = false
args4(4).Name = "SearchItem.Backward"
args4(4).Value = false
args4(5).Name = "SearchItem.Pattern"
args4(5).Value = false
args4(6).Name = "SearchItem.Content"
args4(6).Value = false
args4(7).Name = "SearchItem.AsianOptions"
args4(7).Value = false
args4(8).Name = "SearchItem.AlgorithmType"
args4(8).Value = 1
args4(9).Name = "SearchItem.SearchFlags"
args4(9).Value = 65536
rem search criteria parameters - corresponds to args4(10) in the next section
args4(10).Name = "SearchItem.SearchString"
args4(10).Value = ""
args4(11).Name = "SearchItem.Locale"
args4(11).Value = 255
args4(12).Name = "SearchItem.ChangedChars"
args4(12).Value = 2
args4(13).Name = "SearchItem.DeletedChars"
args4(13).Value = 2
args4(14).Name = "SearchItem.InsertedChars"
args4(14).Value = 2
args4(15).Name = "SearchItem.TransliterateFlags"
args4(15).Value = 1280
args4(16).Name = "SearchItem.Command"
args4(16).Value = 3
args4(17).Name = "Quiet"
args4(17).Value = true
rem search values start
args4(10).Name = "SearchItem.SearchString"
args4(10).Value = "Text1"
dispatcher.executeDispatch(document, ".uno:ExecuteSearch", "", 0, args4())
dispatcher.executeDispatch(document, ".uno:DeleteColumns", "", 0, Array())
args4(10).Name = "SearchItem.SearchString"
args4(10).Value = "Text2"
dispatcher.executeDispatch(document, ".uno:ExecuteSearch", "", 0, args4())
dispatcher.executeDispatch(document, ".uno:DeleteColumns", "", 0, Array())
args4(10).Name = "SearchItem.SearchString"
args4(10).Value = "Text3"
dispatcher.executeDispatch(document, ".uno:ExecuteSearch", "", 0, args4())
dispatcher.executeDispatch(document, ".uno:DeleteColumns", "", 0, Array())
end sub