[Résolu][Calc]Bouton filtrage doublon et export CSV

Discussions et questions sur tout ce qui concerne la programmation tous langages et tous modules confondus.

Modérateur : Vilains modOOs

Règles du forum
:alerte: Balisage obligatoire dans cette section !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !
fneck
Membre OOrganisé
Membre OOrganisé
Messages : 50
Inscription : 07 janv. 2014 10:38

[Résolu][Calc]Bouton filtrage doublon et export CSV

Message par fneck »

Bonjour
Je cherche à automatiser la fonction suivante dans ce tableau :
Macrofiltre_siren.ods
Depuis un tableau d'environ 1000 lignes (évolutif chaque mois) contenant Nom+SIRET, j'aimerais ouvrir une nouvelle feuille(EXPORT CSV) SANS doublon d'une part et avec en première colonne le SIREN (sur 9 caractères) alors que mon tableau source contient le SIRET avec 14 caractères(mais parfois 9 uniquement).
Enfin, il faudrait qu'en colonne C et D de cette même feuille apparaisse les valeurs que j'ai pu y mettre avec les formules suivante en C1: =SI(ESTVIDE(A1);"";"(Vide)") puis D1: =SI(ESTVIDE(A1);"";"Start")
Cette feuille devra être effacée (la feuille Infolégale l'est déjà par macro mais je n'arrive pas à transposer) avant chaque retraitement pour éviter que d'anciennes lignes restent présentes.
Enfin elle devra être enregistrée au format CSV avec la , en séparateur.

D'avance merci de votre aide.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par fneck le 15 juin 2019 14:44, modifié 1 fois.
Obligation de version libreoffice 6.2.7.1
windows 10 Pro
Avatar de l’utilisateur
Hubert Lambert
SuppOOrter
SuppOOrter
Messages : 1214
Inscription : 06 avr. 2016 07:26

Re: [Calc]Bouton filtrage doublon et export CSV

Message par Hubert Lambert »

Bonjour,

Ci-joint une première proposition en python, mieux adapté à ce genre de manipulations :

Code : Tout sélectionner

from com.sun.star.sheet.CellFlags import VALUE, DATETIME, STRING, FORMULA
def export_csv(event=None):
    doc = XSCRIPTCONTEXT.getDocument()
    feuilles = doc.Sheets
    f_info = feuilles.getByName("Infolégale")
    f_export = feuilles.getByName("Export CSV")
    curseur = f_info.createCursor()
    curseur.gotoEndOfUsedArea(False)
    source = f_info.getCellRangeByPosition(0, 3, 2, curseur.RangeAddress.EndRow).DataArray

    f_export.clearContents(VALUE | DATETIME | STRING | FORMULA)
    donnees = []
    formule1 = '=IF(ISBLANK(A{});"";"(Vide)")'
    formule2 = '=IF(ISBLANK(A{});"";"Start")'
    checked = []
    num = 0
    for ligne in source:
        entree = (str(ligne[2])[:9], ligne[0])
        if not entree in checked:  # élimination des doublons
            checked.append(entree)
            num += 1
            donnees.append(entree + (formule1.format(num), formule2.format(num)))
    dest = f_export.getCellRangeByPosition(0, 0, len(donnees[0])-1, len(donnees)-1)
    dest.setFormulaArray(donnees)
    doc.CurrentController.ActiveSheet = f_export
Avant d'aborder la question de l'export, regarde déjà si cela convient.
L'ordre des données à exporter est-il important ?
Cordialement.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
AOOo 4.1.7 sur Win10
AOOo 4.1.x sur Linux Mint
LibreOffice 5.x/6.x sur Linux Mint
--
| « Nos défauts devraient nous donner une qualité : l'indulgence pour les défauts des autres » (Rivarol)
fneck
Membre OOrganisé
Membre OOrganisé
Messages : 50
Inscription : 07 janv. 2014 10:38

Re: [Calc]Bouton filtrage doublon et export CSV

Message par fneck »

Merci beaucoup.
ça semble correspondre parfaitement à mes besoins.
Il serait en effet préférable de conserver le classement alpha si possible.
Par contre je n'arrive pas à intégrer ton code dans mon calc.

Cordialement
Obligation de version libreoffice 6.2.7.1
windows 10 Pro
Avatar de l’utilisateur
Hubert Lambert
SuppOOrter
SuppOOrter
Messages : 1214
Inscription : 06 avr. 2016 07:26

Re: [Calc]Bouton filtrage doublon et export CSV

Message par Hubert Lambert »

fneck a écrit :Il serait en effet préférable de conserver le classement alpha si possible.
Alors le code peut être un peu simplifié :

Code : Tout sélectionner

import csv
import os.path
from com.sun.star.sheet.CellFlags import VALUE, DATETIME, STRING, FORMULA

def export_csv(event=None):
    doc = XSCRIPTCONTEXT.getDocument()
    feuilles = doc.Sheets
    f_info = feuilles.getByName("Infolégale")
    f_export = feuilles.getByName("Export CSV")
    curseur = f_info.createCursor()
    curseur.gotoEndOfUsedArea(False)
    source = f_info.getCellRangeByPosition(0, 3, 2, curseur.RangeAddress.EndRow).DataArray
    source = sorted(set(source))    # suppression des doublons + tri alphabétique
    # copie des données
    f_export.clearContents(VALUE | DATETIME | STRING | FORMULA)
    donnees = []
    formule1 = '=IF(ISBLANK(A{});"";"(Vide)")'
    formule2 = '=IF(ISBLANK(A{});"";"Start")'
    for num, ligne in enumerate(source, 1):
        donnees.append(("'"+str(ligne[2])[:9], ligne[0], formule1.format(num), formule2.format(num)))
    dest = f_export.getCellRangeByPosition(0, 0, len(donnees[0])-1, len(donnees)-1)
    dest.setFormulaArray(donnees)
    doc.CurrentController.ActiveSheet = f_export
    # exportation au format CSV
    docurl = doc.URL[8:]
    csvurl = docurl[:-3] + "csv"
    with open(csvurl, 'w') as f:
        writer = csv.writer(f, delimiter=',', quoting=csv.QUOTE_MINIMAL)
        writer.writerows(dest.DataArray) 
fneck a écrit :Par contre je n'arrive pas à intégrer ton code dans mon calc.
Installe Apso, récupère le module du fichier joint (Menu -> Export) et insère-le dans ton propre fichier.

J'ai aussi ajouter la fonction d'exportation, qui crée un fichier csv avec le même nom et dans le même répertoire que le fichier calc.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
AOOo 4.1.7 sur Win10
AOOo 4.1.x sur Linux Mint
LibreOffice 5.x/6.x sur Linux Mint
--
| « Nos défauts devraient nous donner une qualité : l'indulgence pour les défauts des autres » (Rivarol)
fneck
Membre OOrganisé
Membre OOrganisé
Messages : 50
Inscription : 07 janv. 2014 10:38

Re: [Calc]Bouton filtrage doublon et export CSV

Message par fneck »

Merci je te tiendrai au courant mais je ne peux pas installer APSO pour le moment (pas les droits pour le récupérer); j 'essaierai lundi et vous tiendrai informés.
Sur ton ODS ç'est parfait en tous cas et je te remercie :bravo: :super: .
Une dernière chose si tu peux, j'aimerai choisir l'emplacement et le nom de l'export.
Obligation de version libreoffice 6.2.7.1
windows 10 Pro
Avatar de l’utilisateur
Hubert Lambert
SuppOOrter
SuppOOrter
Messages : 1214
Inscription : 06 avr. 2016 07:26

Re: [Calc]Bouton filtrage doublon et export CSV

Message par Hubert Lambert »

fneck a écrit :Une dernière chose si tu peux, j'aimerai choisir l'emplacement et le nom de l'export.
Voici :

Code : Tout sélectionner

    # exportation au format CSV
    filepicker = XSCRIPTCONTEXT.getComponentContext().ServiceManager.createInstanceWithArguments("com.sun.star.ui.dialogs.FilePicker", (FILESAVE_AUTOEXTENSION_TEMPLATE,))
    filepicker.appendFilter("Fichier csv", ".csv")
    filepicker.execute()
    try:
        csvurl = fileUrlToSystemPath(filepicker.Files[0])
        with open(csvurl, 'w') as f:
            writer = csv.writer(f, delimiter=',', quoting=csv.QUOTE_MINIMAL)
            writer.writerows(dest.DataArray)
    except IndexError:
        pass
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
AOOo 4.1.7 sur Win10
AOOo 4.1.x sur Linux Mint
LibreOffice 5.x/6.x sur Linux Mint
--
| « Nos défauts devraient nous donner une qualité : l'indulgence pour les défauts des autres » (Rivarol)
fneck
Membre OOrganisé
Membre OOrganisé
Messages : 50
Inscription : 07 janv. 2014 10:38

Re: [Calc]Bouton filtrage doublon et export CSV

Message par fneck »

C est absolument parfait;plus qu'à bidouiller pour installer Apso.
passe un excellent week end et encore merci à tout le monde du temps consacré et à toi particulièrement.:bravo:
Obligation de version libreoffice 6.2.7.1
windows 10 Pro