Bonjour,
Afin d'analyser un LOG, je tente de filtrer par macro le contenu d'un
fichier.
J'ai sur ma feuille1 mon LOG et sur ma feuille nommé ERROR la zone de
critère qui contient en C1 *le texte que je veux filtrer*
Le filtre extrait mes données vers la seconde lignes de la feuille ERROR
Si je tente de faire une recherche avec des * devant et après le texte,
mon filtre ne me retourne rien du tout
Auriez vous une idée sur ce qui manque est-ce que j'utilise bien
l'expression régulière ?
Est ce que ce code peut fonctionner avec la OOo 3.2.0 ?
Sub monFiltreSpecial
Dim mesCriteres as Object
Dim maPlage as Object
Dim optFiltre as Object
Dim maFeuille as Object
Dim maCellule as Object
Dim oDocument As Object
Dim oFeuille As Object
Dim oSheet As Object
oDocument = ThisComponent
oFeuille = oDocument.Sheets.getByName ("Feuille1")
oDocument.CurrentController.ActiveSheet = oFeuille
'feuille ou se trouve le LOG de départ importé d'un fichier csv
généré par mon système
' Je fais tout d'abord une sélection visuelle de la plage à filtrer
du début à la fin
' (comme avec un Ctrl Deb puis un Ctrl Maj Fin ou un un Ctrl Maj Down)
' C'est réalisé à l'aide de l'enregistreur car je n'ai pas compris
le fonctionnement du Curseurdecellule
dim document as object
dim dispatcher as object
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "Sel"
args1(0).Value = false
dispatcher.executeDispatch(document, ".uno:GoToStart", "", 0, args1())
rem dim args2(0) as new com.sun.star.beans.PropertyValue
rem args2(0).Name = "Sel"
rem args2(0).Value = true
rem dispatcher.executeDispatch(document, ".uno:GoToEndOfData", "",
0, args2())
dim args2(1) as new com.sun.star.beans.PropertyValue
args2(0).Name = "By"
args2(0).Value = 1
args2(1).Name = "Sel"
args2(1).Value = true
dispatcher.executeDispatch(document, ".uno:GoDownToEndOfData", "",
0, args2())
' Je récupère ici la taille de ma plage de données sélectionné
oCell = ThisComponent.CurrentSelection
DerniereLigne = oCell.RangeAddress.EndRow
DerniereColonne = 4 'oCell.RangeAddress.EndColumn
msgbox DerniereLigne & "," & DerniereColonne 'Affiche la taille
totale de mon csv jusque là c'est bon
' déclare la feuille cible
oFeuilleCible = oDocument.Sheets.getByName ("ERROR" )
' oCell = oFeuilleCible.getCellByPosition (0,0 )
maCellule = oFeuilleCible.getCellByPosition(0, 1) ' cellule de
destination du filtre (dessous la zone de filtre qui est situé en
ERROR.A1:E1)
maPlage =
Ofeuille.getCellRangeByPosition(0,0,DerniereColonne,DerniereLigne)
'plage à filtrer
' décalaration de ma plage ou se trouve mon critère de filtre et
création de l'objet filtre
mesCriteres = oFeuilleCible.getCellRangeByName("A1:E1") ' j'ai
essayé en ne mettant que C1:C1 et ça ne marche pas
optFiltre = mesCriteres.createFilterDescriptorByObject(maPlage)
' paramètrage de mon filtre
optFiltre.setPropertyValue("ContainsHeader",FALSE) ' les
plages ne contiennent pas d'entêtes
optFiltre.setPropertyValue("UseRegularExpressions",TRUE)
' devrait normalement me permettre d'utiliser *mon texte* dans ma zone
de filtre pour remplacer une partie de mot devant et après mon texte
optFiltre.setPropertyValue("CopyOutputData",TRUE)
optFiltre.setPropertyValue("OutputPosition",maCellule.CellAddress)
' exécution de mon filtre sur ma plage
maPlage.filter(optFiltre)
' je me place au début de ma feuille résultat
oDocument.CurrentController.ActiveSheet = oFeuilleCible
oDocument.CurrentController.Select(oFeuilleCible.GetCellRangeByName("A1:E1"))
end sub
---------------------------------------------------------------------
To unsubscribe, e-mail: prog-unsubscr...@fr.openoffice.org
For additional commands, e-mail: prog-h...@fr.openoffice.org