[Résolu] [Calc] Fusionner .txt dans un .csv lié à QGis
Modérateur : Vilains modOOs
Règles du forum
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 !
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] Fusionner .txt dans un .csv lié à QGis
Bonjour à tous,
J'arrive sur le forum et je débute avec LibreOffice.
Depuis que je me suis mise à LibreOffice, j'ai pas mal réussi à me débrouiller en cherchant par moi même les choses que j'avais besoin de faire. Cependant aujourd'hui je fait face à un problème qui dépasse mes compétences informatiques.
Je reçois régulièrement des mails contenant les fichiers .txt avec des localisations GPS.
J'ai créé un .csv que j'ai importé dans un logiciel de cartographie QGis. A chaque ouverture de QGis, le logiciel va chercher toutes les localisations GPS du .csv et les projette sur la carte.
Pour le moment, je copie colle les données de chaque .txt dans mon .csv manuellement. Cependant, j'aimerai savoir si il y a une macro permettant à mon fichier .csv (1) d'aller chercher les derniers .txt enregistrés dans un dossier, (2) de coller les lignes à partir de la 4ème (le nombre de lignes de données varient mais la 1ère donnée GPS commence à la 4ème ligne) à la suite des autres données déjà présentes dans le .csv en laissant la 1ère colonne vide et (3) d'étirer la 1ère colonne numéro de ligne jusqu'à la dernière ligne de données collée (colonne essentielle pour mon projet cartographique sous QGis).
J'imagine que par une macro c'est possible, mais je ne suis pas du tout familière avec le langage nécessaire pour formuler ma requête.
En PJ, j'ai collé un screenshot de la structure de mon fichier .csv ainsi que la structure des données GPS que je reçois en .txt
Merci d'avance pour tout l'aide que la communauté pourrait m'apporter.
J'arrive sur le forum et je débute avec LibreOffice.
Depuis que je me suis mise à LibreOffice, j'ai pas mal réussi à me débrouiller en cherchant par moi même les choses que j'avais besoin de faire. Cependant aujourd'hui je fait face à un problème qui dépasse mes compétences informatiques.
Je reçois régulièrement des mails contenant les fichiers .txt avec des localisations GPS.
J'ai créé un .csv que j'ai importé dans un logiciel de cartographie QGis. A chaque ouverture de QGis, le logiciel va chercher toutes les localisations GPS du .csv et les projette sur la carte.
Pour le moment, je copie colle les données de chaque .txt dans mon .csv manuellement. Cependant, j'aimerai savoir si il y a une macro permettant à mon fichier .csv (1) d'aller chercher les derniers .txt enregistrés dans un dossier, (2) de coller les lignes à partir de la 4ème (le nombre de lignes de données varient mais la 1ère donnée GPS commence à la 4ème ligne) à la suite des autres données déjà présentes dans le .csv en laissant la 1ère colonne vide et (3) d'étirer la 1ère colonne numéro de ligne jusqu'à la dernière ligne de données collée (colonne essentielle pour mon projet cartographique sous QGis).
J'imagine que par une macro c'est possible, mais je ne suis pas du tout familière avec le langage nécessaire pour formuler ma requête.
En PJ, j'ai collé un screenshot de la structure de mon fichier .csv ainsi que la structure des données GPS que je reçois en .txt
Merci d'avance pour tout l'aide que la communauté pourrait m'apporter.
Dernière modification par micmac le 21 sept. 2018 10:26, modifié 3 fois.
Raison : Ajout de la coche verte
Raison : Ajout de la coche verte
LibreOffice version: 5.4.6.2 - Windows 7 Professionnel
- Hubert Lambert
- SuppOOrter
- Messages : 1214
- Inscription : 06 avr. 2016 09:26
Re: [Calc] Fusionner .txt dans un .csv lié à QGis
Bonjour,
Si tu fournissais un échantillon du fichier csv et des fichiers txt, je pense que les membres du forum seraient plus enclins à te répondre. Et tu augmenterais tes chances d'une réponse adaptée...
Par ailleurs, es-tu certain(e) qu'il faille absolument passer par un programme comme LibreOffice pour obtenir ce que tu cherches ? Si un script permet déjà à ton programme de récupérer le csv, il pourrait sans doute être adapté pour, préalablement, y insérer les txt (la numérotation des lignes n'étant, a priori, pas un obstacle en soi).
Cordialement.
Si tu fournissais un échantillon du fichier csv et des fichiers txt, je pense que les membres du forum seraient plus enclins à te répondre. Et tu augmenterais tes chances d'une réponse adaptée...
Par ailleurs, es-tu certain(e) qu'il faille absolument passer par un programme comme LibreOffice pour obtenir ce que tu cherches ? Si un script permet déjà à ton programme de récupérer le csv, il pourrait sans doute être adapté pour, préalablement, y insérer les txt (la numérotation des lignes n'étant, a priori, pas un obstacle en soi).
Cordialement.
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)
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)
- Jurassic Pork
- PassiOOnné
- Messages : 623
- Inscription : 10 août 2017 00:15
Re: [Calc] Fusionner .txt dans un .csv lié à QGis
hello,
voici un exemple de manipulation de fichier csv en import dans calc par macro Basic. Cela ressemble fortement à ce qui est demandé dans ce fil de discussion mais il faudra certainement ajuster certains paramètres.
le principe :
1 - On choisit le fichier à importer par une boîte de dialogue.
2 - On importe le fichier csv dans calc on ne filtrant que ce qui est intéressant et en formatant les données pour qu'elles correspondent au fichier cible.
3 - On copie la plage de cellules contenant les données récupérées.
4 - On cherche le dernier indice dans le document cible et on génére tous les indices suivants.
5 - On transfert la plage de cellules copiées à partir de la deuxième colonne à côté des indices générés.
Voici le code de la macro avec commentaires :
En pièce jointe un zip contenant le fichier test_csv.ods contenant la macro ImportCSV et un fichier exemple d'entrée csv.
Avec cela : J'obtiens ceci après exécution de la macro :
Ami calmant, J.P
voici un exemple de manipulation de fichier csv en import dans calc par macro Basic. Cela ressemble fortement à ce qui est demandé dans ce fil de discussion mais il faudra certainement ajuster certains paramètres.
le principe :
1 - On choisit le fichier à importer par une boîte de dialogue.
2 - On importe le fichier csv dans calc on ne filtrant que ce qui est intéressant et en formatant les données pour qu'elles correspondent au fichier cible.
3 - On copie la plage de cellules contenant les données récupérées.
4 - On cherche le dernier indice dans le document cible et on génére tous les indices suivants.
5 - On transfert la plage de cellules copiées à partir de la deuxième colonne à côté des indices générés.
Voici le code de la macro avec commentaires :
Code : Tout sélectionner
Sub ImportCSV
' J.P Septembre 2018
Dim vDoc ' Le document csv de travail
dim fileProps(2) as new com.sun.star.beans.PropertyValue
cDoc = ThisComponent 'classeur courant
oTargetSheet = cDoc.Sheets(0) 'première feuille classeur courant
fileProps(0).Name = "FilterName"
fileProps(0).Value = "Text - txt - csv (StarCalc)"
FileProps(1).Name = "Hidden"
FileProps(1).value = true ' on cache ou pas le fichier
fileProps(2).Name = "FilterOptions"
' La doc pour le format du filtre est ici :
' https://wiki.openoffice.org/wiki/Documentation/DevGuide/Spreadsheets/Filter_Options
ChoixColonnes = ""
' Le csv de test comprend 12 colonnes
' 5 -> on traite les colonnes 1 à 2 avec format Date/Heure YY/MM/DD
For i = 1 to 2
ChoixColonnes = ChoixColonnes & i & "/5/"
Next i
' 10 -> on traite les colonnes 3 à 7 avec format "english" -> . séparateur décimal
For i = 3 to 7
ChoixColonnes = ChoixColonnes & i & "/10/"
Next i
' On ignore les colonnes 8 à 12 (9)
For i = 8 to 12
ChoixColonnes = ChoixColonnes & i & "/9/"
Next i
' 9 = tab - 44 = virgule - 59 = point virgule - délimiteur de champ
' 34 guillemet délimiteur de texte
' 77 Caractères iso-8859
' 4 on saute 4 lignes
fileProps(2).Value = "9,34,77,4," & choixColonnes
' On crée une boîte de dialogue pour choisir le fichier csv
oDlg = createUnoService("com.sun.star.ui.dialogs.FilePicker")
oDlg.setMultiSelectionMode(false)
oDlg.execute
aUrl = oDlg.getFiles()
' On ouvre le fichier avec le filtre construit
vDoc = StarDesktop.loadComponentFromURL(aURL(0), "_blank", 0, fileProps())
oSourceSheet=vDoc.sheets(0) 'première feuille
' On cherche le nombre de lignes
Curs = oSourceSheet.createCursor
Curs.gotoEndOfUsedArea(True)
NumRows = Curs.Rows.Count
oArange=oSourceSheet.getCellRangeByPosition(0,0,6,NumRows-1)'source
' On copie les cellules
oAarray=oARange.getDataArray()
' On cherche le dernier indice de la 1ère colonne dans la cible
Curs = oTargetSheet.createCursor
Curs.gotoEndOfUsedArea(True)
LastRow = Curs.Rows.Count
LastId = oTargetSheet.getCellByPosition(0,LastRow -1).Value
for i=0 to NumRows - 1
oTargetSheet.getCellByPosition(0,LastRow + i).Value = LastId + i + 1
next i
' On indique où l'on doit coller les cellules
' Attention la plage cible doit avoir ABSOLUMENT la même taille que la plage source
oCrange=oTargetSheet.getCellRangeByPosition(1,LastRow,7,LastRow + NumRows - 1 )'cible
' On copie les cellules dans la cible
oCrange.setDataArray(oAarray)
' On ferme le document source
vDoc.close (-1)
End Sub
Avec cela : J'obtiens ceci après exécution de la macro :
Ami calmant, J.P
- Pièces jointes
-
- test_csv.zip
- (17.01 Kio) Téléchargé 49 fois
LibreOffice 7.6.2.1 et OpenOffice 4.1.15 sous windows 11
LibreOffice 24.2.0 et OpenOffice 4.1.15 sous Ubuntu 20.04
LibreOffice 24.2.0 et OpenOffice 4.1.15 sous Ubuntu 20.04
Re: [Calc] Fusionner .txt dans un .csv lié à QGis
Bonjour à tous les deux et merci pour vos réponses.
Je ne réussissai pas à joindre mon .csv et les .txt mais je n'avais pas pensé au .zip que j'ai donc mis en pièce jointe cette fois.
Je suis obligée de passer par un .csv construit avec séparation point virgule car c'est uniquement comme ça que mon logiciel de cartographie QGis le lit directement à l'ouverture du projet QGis (il reconnait les .csv séparateur point virgule). J'ai donc dû construire le .csv de cette manière.
Merci beaucoup pour cette macro. Malheureusement, c'est un langage que je ne connais pas. C'est donc très flou pour moi.
Un problème qui se pose est que je reçois les fichiers .txt par mail, que j'enregistre dans un dossier et que j'alimente au fur et à mesure des emails reçu. J'aimerai donc dans l'idée que à chaque ouverture du .csv, le .csv aille chercher les nouveaux fichiers .txt qu'il n'a pas encore traité. Sauf que les fichiers .txt sont en séparateur tabulation. Donc quand je le fait manuellement à copier coller les lignes de données des fichiers .txt, je colle avec le paramétrage séparateur tabulation.
Egalement, je ne passe pas par un .ods : j'ouvre mon .csv (en choisissant séparateur point virgule) en utilisant Calc en effet, mais le fichier reste un .csv et il faut qu'il le reste car mon logiciel de cartographique ne gère pas les .ods
Je ne sais donc pas si il y a un moyen d'automatiser tout cela... et je suis clairement perdue en termes de macro.
Merci d'avance pour vos compétences
Je ne réussissai pas à joindre mon .csv et les .txt mais je n'avais pas pensé au .zip que j'ai donc mis en pièce jointe cette fois.
Je suis obligée de passer par un .csv construit avec séparation point virgule car c'est uniquement comme ça que mon logiciel de cartographie QGis le lit directement à l'ouverture du projet QGis (il reconnait les .csv séparateur point virgule). J'ai donc dû construire le .csv de cette manière.
Merci beaucoup pour cette macro. Malheureusement, c'est un langage que je ne connais pas. C'est donc très flou pour moi.
Un problème qui se pose est que je reçois les fichiers .txt par mail, que j'enregistre dans un dossier et que j'alimente au fur et à mesure des emails reçu. J'aimerai donc dans l'idée que à chaque ouverture du .csv, le .csv aille chercher les nouveaux fichiers .txt qu'il n'a pas encore traité. Sauf que les fichiers .txt sont en séparateur tabulation. Donc quand je le fait manuellement à copier coller les lignes de données des fichiers .txt, je colle avec le paramétrage séparateur tabulation.
Egalement, je ne passe pas par un .ods : j'ouvre mon .csv (en choisissant séparateur point virgule) en utilisant Calc en effet, mais le fichier reste un .csv et il faut qu'il le reste car mon logiciel de cartographique ne gère pas les .ods
Je ne sais donc pas si il y a un moyen d'automatiser tout cela... et je suis clairement perdue en termes de macro.
Merci d'avance pour vos compétences
- Pièces jointes
-
- base de donnees.zip
- (1.69 Kio) Téléchargé 37 fois
LibreOffice version: 5.4.6.2 - Windows 7 Professionnel
- Hubert Lambert
- SuppOOrter
- Messages : 1214
- Inscription : 06 avr. 2016 09:26
Re: [Calc] Fusionner .txt dans un .csv lié à QGis
Bonjour,
Pour l'utiliser :
- sauvegarde le fichier "Reb24.py" dans le répertoire "\Scripts\python" du profil utilisateur (si tu dois créer le répertoire "python", veille à respecter les minuscules)
- ouvre ton fichier csv
- menu Outils -> Macros -> Exécuter la macro -> Mes macros -> Reb24 -> importtxtfiles
Les fichiers txt sont présumés se trouver dans un sous-répertoire "fichiers .txt" au même niveau que le fichier csv, comme dans ton exemple.
Cordialement. Le code au besoin :
Ci-joint un script en python, qui peut-être conviendra mieux (ou alors dis-nous avec quoi tu scriptes QGis) .Reb24 a écrit :Merci beaucoup pour cette macro. Malheureusement, c'est un langage que je ne connais pas. C'est donc très flou pour moi.
Pour l'utiliser :
- sauvegarde le fichier "Reb24.py" dans le répertoire "\Scripts\python" du profil utilisateur (si tu dois créer le répertoire "python", veille à respecter les minuscules)
- ouvre ton fichier csv
- menu Outils -> Macros -> Exécuter la macro -> Mes macros -> Reb24 -> importtxtfiles
Les fichiers txt sont présumés se trouver dans un sous-répertoire "fichiers .txt" au même niveau que le fichier csv, comme dans ton exemple.
Cordialement. Le code au besoin :
Code : Tout sélectionner
# -*- coding: utf-8 -*-
import glob
import os.path
import csv
from uno import systemPathToFileUrl, fileUrlToSystemPath
from com.sun.star.beans import PropertyValue
def importtxtfiles(event=None):
doc = XSCRIPTCONTEXT.getDocument()
sheet = doc.Sheets[0]
cursor = sheet.createCursor()
cursor.gotoEndOfUsedArea(False)
startrow = cursor.RangeAddress.StartRow + 1
if startrow == 1:
lastdate = ""
else:
lastdate = "{}_{}".format(sheet[startrow-1, 1].String, sheet[startrow-1, 2].String)[:20]
basedir = os.path.join(os.path.dirname(fileUrlToSystemPath(doc.URL)), "fichiers .txt")
txtfiles = gettxtfiles(basedir, lastdate)
lastrow = startrow
rows = []
for file in txtfiles:
with open(file, newline='', encoding='latin-1') as csvfile:
reader = csv.reader(csvfile, delimiter='\t', skipinitialspace=True)
for line in tuple(reader)[3:]:
if line:
rows.append([lastrow]+line)
lastrow +=1
if rows:
cols = len(rows[0])
dest = sheet[startrow:lastrow, 0:cols]
dest.setDataArray(rows)
args = createPropertyValues(FilterName="Text - txt - csv (StarCalc)", FilterOptions="59,39,ANSI,1,,1033,false,false")
doc.storeAsURL(doc.URL, args)
frame = doc.CurrentController.Frame
frame.loadComponentFromURL(doc.URL, "_self", 0, doc.Args)
msgbox("Fichier sauvegardé.")
else:
msgbox("Aucun fichier à ajouter.")
def gettxtfiles(dir, lastdate):
path = os.path.join(dir, "*.txt")
files = [os.path.join(dir, f) for f in glob.glob(path) if f[-21:-6] > lastdate]
files.sort()
return files
def createPropertyValues(**kwargs):
return tuple(PropertyValue(k,0,kwargs[k],0) for k in kwargs)
def msgbox(message):
ctx = XSCRIPTCONTEXT.getComponentContext()
desktop = XSCRIPTCONTEXT.getDesktop()
smgr = ctx.ServiceManager
tk = smgr.createInstanceWithContext("com.sun.star.awt.Toolkit", ctx)
win = desktop.ActiveFrame.ComponentWindow
box = tk.createMessageBox(win, 0, 1, "", message)
box.execute()
g_exportedScripts = importtxtfiles,
Dernière modification par Hubert Lambert le 14 sept. 2018 09:38, modifié 1 fois.
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)
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)
- Jurassic Pork
- PassiOOnné
- Messages : 623
- Inscription : 10 août 2017 00:15
Re: [Calc] Fusionner .txt dans un .csv lié à QGis
hello,
Voici un exemple d'utilisation où je visualise les points géographiques qui se trouve dans la feuille 1 de mon classeur ods et où je mets comme étiquette le numéro qui se trouve dans la première colonne de la feuille : [EDIT] Effectivement avec un fichier .ods on n'a pas de lien direct avec le fichier dans QGIS donc il faut réimporter le fichier si il y a une modification dedans contrairement à un fichier csv qui lui est lu directement.
Ami calmant, J.P
Dans QGIS il existe une extension qui permet de gérer les fichiers .ods , il s'agit de l'extension Spreadsheet layers.Reb24 a écrit : Je suis obligée de passer par un .csv construit avec séparation point virgule car c'est uniquement comme ça que mon logiciel de cartographie QGis le lit directement à l'ouverture du projet QGis (il reconnait les .csv séparateur point virgule).
Egalement, je ne passe pas par un .ods : j'ouvre mon .csv (en choisissant séparateur point virgule) en utilisant Calc en effet, mais le fichier reste un .csv et il faut qu'il le reste car mon logiciel de cartographique ne gère pas les .ods
Voici un exemple d'utilisation où je visualise les points géographiques qui se trouve dans la feuille 1 de mon classeur ods et où je mets comme étiquette le numéro qui se trouve dans la première colonne de la feuille : [EDIT] Effectivement avec un fichier .ods on n'a pas de lien direct avec le fichier dans QGIS donc il faut réimporter le fichier si il y a une modification dedans contrairement à un fichier csv qui lui est lu directement.
Ami calmant, J.P
LibreOffice 7.6.2.1 et OpenOffice 4.1.15 sous windows 11
LibreOffice 24.2.0 et OpenOffice 4.1.15 sous Ubuntu 20.04
LibreOffice 24.2.0 et OpenOffice 4.1.15 sous Ubuntu 20.04
Re: [Calc] Fusionner .txt dans un .csv lié à QGis
Bonjour,
Et bien c'est tout simplement génial ! C'est exactement cela et ça fonctionne !
QGis fonctionne également avec des scripts Python oui. Mais du coup à l'ouverture de mon projet QGis, il s'actualise avec la mise à jour du .csv ce qui est top. Merci en tout cas pour l'idée de l'extension QGis J.P. mais en effet, je préfère que QGis reconnaisse le .csv à chaque ouverture plutôt de devoir réimporter un .ods, mais c'est toujours bon à savoir et je garde ça en tête.
Je reviens au .csv. J'ai fait l'essai d'enregistrer un .txt dans le dossier qui vient se ranger avant d'autres .txt enregistrés du fait de la date et de l'heure de téléchargement dans le nom du fichier (voir screenshot en PJ). Le script ne reconnait donc pas qu'il y a un nouveau .txt à gérer car il prend les derniers c'est bien ça ?
Et j'imagine que demander au script d'aller chercher les .txt qu'il n'a pas encore vu, quelque soit l'ordre de rangement dans le dossier, et de coller les données non plus à la suite mais entre les lignes au bon endroit pour que les dates et heures se suivent, ça devient compliqué n'est-ce pas ? Je peux très bien rester comme ça avec ce super script et bien penser qu'il faut absolument être certain d'avoir enregistrés tous les .txt reçu avant de lancer le script, et non pas oublier un .txt avec dates antérieures.
Aussi, existe t'il un moyen d'automatiser le lancement du script à l'ouverture du .csv ? Au lieu de faire la démarche, outils, macros, etc.
Merci en tout cas, c'est vraiment super !!
Et bien c'est tout simplement génial ! C'est exactement cela et ça fonctionne !
QGis fonctionne également avec des scripts Python oui. Mais du coup à l'ouverture de mon projet QGis, il s'actualise avec la mise à jour du .csv ce qui est top. Merci en tout cas pour l'idée de l'extension QGis J.P. mais en effet, je préfère que QGis reconnaisse le .csv à chaque ouverture plutôt de devoir réimporter un .ods, mais c'est toujours bon à savoir et je garde ça en tête.
Je reviens au .csv. J'ai fait l'essai d'enregistrer un .txt dans le dossier qui vient se ranger avant d'autres .txt enregistrés du fait de la date et de l'heure de téléchargement dans le nom du fichier (voir screenshot en PJ). Le script ne reconnait donc pas qu'il y a un nouveau .txt à gérer car il prend les derniers c'est bien ça ?
Et j'imagine que demander au script d'aller chercher les .txt qu'il n'a pas encore vu, quelque soit l'ordre de rangement dans le dossier, et de coller les données non plus à la suite mais entre les lignes au bon endroit pour que les dates et heures se suivent, ça devient compliqué n'est-ce pas ? Je peux très bien rester comme ça avec ce super script et bien penser qu'il faut absolument être certain d'avoir enregistrés tous les .txt reçu avant de lancer le script, et non pas oublier un .txt avec dates antérieures.
Aussi, existe t'il un moyen d'automatiser le lancement du script à l'ouverture du .csv ? Au lieu de faire la démarche, outils, macros, etc.
Merci en tout cas, c'est vraiment super !!
LibreOffice version: 5.4.6.2 - Windows 7 Professionnel
- Dude
- IdOOle de la suite
- Messages : 25143
- Inscription : 03 mars 2006 08:45
- Localisation : 127.0.0.1
- Contact :
Re: [Calc] Fusionner .txt dans un .csv lié à QGis
Non car un CSV ne peut pas embarquer de macro.Reb24 a écrit :existe t'il un moyen d'automatiser le lancement du script à l'ouverture du .csv ?
Le plus simple reste de créer un raccourci clavier : https://forum.openoffice.org/fr/forum/v ... =8&t=40146
- Jurassic Pork
- PassiOOnné
- Messages : 623
- Inscription : 10 août 2017 00:15
Re: [Calc] Fusionner .txt dans un .csv lié à QGis
hello,
On a toujours mon classeur qui permet d'importer les données des fichiers txt. Un bouton permet de lancer la macro ImportCSV
Mais là où cela change c'est qu'il y a maintenant un autre bouton qui va permettre de générer un fichier csv compatible avec QGIS d'après les données de la feuille.
Le nom du fichier est en paramètre dans la feuille.
Le fichier csv généré sera celui qui est déclaré dans QGIS en import CSV .
Voici le code de la macro de génération du fichier csv :
Voici à quoi cela ressemble :
En pièce jointe le classeur ods avec les macros à l'intérieur.
Avec ce principe on peut éditer les données qui seront lues dans QGIS.
Ami calmant, J.P
en attendant ta réponse j'avais trouvé une autre solution, voici le principe :Reb24 a écrit : QGis fonctionne également avec des scripts Python oui. Mais du coup à l'ouverture de mon projet QGis, il s'actualise avec la mise à jour du .csv ce qui est top. Merci en tout cas pour l'idée de l'extension QGis J.P. mais en effet, je préfère que QGis reconnaisse le .csv à chaque ouverture plutôt de devoir réimporter un .ods, mais c'est toujours bon à savoir et je garde ça en tête.
On a toujours mon classeur qui permet d'importer les données des fichiers txt. Un bouton permet de lancer la macro ImportCSV
Mais là où cela change c'est qu'il y a maintenant un autre bouton qui va permettre de générer un fichier csv compatible avec QGIS d'après les données de la feuille.
Le nom du fichier est en paramètre dans la feuille.
Le fichier csv généré sera celui qui est déclaré dans QGIS en import CSV .
Voici le code de la macro de génération du fichier csv :
Code : Tout sélectionner
Sub SaveToCsv()
Document = ThisComponent 'assigns the current document to the variable document
Sheets = Document.Sheets 'get the container of all Sheets
Sheet = Sheets(0) 'get the first sheet
Document.CurrentController.setActiveSheet(Sheet)
Dim Propval(1) as New com.sun.star.beans.PropertyValue
Propval(0).Name = "FilterName"
Propval(0).Value = "Text - txt - csv (StarCalc)"
Propval(1).Name = "FilterOptions"
Propval(1).Value ="59,34,0,1,1" 'ASCII 59 = ; 34 = "
FileName = Sheet.getCellByPosition(9,1).string
FileURL = convertToURL(FileName)
Document.StoreToURL(FileURL, Propval())
End Sub
Avec ce principe on peut éditer les données qui seront lues dans QGIS.
Ami calmant, J.P
- Pièces jointes
-
- test_csv.ods
- (26.01 Kio) Téléchargé 42 fois
LibreOffice 7.6.2.1 et OpenOffice 4.1.15 sous windows 11
LibreOffice 24.2.0 et OpenOffice 4.1.15 sous Ubuntu 20.04
LibreOffice 24.2.0 et OpenOffice 4.1.15 sous Ubuntu 20.04
Re: [Calc] Fusionner .txt dans un .csv lié à QGis
Bonjour,
Alors j'ai essayé les 2 options :
* Créer un raccourci clavier sur mon .csv pour exécuter la macro importfusiontxt avec le raccourci Alt+i.
Cela marche très bien du coup.
* J'ai essayé ta solution en passant par un .ods
A l'éxecution de la commande importCsv (qui correspond en fait à ImportTxt non ?), cela me fait ouvrir une fenêtre où je peux parcourir les fichiers .txt à ajouter. Mais si j'en ai plusieurs à ajouter d'un coup, il semblerait que je doive recommencer la démarche. Alors que dans l'idée, comme la macro importfusiontxt, cela va me chercher les derniers txt non traités.
2ème "problème" est que le .csv généré laisse les 2 premières lignes de la colonne J et ce n'est pas l'idéal pour QGis (voir impr écran en PJ).
Les 2 méthodes fonctionnent en soit. Dans un soucis de rapidité et de minimum de commande, passer par le raccourci clavier pour exécution macro dans le .csv directement me semble le mieux. Sauf si vous voyez un intérêt à passer par un .ods.
Alors j'ai essayé les 2 options :
* Créer un raccourci clavier sur mon .csv pour exécuter la macro importfusiontxt avec le raccourci Alt+i.
Cela marche très bien du coup.
* J'ai essayé ta solution en passant par un .ods
A l'éxecution de la commande importCsv (qui correspond en fait à ImportTxt non ?), cela me fait ouvrir une fenêtre où je peux parcourir les fichiers .txt à ajouter. Mais si j'en ai plusieurs à ajouter d'un coup, il semblerait que je doive recommencer la démarche. Alors que dans l'idée, comme la macro importfusiontxt, cela va me chercher les derniers txt non traités.
2ème "problème" est que le .csv généré laisse les 2 premières lignes de la colonne J et ce n'est pas l'idéal pour QGis (voir impr écran en PJ).
Les 2 méthodes fonctionnent en soit. Dans un soucis de rapidité et de minimum de commande, passer par le raccourci clavier pour exécution macro dans le .csv directement me semble le mieux. Sauf si vous voyez un intérêt à passer par un .ods.
LibreOffice version: 5.4.6.2 - Windows 7 Professionnel
- Hubert Lambert
- SuppOOrter
- Messages : 1214
- Inscription : 06 avr. 2016 09:26
Re: [Calc] Fusionner .txt dans un .csv lié à QGis
Passer par un fichier ods te permettrait de résoudre les 2 problèmes que tu soulèves plus haut :Reb24 a écrit :Sauf si vous voyez un intérêt à passer par un .ods.
en stockant la liste des fichiers déjà vus dans une 2e feuilleReb24 a écrit :demander au script d'aller chercher les .txt qu'il n'a pas encore vu, quelque soit l'ordre de rangement dans le dossier
en affectant la macro à l'événement "ouverture du document".Reb24 a écrit :automatiser le lancement du script à l'ouverture du .csv ?
Tu pourrais tout aussi bien utiliser un fichier odb (base de données) pour le même résultat...
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)
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)
Re: [Calc] Fusionner .txt dans un .csv lié à QGis
Bonjour,
Merci pour ta réponse.
Du coup, je pense rester avec mon .ods et veiller à bien enregistrer tous les derniers .txt reçus par mail avant d'exécuter la macro.
Et après coup, je me dit que c'est peut être mieux de garder la commande Alt+i pour exécuter la macro afin de voir qu'il a bien ajouter des lignes.
Merci à tous pour vos réponses, vos solutions mais surtout vos compétences
Merci pour ta réponse.
Du coup, je pense rester avec mon .ods et veiller à bien enregistrer tous les derniers .txt reçus par mail avant d'exécuter la macro.
Et après coup, je me dit que c'est peut être mieux de garder la commande Alt+i pour exécuter la macro afin de voir qu'il a bien ajouter des lignes.
Merci à tous pour vos réponses, vos solutions mais surtout vos compétences
Dernière modification par Reb24 le 21 sept. 2018 10:01, modifié 1 fois.
LibreOffice version: 5.4.6.2 - Windows 7 Professionnel
Re: [Résolu] [Calc] Fusionner .txt dans un .csv lié à QGis
Hubert Lambert, y aurait-il un moyen avec le script que tu as écris que les fichiers .txt à importer se trouvent dans un sous-dossier "import csv en attente" et qu'une fois qu'ils aient été traité qu'ils soient déplacés dans l'autre sous-dossier "import csv ok" ?
Comme ça, on peut voir rapidement si des fichiers n'ont pas été intégré au .csv
C'est possible tu penses ?
La modération vous a écrit: Nous vous rappelons que la règle n° 7 stipule qu'il ne faut mettre qu'une question par fil.
Poser plusieurs questions complique la compréhension et n'encourage pas les réponses : il vaut donc mieux découper votre problème. Le titre de votre question ne peut pas refléter l'ensemble des problèmes exposés.
Afin que nous puissions avoir une base de connaissance efficace lors d'une recherche sur un seul de vos problèmes, nous vous prions de créer autant de fil que de questions.
Merci de votre collaboration.
LibreOffice version: 5.4.6.2 - Windows 7 Professionnel