[Résolu] [Calc] Import CSV avec Zbasic - à partir d'un numéro de ligne

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 !
SolPro
Membre OOrganisé
Membre OOrganisé
Messages : 79
Inscription : 31 juil. 2022 12:38

[Résolu] [Calc] Import CSV avec Zbasic - à partir d'un numéro de ligne

Message par SolPro »

Bonjour à tous

je continue à utiliser zbasic qui me ravit à merveille et m'a au passage rendu de grands services;

Je vous ai sollicité dans ce post et j'ai eu réponse à ma question

Cependant, je me suis aperçu que j'avais certains fichiers csv avec une en-tête et que donc, lors de l'importation (manuelle), j'indiquais par exemple, "à partir de ligne 8".

Avec zbasic, et zCsv.paramètre, est-ce possible d'indiquer un numéro de ligne.

J'ai lu, relu mais j'ai l'impression que je tourne en rond et je n'arrive à rien

Je vous mets un fichier Zip (qui contient le csv) que je cherche à importer à partir de la ligne 8

Je vous remercie pour votre aide.
Bonne soirée
solproimportcsvligne.png

Mon fichier :
Solpro_archive_csv.zip
Mon code

Code : Tout sélectionner

Sub Main
	GlobalScope.BasicLibraries.loadLibrary ("zBasic")

	sFic = "c:\temp\RC30.csv"
	sFeuille = "Export"
	
	oFiltre = zCSV.Demarre(sFic)
	zCSV.Parametre(oFiltre, "JEU", "UTF-8")
	zCSV.Colonne(oFiltre, 28, "JJ/MM/AA")
	zCSV.Colonne(oFiltre, 29, "JJ/MM/AA")
	
	zFeuille.Importe(sFic, sFeuille, oFiltre)	

End Sub
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par SolPro le 26 janv. 2025 20:36, modifié 2 fois.
LibreOffice 7.5.4.2 (x64) et Windows 10 Pro (personnel)
LibreOffice 7.2.7.2.M7 (x64) et Windows 10 Pro (professionnel, obligatoire)
Avatar de l’utilisateur
Dolev
SuppOOrter
SuppOOrter
Messages : 1146
Inscription : 19 août 2018 05:20

Re: [Calc] Import CSV avec Zbasic - à partir d'un numéro deligne

Message par Dolev »

Bonjour,

Pourquoi ne pas utiliser l'enregistreur de macro ?
Une fois le CSV importé, vous supprimez les N premières lignes.

Code : Tout sélectionner

sub Main
	'import CSV
	SupprLignes(8)
end sub

sub SupprLignes(nbLignes)
rem ----------------------------------------------------------------------
rem define variables
dim document   as object
dim dispatcher as object
rem ----------------------------------------------------------------------
rem get access to the document
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

rem ----------------------------------------------------------------------
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(1) as new com.sun.star.beans.PropertyValue
args2(0).Name = "By"
args2(0).Value = nbLignes
args2(1).Name = "Sel"
args2(1).Value = true

dispatcher.executeDispatch(document, ".uno:GoDown", "", 0, args2())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:SelectRow", "", 0, Array())

rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:DeleteRows", "", 0, Array())
end sub
Open Office 4.1.15 sous Windows 11
SolPro
Membre OOrganisé
Membre OOrganisé
Messages : 79
Inscription : 31 juil. 2022 12:38

Re: [Calc] Import CSV avec Zbasic - à partir d'un numéro deligne

Message par SolPro »

Dolev a écrit : 26 janv. 2025 08:51 Une fois le CSV importé, vous supprimez les N premières lignes.
Bonjour
Merci
L'importation du CSV ne peut pas se faire tant qu'il y a des lignes inutiles (en-tête).
J'ai le message d'erreur suivant qui émane de zbasic
solproimportcsvligne.png
Soit je parviens à supprimer les lignes avant import, soit zbasic (zfeuille) peut permettre cela. J'ai lu/relu et ce point de pouvoir importer via zbasic à partir d'un numéro de ligne n'est pas implanté.
Je pensais à un paramètre dans zcsv.parametre
Merci pour votre aide ; je continue à chercher et votre aide/conseil sont les bienvenus
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
LibreOffice 7.5.4.2 (x64) et Windows 10 Pro (personnel)
LibreOffice 7.2.7.2.M7 (x64) et Windows 10 Pro (professionnel, obligatoire)
Avatar de l’utilisateur
Dolev
SuppOOrter
SuppOOrter
Messages : 1146
Inscription : 19 août 2018 05:20

Re: [Calc] Import CSV avec Zbasic - à partir d'un numéro deligne

Message par Dolev »

SolPro a écrit : 26 janv. 2025 10:03 L'importation du CSV ne peut pas se faire tant qu'il y a des lignes inutiles (en-tête).
Votre CSV n'en est pas un dans ce cas.
Voyez avec celui qui vous fournit le fichier de respecter la normalisation :
https://www.rfc-editor.org/rfc/rfc4180
Open Office 4.1.15 sous Windows 11
SolPro
Membre OOrganisé
Membre OOrganisé
Messages : 79
Inscription : 31 juil. 2022 12:38

Re: [Calc] Import CSV avec Zbasic - à partir d'un numéro deligne

Message par SolPro »

Dolev a écrit : 26 janv. 2025 10:54 Votre CSV n'en est pas un dans ce cas.
Voyez avec celui qui vous fournit le fichier de respecter la normalisation :
https://www.rfc-editor.org/rfc/rfc4180
Cela n'est pas possible : c'est un ministère et franchement... c'est bien le cadet de leurs soucis.

Je continue donc à chercher un code me permettant de supprimer x lignes avant import (dans le cas présent : 8 ).
Merci pour votre aide.
LibreOffice 7.5.4.2 (x64) et Windows 10 Pro (personnel)
LibreOffice 7.2.7.2.M7 (x64) et Windows 10 Pro (professionnel, obligatoire)
Avatar de l’utilisateur
DLE
HédOOniste
HédOOniste
Messages : 1503
Inscription : 30 déc. 2007 18:56
Localisation : Lille

Re: [Calc] Import CSV avec Zbasic - à partir d'un numéro de ligne

Message par DLE »

Bonjour,
En attendant que zBasic prenne en compte votre demande, vous trouverez dans le fichier joint une macro qui fait le job. Vous pouvez traiter plusieurs fichiers en une seule fois, s'ils ont la même structure, c'est-à-dire de partir toujours de la ligne huit.
La macro :

Code : Tout sélectionner

REM  *****  BASIC  *****

Sub LoadCsv()
Dim oDoc as Object
Dim oDocSource As Object
Dim oFeuilles As Object
Dim oF1 As Object
Dim oFSource As Object
Dim oFParam As Object
Dim oFTrace As Object
Dim propFich(2) As New com.sun.star.beans.PropertyValue
Dim sLesFichiers() As String
Dim oPlage As Object
Dim x As Integer
Dim sResu() as string
Dim sDossier As String
Dim oCurseur As Object
Dim iCol as Integer
Dim lLigneTrace As Long
Dim nFichiers As Integer 
Dim sAdresseDoc As String
Dim DejaTraite As Integer
Dim aCopier As object
Dim oFP As Object
	oDoc = ThisComponent
	oFeuilles =  oDoc.Sheets
	oF1 = oFeuilles.getByName("Export")
	Propfich(0).Name = "FilterName"
	Propfich(0).Value = "Text - txt - csv (StarCalc)"
	Propfich(1).Name = "FilterOptions"	
	propFich(1).Value = "59/9,34,12,8"  ' au démarre à la 8eme ligne
	propFich(2).Name = "Hidden"
	propFich(2).Value = True
' Récup nom du dossier et vérification présence
	sDossier = ""  'c:\temp\RC30.csv
' Afficher les fichiers	 
	oFP = CreateUnoService("com.sun.star.ui.dialogs.OfficeFilePicker")
	oFP.DisplayDirectory = ConvertToURL(sDossier)
	oFP.AppendFilter("Documents ODF", "*.csv")
	oFP.CurrentFilter = "Documents ODF"
	oFP.MultiSelectionMode = True
	oFP.Title = "Sélectionner le(s) fichier(s) à traiter"
' Traitement	
' ouverture d'un des fichiers sélectionnés (source)
' recopie des cellules
' fermeture du fichier source
' trace  insertion fichier traité dans la feuille 
	if oFP.execute = com.sun.star.ui.dialogs.ExecutableDialogResults.OK then
		sLesFichiers() = oFP.SelectedFiles
		nFichiers = UBound(sLesFichiers())
		oPlageC = oF1.getCellRangeByName("A1")
		sAdresseDoc = ConvertToURL(sLesFichiers(x))
		for x = 0 to nFichiers '+ 1	
				sAdresseDoc = ConvertToURL(sLesFichiers(x))		
			oDocSource = StarDesktop.loadComponentFromURL( sAdresseDoc , "_blank", 0, propFich()   )
			oFSource = oDocSource.Sheets.getByName(oDocSource.Sheets.ElementNames(0)) ' getByName("Export")
			oCurseur = oFSource.createCursorByRange(oFSource.getCellRangeByName("A1"))
			oCurseur.gotoEndOfUsedArea(True)
			oPlage = oFSource.getCellRangeByPosition(0,oCurseur.RangeAddress.StartRow,oCurseur.RangeAddress.EndColumn,oCurseur.RangeAddress.EndRow)
			oDocSource.CurrentController.Select(oPlage)
			aCopier = oDocSource.CurrentController.getTransferable()     
			oDoc.CurrentController.Select(oPlageC)
			oDoc.CurrentController.insertTransferable(aCopier)
			oDocSource.close(true)
			oCurseur = oF1.createCursorByRange(oF1.getCellRangeByName("A1"))
			oCurseur.gotoEndOfUsedArea(True)
			oPlageC = oF1.getCellRangeByPosition(0,oCurseur.RangeAddress.EndRow,oCurseur.RangeAddress.EndColumn,oCurseur.RangeAddress.EndRow)				
		next x 
' Mise à jour terminée	
		oFP.dispose
		MsgBox("C'est fini")
		exit sub
' Annulation de la mise  à jour
	else
		MsgBox("Traitement annulé")
	end if
End Sub
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par DLE le 27 janv. 2025 08:00, modifié 1 fois.
MacOS Sequoia 15.5 (iMac-Intel) : AOO 4.1.15 , LibreOffice 24.8.5.2, Adoptium-temurinJDK 1.8.0_402, CCC, FireFox, Thunderbird, ORB 1.2.1
Parallel Desktop = Windows 10 & MacOS : AOO, Libreoffice.
SolPro
Membre OOrganisé
Membre OOrganisé
Messages : 79
Inscription : 31 juil. 2022 12:38

Re: [Calc] Import CSV avec Zbasic - à partir d'un numéro de ligne

Message par SolPro »

Bonsoir

merci pour la solution proposée par DLE.
Cela fonctionne comme je le veux ; du coup, je n'ai plus utilisé zbasic (csv) pour l'import me permettant d'avoir les dates au format date (dommage, pour moi, c'était vraiment très sympa)

Bonne soirée.
LibreOffice 7.5.4.2 (x64) et Windows 10 Pro (personnel)
LibreOffice 7.2.7.2.M7 (x64) et Windows 10 Pro (professionnel, obligatoire)
Avatar de l’utilisateur
Bidouille
RespOOnsable forum
RespOOnsable forum
Messages : 12668
Inscription : 08 nov. 2005 16:23
Localisation : Brest, France

Re: [Résolu] [Calc] Import CSV avec Zbasic - à partir d'un numéro de ligne

Message par Bidouille »

Bonjour,

La prochaine 3.1.8 de zBasic embarquera ce paramètre.

Comme ce projet est fait sur mon temps libre et que je fais autre chose de mes dimanches, merci de votre compréhension.
SolPro
Membre OOrganisé
Membre OOrganisé
Messages : 79
Inscription : 31 juil. 2022 12:38

Re: [Résolu] [Calc] Import CSV avec Zbasic - à partir d'un numéro de ligne

Message par SolPro »

Bidouille a écrit : 27 janv. 2025 07:27 Bonjour,

La prochaine 3.1.8 de zBasic embarquera ce paramètre.

Comme ce projet est fait sur mon temps libre et que je fais autre chose de mes dimanches, merci de votre compréhension.
Un grand merci encore pour cette extension qui grandit régulièrement :super:
LibreOffice 7.5.4.2 (x64) et Windows 10 Pro (personnel)
LibreOffice 7.2.7.2.M7 (x64) et Windows 10 Pro (professionnel, obligatoire)