[Calc] Exporter une feuille du classeur courant dans un dossier

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 !
parlapresente
Membre lOOyal
Membre lOOyal
Messages : 39
Inscription : 17 janv. 2020 19:39

[Calc] Exporter une feuille du classeur courant dans un dossier

Message par parlapresente »

Bonjour,

Savez-vous s'il est possible, via une macro d'exporter (sauvegarder disons) une feuille du classeur courant (admettons Feuille3) dans un dossier avec un nom prédéfini ?

Je réouvre le fil car pas possible d'utiliser pour moi zbasic.

Je passe par cette macro, qui fonctionne pas trop mal sauf que dans les fichiers exportés au format ods (voir prog ci-dessous), les formules sont présentes et les liens également alors que c'est un copier/ coller valeur que j'aurais préféré ...

Code : Tout sélectionner

Sub CopySheetOut()

' Define variables
dim document   as object
dim oDoc       as object
dim dispatcher as object

dim args1(0) as new com.sun.star.beans.PropertyValue
dim args2(2) as new com.sun.star.beans.PropertyValue
dim args3(1) as new com.sun.star.beans.PropertyValue

'Output formats
dim types(4)
dim extns(4)
   types(0) = "MS Excel 97"                 ' MS Excel .xls
   types(1) = "Calc MS Excel 2007 XML"      ' MS Excel .xlsx
   types(2) = "calc8"                       ' LibreOffice/OO .ods
   types(3) = "Text - txt - csv (StarCalc)" '.csv file
   extns(0) = ".xls"
   extns(1) = ".xlsx"
   extns(2) = ".ods"
   extns(3) = ".csv"

' - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - *
'Start customisation

'             Change variables below before runing the macro

   '----------------------------------------------------------------------
   'Full name of the folder to save the documents to.
   ' On Windows use / instead of \ to define the folder path.
   ' Terminate the path with /
   root = "C:/Gestion/PERSO/Backups"
   loca = ""
   ' We use a special naming convention: root/sheet_name/loca/sheet_name.extn
   '----------------------------------------------------------------------
   ' The output name will be the sheet name with some changes
   ' An optional suffix for the filename
   suff = "_BACKUP"
   '----------------------------------------------------------------------
   ' Output file format. See types() array for definition
   extn = 2

' End customisation
' - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - * - *

   '----------------------------------------------------------------------
   oDoc       = ThisComponent
   document   = ThisComponent.CurrentController.Frame
   dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

   ' Loop through all sheets and ...
   nSheets = oDoc.Sheets.Count
   for i = 6 to 6 step -1
      '----------------------------------------------------------------------
      ' Generate output filename
      oSheet   = oDoc.Sheets(i-1)
      Sht_Name = oSheet.GetName
      If Sht_Name = "Feuille1" Then Sht_Name = "Feuille1New"
      ' Make some changes to the filename...
      Sht_Name = Replace(Sht_Name, " ", "")
      Sht_Name = Replace(Sht_Name, "-", "")
      Sht_Name = Replace(Sht_Name, "_", "")
      filename = Sht_Name & suff & extns(extn)
      filename2=oDoc.Sheets.getByName(thiscomponent.currentController.activeSheet.name).getCellRangeByName("H1").String & suff & extns(extn)
      ' Full path to the new file
      'dire     = root & Sht_Name & "/" & loca
      dire     = root & "/" & loca
      '----------------------------------------------------------------------
      ' Create a Calc document
      oDocN    = StarDesktop.loadComponentFromURL( "private:factory/scalc", "_blank", 0, Array() )
      oDocNF   = oDocN.CurrentController.Frame
      ' Save new spreadheet
      If extn = 3 Then
        ' For CSV we need to provide more info...
         args2(0).Name  = "URL"
         args2(0).Value = "file:///" & dire & filename
         args2(1).Name  = "FilterName"
         args2(1).Value = types(extn)
         args2(2).Name = "FilterOptions"
         args2(2).Value = "44,34,76,1,,0,false,true,false,false,false"  'See readme.md for options
         dispatcher.executeDispatch(oDocNF, ".uno:SaveAs", "", 0, args2())
      Else
         args3(0).Name  = "URL"
         args3(0).Value = "file:///" & dire & filename
         args3(1).Name  = "FilterName"
         args3(1).Value = types(extn)
         dispatcher.executeDispatch(oDocNF, ".uno:SaveAs", "", 0, args3())
      End If

      '----------------------------------------------------------------------
      ' Activate sheet i
      args1(0).Name  = "Nr"
      args1(0).Value = i
      dispatcher.executeDispatch(document, ".uno:JumpToTable", "", 0, args1())
      '----------------------------------------------------------------------
      ' Copy sheet i to new spreadsheet file
      args2(0).Name  = "DocName"
      args2(0).Value = Sht_Name & suff
      args2(1).Name  = "Index"
      args2(1).Value = 1
      args2(2).Name  = "Copy"
      args2(2).Value = true
      dispatcher.executeDispatch(document, ".uno:Move", "", 0, args2())

      '----------------------------------------------------------------------
      ' Delete "Sheet1" from new document
      oShts = oDocN.Sheets
      oShts.removeByName("Feuille1")
      '----------------------------------------------------------------------
      ' Save & close new document
      dispatcher.executeDispatch(oDocNF, ".uno:Save", "", 0, Array())
      oDocN.close(true)
      if (dir(dire & filename2))<>"" then kill (dire & filename2)
        name (dire & filename) as (dire & filename2)
     next 

End Sub

Merci
Dernière modification par parlapresente le 23 févr. 2024 19:21, modifié 3 fois.
LIbreoffice 24.2.1
Windows 11
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25184
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Calc] Exporter une feuille du classeur courant dans un dossier

Message par Dude »

Salut,

Tu installes zBasic et tu fais ça en deux lignes :

Code : Tout sélectionner

  GlobalScope.BasicLibraries.loadLibrary ("zBasic")
  zFeuille.Exporte("c:\chemin\vers\TonClasseur.ods", "TaFeuille")	
parlapresente
Membre lOOyal
Membre lOOyal
Messages : 39
Inscription : 17 janv. 2020 19:39

Re: [Calc] Exporter une feuille du classeur courant dans un dossier

Message par parlapresente »

Merci mais pas possible au boulot, trop compliqué pour les utilisateurs.
LIbreoffice 24.2.1
Windows 11
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25184
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Calc] Exporter une feuille du classeur courant dans un dossier

Message par Dude »

parlapresente a écrit : 22 févr. 2024 16:47 mais pas possible au boulot, trop compliqué pour les utilisateurs
Dans ce cas, tu décortiques la routine Exporte du module zFeuille pour comprendre comment cela fonctionne.

Le "trop compliqué" nécessite un minimum d'effort quand on veut s'investir dans les macros.
parlapresente
Membre lOOyal
Membre lOOyal
Messages : 39
Inscription : 17 janv. 2020 19:39

Re: [Calc] Exporter une feuille du classeur courant dans un dossier

Message par parlapresente »

Je crois que le problème vient de cette partie là du code de zbasic

Code : Tout sélectionner

oClasseur = stardesktop.loadComponentFromUrl("private:factory/scalc", "_blank", 0, Array())     
	oNomSauve = convertToUrl(sFic)
	oClasseur.storeAsURL(oNomSauve, propFich())
	oClasseur.Sheets.removeByName("Feuille1")
	oClasseur.Sheets.removeByName("Feuille2")         
Il n'y a rien de plus à activer pour lancer la commande stardesktop.loadComponentFromUrl ?
J'ai décortiqué la partie zfeuille, exporte.
C'est comme si rien n'était copié.
Dernière modification par parlapresente le 24 févr. 2024 09:36, modifié 1 fois.
LIbreoffice 24.2.1
Windows 11
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25184
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Calc] Exporter une feuille du classeur courant dans un dossier

Message par Dude »

parlapresente a écrit : 24 févr. 2024 09:32 Je crois que le problème vient de cette partie là du code de zbasic
Les deux parties de code que tu exposes ne sont pas issues de zBasic.
Et le minimum à faire quand tu pompes des macros est de citer la source.
C'est une question de respect pour l'auteur.
parlapresente
Membre lOOyal
Membre lOOyal
Messages : 39
Inscription : 17 janv. 2020 19:39

Re: [Calc] Exporter une feuille du classeur courant dans un dossier

Message par parlapresente »

J'ai testé sur un nouveau document tout simple et même problème, un fichier vierge s'ouvre et c'est tout.
La commande

Code : Tout sélectionner

oClasseur = stardesktop.loadComponentFromUrl("private:factory/scalc", "_blank", 0, Array())     
doit donc bien fonctionner, la suite par contre ...
LIbreoffice 24.2.1
Windows 11
Avatar de l’utilisateur
Bidouille
RespOOnsable forum
RespOOnsable forum
Messages : 12231
Inscription : 08 nov. 2005 16:23
Localisation : Caen, France

Re: [Calc] Exporter une feuille du classeur courant dans un dossier

Message par Bidouille »

Pour la bonne tenue de ce forum, je vous invite à :
Dernière modification par parlapresente le 24 févr. 2024 10:36, modifié 1 fois.
Ne plus modifier vos messages dès lors qu'il y a une réponse derrière.
Cela rend illisible la logique de lecture.
Vous devez penser d'abord à tous ceux qui recherchent dans ce forum et qui ne comprendront rien à ce fil.

Ensuite pour être aidé efficacement par les bénévoles et surtout leur faire gagner du temps, veuillez fournir les éléments suivants :
  1. insérer dans le corps du message le code de la macro exposant le problème
  2. joindre un document explicatif intégrant cette macro avec les données de départ (feuille1) et le résultat à obtenir (feuille2)
  3. fournir un mode pas-à-pas permettant de reproduire ce qui a été fait ou ce que vous cherchez à faire pour arriver au problème
  4. ajouter des copies écran (situation avant / après) car cela permet de mieux comprendre
Merci de publier ces informations à la suite.
parlapresente
Membre lOOyal
Membre lOOyal
Messages : 39
Inscription : 17 janv. 2020 19:39

Re: [Calc] Exporter une feuille du classeur courant dans un dossier

Message par parlapresente »

Je tente de copier la feuille "Intro" du fichier en PJ dans un nouveau document nommé toto.ods (répertoire E:)
J'ai intégré dans mon fichier la partie "exporte" de zbasic pour plus de facilité.
Le problème rencontré est le suivant : lors de l'exécution de main, un fichier vierge ods s'ouvre et c'est tout, pas de copie, pas de renommage de nom de fichier, rien du tout.

Merci.

SOURCE : https://beaussier.com/wiki/index.php?title=Accuei
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par parlapresente le 24 févr. 2024 10:53, modifié 1 fois.
LIbreoffice 24.2.1
Windows 11
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25184
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Calc] Exporter une feuille du classeur courant dans un dossier

Message par Dude »

parlapresente a écrit : 24 févr. 2024 10:08 J'ai intégré dans mon fichier la partie "exporte" de zbasic pour plus de facilité.
Ce n'est pas ce qu'il faut faire. Il faut intégrer tout le module zFeuille.

Et encore une fois :
Dude a écrit : 24 févr. 2024 09:35 le minimum à faire quand tu pompes des macros est de citer la source.
C'est une question de respect pour l'auteur.
parlapresente
Membre lOOyal
Membre lOOyal
Messages : 39
Inscription : 17 janv. 2020 19:39

Re: [Calc] Exporter une feuille du classeur courant dans un dossier

Message par parlapresente »

J'avais vérifié et seule la partie exporte était exploitée mais j'ai quand même placé l'ensemble des modules et idem.
Testé sur un autre PC, et idem, nouveau fichier qui reste ouvert avec page vierge, aucune copie, rien.

Juste pour tester avec une autre fonction, genre zCellule et zCellule fonctionne.

Code : Tout sélectionner

Sub main2
  GlobalScope.BasicLibraries.loadLibrary ("zBasic")
  zCellule.Ecrit  ("Intro", "B2", "C","m**de")
End Sub
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par parlapresente le 24 févr. 2024 11:19, modifié 1 fois.
LIbreoffice 24.2.1
Windows 11
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25184
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Calc] Exporter une feuille du classeur courant dans un dossier

Message par Dude »

Tout le module signifie copier le module et pas les routines du module.
A priori, tu ne lis pas ce que je t'ai dit précédemment.
Image
viewtopic.php?t=40146
parlapresente
Membre lOOyal
Membre lOOyal
Messages : 39
Inscription : 17 janv. 2020 19:39

Re: [Calc] Exporter une feuille du classeur courant dans un dossier

Message par parlapresente »

Ah ok, comme cela je pense.
J'ai beau triturer le programme je ne vois pas où ça bloque.
Au passage, si vous avez déjà utilisé ce module, savez vous s'il permet un copier-coller valeur/format ou juste copier-coller basique (avec toujours des formules)? Car seul le premier m'intéresse en fait, je veux exporter des feuilles mais juste en copier-coller spécial (valeur, format).

Merci.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
LIbreoffice 24.2.1
Windows 11
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25184
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Calc] Exporter une feuille du classeur courant dans un dossier

Message par Dude »

Il faut aussi copier le module zBasic qui est indispensable pour tous les autres :
Capture d'écran 2024-02-24 140812.png
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Poser une question, c'est bien. Répondre aux autres, c'est encore mieux.
Améliorez AOO et votez pour les issues
parlapresente
Membre lOOyal
Membre lOOyal
Messages : 39
Inscription : 17 janv. 2020 19:39

Re: [Calc] Exporter une feuille du classeur courant dans un dossier

Message par parlapresente »

Bonjour,

Je mets en PJ un document propre.
Je pense avoir pourtant fait ce qu'il fallait mais rien n'y fait, ça ne me colle rien du tout.
La macro semble pourtant se lancer, elle vérifie bien si le fichier n'est pas déjà présent et si la feuille existe.

La feuille MOM est bien la feuille active quand il m'ouvre le nouveau document vierge, donc je pense que la macro s'arrête, pour moi, à la ligne suivante :

Code : Tout sélectionner

	'Création et enregistrement du nouveau classeur
	oClasseur = stardesktop.loadComponentFromUrl("private:factory/scalc", "_blank", 0, Array())     
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
LIbreoffice 24.2.1
Windows 11
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25184
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Calc] Exporter une feuille du classeur courant dans un dossier

Message par Dude »

parlapresente a écrit : 28 févr. 2024 10:23 Je mets en PJ un document propre.
As-tu testé ce document ?
capture.png
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
parlapresente
Membre lOOyal
Membre lOOyal
Messages : 39
Inscription : 17 janv. 2020 19:39

Re: [Calc] Exporter une feuille du classeur courant dans un dossier

Message par parlapresente »

Bizarre cette erreur, je ne l'avais pas avant.
REvoici un autre fichier, sans erreur, testé à l'instant.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
LIbreoffice 24.2.1
Windows 11
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25184
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Calc] Exporter une feuille du classeur courant dans un dossier

Message par Dude »

parlapresente a écrit : 28 févr. 2024 17:00 Bizarre cette erreur, je ne l'avais pas avant.
Es-tu sûr d'être à jour de tes versions LibO et zBasic ?
Car je vois ceci :
Dans ta signature, il y a écrit :LIbreoffice 7.5.5.2 (x64)
parlapresente
Membre lOOyal
Membre lOOyal
Messages : 39
Inscription : 17 janv. 2020 19:39

Re: [Calc] Exporter une feuille du classeur courant dans un dossier

Message par parlapresente »

Oui j'ai mis à jour libreoffice et la version de zbasic, je l'avais télécharger du site officiel lorsque vous m'avez parlé de ce module.
LIbreoffice 24.2.1
Windows 11
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25184
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Calc] Exporter une feuille du classeur courant dans un dossier

Message par Dude »

Maintenant dans ta signature, il y a écrit :LIbreoffice 7.6.4.1 (x64)
qui n'est pas la dernière version

Et donc, j'émets aussi des doutes sur zBasic.
Surtout que tu as intégré les modules d'une 2.1.0e et que tu continues à faire un appel à la bibliothèque (GlobalScope).

capture.png
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
parlapresente
Membre lOOyal
Membre lOOyal
Messages : 39
Inscription : 17 janv. 2020 19:39

Re: [Calc] Exporter une feuille du classeur courant dans un dossier

Message par parlapresente »

J'ai téléchargé la version de Zbasic en fin de semaine dernière, je doute quand même que la fonction export ait été modifiée depuis.
De même, je n'ai pas non plus une version très archaïque de libre office (elle date de quelques semaines).
Quant à la bibliothèque, effectivement je l'ai laissé mais elle ne sert pas à grand chose.
Je vais mettre à jour mais sans grand espoir.

UP : pas mieux.
LIbreoffice 24.2.1
Windows 11
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25184
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Calc] Exporter une feuille du classeur courant dans un dossier

Message par Dude »

parlapresente a écrit : 29 févr. 2024 15:34 UP : pas mieux.
Merci d'être un peu plus prolixe dans tes réponses.
Fournis la même copie écran que moi.
parlapresente
Membre lOOyal
Membre lOOyal
Messages : 39
Inscription : 17 janv. 2020 19:39

Re: [Calc] Exporter une feuille du classeur courant dans un dossier

Message par parlapresente »

Voici.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
LIbreoffice 24.2.1
Windows 11
parlapresente
Membre lOOyal
Membre lOOyal
Messages : 39
Inscription : 17 janv. 2020 19:39

Re: [Calc] Exporter une feuille du classeur courant dans un dossier

Message par parlapresente »

Voici le fichier à jour et la capture d'écran.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
LIbreoffice 24.2.1
Windows 11
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25184
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Calc] Exporter une feuille du classeur courant dans un dossier

Message par Dude »

Tu fais les choses à moitié.
  1. A quoi sert le GlobalScope puisque tu veux intégrer zBasic à ton document ?
  2. Tu as conservé les modules de l'ancienne version.
Poser une question, c'est bien. Répondre aux autres, c'est encore mieux.
Améliorez AOO et votez pour les issues
parlapresente
Membre lOOyal
Membre lOOyal
Messages : 39
Inscription : 17 janv. 2020 19:39

Re: [Calc] Exporter une feuille du classeur courant dans un dossier

Message par parlapresente »

Dans le fichier en pj aussi ?
J'ai pourtant tout viré de zbasic puis télécharger la version 2.1.1 et tout remis.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
LIbreoffice 24.2.1
Windows 11
Avatar de l’utilisateur
jeanmi2403
SuppOOrter
SuppOOrter
Messages : 1398
Inscription : 18 janv. 2008 09:02
Localisation : Val de Marne

Re: [Calc] Exporter une feuille du classeur courant dans un dossier

Message par jeanmi2403 »

Bonsoir,
Je viens de tester chez moi (en dé-commentant la ligne, bien entendu..) et ça fonctionne. Après installation de zbasic, aussi !
Il y a bien création du dossier REP1 et du fichier test.ods avec le contenu de la feuille MOM.
Je vois que tu as la version 24.2, j'ai un doute sur cette version car j'ai déclaré un bug avec une extension...(résolu depuis)
Cordialement,
Jean-Michel
LibO 7.5.9 et AoO 4.1.15 sur Windows 11 & Ubuntu 22.04
LibO 7.6 sur OpenSuse & Linux MX