Bonjour,
Je viens de créer un script Python à l’aide de Scriptforge pour générer une feuille de classeur à partir d’informations contenues dans un fichier texte. Tout fonctionne bien.
J’aimerais maintenant pouvoir automatiser le regroupement de certaines lignes de cette feuille de calcul (comme en allant dans Données > Plan et groupe > Grouper) mais ne trouve pas comment faire.
Les lignes à regrouper sont les 9 dernières lignes du template de 10 lignes que je copie pour chaque voie dans la fonction fill_route().
J’ai lu dans OOME 4.1, section 15.5.3, des éléments en rapport. Ce qui pointe vers :
[LibreOffice: XSheetOutline Interface Reference]. Malheureusement, je n’ai pas les clés pour comprendre les interactions entre les objets scriptforge et cette documentation.
Comment puis-je procéder ?
Un grand merci par avance.
from scriptforge import CreateScriptService
CRAG_INFO_URL = '/home/louberehc/veille_aouste/voies/Anse.txt'
TEMPLATE_DOC_URL = '/home/louberehc/veille_aouste/template.ods'
#### FUNCTIONS
def get_info_type(text: str) -> str:
"""Qualify the text information."""
if text.startswith("Secteur"):
return "Secteur"
elif text.startswith('-'):
return "Voie"
elif text.startswith('\n'):
return "Saut de ligne"
else:
return "Inconnu"
def fill_sector(doc, text_input, current_row):
# Write the sector name in the A column.
doc.setValue(
f"A{current_row}",
text_input.removeprefix("Secteur ")
)
current_row += 1
return current_row
def fill_route(doc, route_range, text_input, current_row):
# Copy the table to track route observations.
doc.copyToCell(route_range, f"B{current_row}")
# Rectify the route name in the B column.
doc.setValue(
f"B{current_row}",
text_input.removeprefix("- ")
)
current_row += 10
return current_row
def fill_spreadsheet(doc, route_range, text_input: str, current_row: int):
"""
- Fill the spreadsheet according the text input type.
- Track the row number of the 'cursor'.
# Args :
- input : a text line
- current row : the line number where to write information in
the sheet.
# Return :
The next row to write to.
"""
match get_info_type(text_input):
case "Secteur":
current_row = fill_sector(doc, text_input, current_row)
case "Voie":
current_row = fill_route(doc, route_range, text_input, current_row)
case "Saut de ligne":
current_row += 1
case _:
pass
return current_row
#### MACROS
def create_Anse_sheet(args=None):
# Get the open spreadsheet
doc = CreateScriptService("Calc")
# Get 2 templates which will be copied many times in the spreadsheet
svc = CreateScriptService("UI")
source_doc = svc.getDocument(TEMPLATE_DOC_URL)
header_range = source_doc.Range("Feuille1.A1:G2")
route_range = source_doc.Range("Feuille1.B4:O13")
# Fill the header
doc.copyToCell(header_range, "A1")
current_row = 3
# Loop on the information about the crag.
with open(CRAG_INFO_URL, 'r') as crag_info:
for line in crag_info:
# Fill the spreadsheet according to the text input type and
# update the row position to write next info
current_row = fill_spreadsheet(
doc,
route_range,
line,
current_row
)
g_exportedScripts = (
create_Anse_sheet,
)
et un extrait du contenu de Anse.txt
Secteur Baraka
- Le puit des sept nains
- Alcootest
- Tac (gauche)
- Tac (droite)
- Akekepart (gauche)
- Akekepart (droite)
- Cacaboum
- Assurance tous risques
- Japet
- Mylène, je t'aime
- Boisot
Secteur Dopage
- Monsieur Propre
- Boisage
- Le nom des dieux
- Virage dangereux
- Stratopelle
- Stratopause
- La planque des hirondelles
- De gouttes en gouttes
- Les devins
- Dopage autorisé
- Dopage autorisé à max
Secteur Karine
- Karine au Verdon
- L'avenir du démon
- La boutonnière
- Le chat pelé
- I am Saury
- Agripine
- Robertissime
- Cul de sac
- La griffe du Sauryen
- Bourin mental firect
- Bourin mental
- Empreinte Digitale
template.ods (23.5 KB)