[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 !

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

Messagepar fneck » 11 Juin 2019 10:28

Bonjour
Je cherche à automatiser la fonction suivante dans ce tableau :
Macrofiltre_siren.ods
(16.54 Kio) Téléchargé 11 fois

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.
Dernière édition par fneck le 15 Juin 2019 15:44, édité 1 fois.
Obligation de version libreoffice 5.2.6.2
windows 10
fneck
Membre lOOyal
Membre lOOyal
 
Message(s) : 39
Inscrit le : 07 Jan 2014 11:38

Re: [Calc]Bouton filtrage doublon et export CSV

Messagepar Hubert Lambert » 13 Juin 2019 15:04

Bonjour,

Ci-joint une première proposition en python, mieux adapté à ce genre de manipulations :
Code : Tout sélectionner   AgrandirRéduire
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.
Pièces jointes
fneck.ods
(17.47 Kio) Téléchargé 12 fois
AOOo 4.1.2 sur Win7
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)
Avatar de l’utilisateur
Hubert Lambert
SuppOOrter
SuppOOrter
 
Message(s) : 1108
Inscrit le : 06 Avr 2016 08:26

Re: [Calc]Bouton filtrage doublon et export CSV

Messagepar fneck » 13 Juin 2019 15:56

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 5.2.6.2
windows 10
fneck
Membre lOOyal
Membre lOOyal
 
Message(s) : 39
Inscrit le : 07 Jan 2014 11:38

Re: [Calc]Bouton filtrage doublon et export CSV

Messagepar Hubert Lambert » 14 Juin 2019 08:47

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   AgrandirRéduire
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.
Pièces jointes
fneck.ods
(17.65 Kio) Téléchargé 10 fois
AOOo 4.1.2 sur Win7
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)
Avatar de l’utilisateur
Hubert Lambert
SuppOOrter
SuppOOrter
 
Message(s) : 1108
Inscrit le : 06 Avr 2016 08:26

Re: [Calc]Bouton filtrage doublon et export CSV

Messagepar fneck » 14 Juin 2019 09:22

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 5.2.6.2
windows 10
fneck
Membre lOOyal
Membre lOOyal
 
Message(s) : 39
Inscrit le : 07 Jan 2014 11:38

Re: [Calc]Bouton filtrage doublon et export CSV

Messagepar Hubert Lambert » 14 Juin 2019 13:33

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   AgrandirRéduire
    # 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
Pièces jointes
fneck.ods
(17.82 Kio) Téléchargé 13 fois
AOOo 4.1.2 sur Win7
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)
Avatar de l’utilisateur
Hubert Lambert
SuppOOrter
SuppOOrter
 
Message(s) : 1108
Inscrit le : 06 Avr 2016 08:26

Re: [Calc]Bouton filtrage doublon et export CSV

Messagepar fneck » 14 Juin 2019 15:16

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 5.2.6.2
windows 10
fneck
Membre lOOyal
Membre lOOyal
 
Message(s) : 39
Inscrit le : 07 Jan 2014 11:38


Retour vers Macros et API

Qui est en ligne ?

Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 3 invité(s)