[Résolu][Calc] Sauvegarde au format XLSX xlOpenXML

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 !
Avatar de l’utilisateur
Flying_Roger
NOOuvel adepte
NOOuvel adepte
Messages : 21
Inscription : 24 juil. 2021 11:28

[Résolu][Calc] Sauvegarde au format XLSX xlOpenXML

Message par Flying_Roger »

Dans une macro qui manipule plusieurs feuilles d'un workbook ODS, en isole une dans un nouveau document et la sauve en format XLSX, je rencontre un problème avec la commande SaveAs:

Code : Tout sélectionner

ActiveSheet.Copy
Workbooks(1).SaveAs Filename:=nom.xlsx, FileFormat:=xlOpenXMLWorkbook
Cette commande crée bien un fichier "nom.xlsx", mais son format est en fait celui d'un document ODS.
Le paramètre FileFormat semble ignoré.

Je précise que "Workbooks(1)" me sert à accéder à la copie générée par la première commande.

Comment pourrais-je faire pour que le SaveAs effectue la conversion en XLSX?
Dernière modification par Bidouille le 27 juil. 2021 18:16, modifié 3 fois.
Raison : Ajot de la coche verte
Roger
LibreOffice7.0.6.2 (x64) - OpenOffice 4.1.10 - Windows 10
Avatar de l’utilisateur
Dolev
InconditiOOnnel
InconditiOOnnel
Messages : 948
Inscription : 19 août 2018 05:20

Re: [Calc] SaveAs FileFormat=xlOpenXMLWorkbook sauve en ODS

Message par Dolev »

Bonjour,

Comme pour ton autre question, utilise l'enregistreur de macro.
La commande uno:SaveAs et le filtre qui va bien :

Code : Tout sélectionner

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

rem ----------------------------------------------------------------------
dim args1(1) as new com.sun.star.beans.PropertyValue
args1(0).Name = "URL"
args1(0).Value = ConvertToUrl(ton_nom_de_fichier) 
args1(1).Name = "FilterName"
args1(1).Value = "MS Excel 97"

dispatcher.executeDispatch(document, ".uno:SaveAs", "", 0, args1())
Note qu'un classeur en format Excel perdra les macros qu'il contient en ODS.
Open Office 4.1.15 sous Windows 11
Avatar de l’utilisateur
Flying_Roger
NOOuvel adepte
NOOuvel adepte
Messages : 21
Inscription : 24 juil. 2021 11:28

Re: [Calc] SaveAs FileFormat=xlOpenXMLWorkbook sauve en ODS

Message par Flying_Roger »

Merci pour l'aide.

En fait, j'avais déjà testé une telle séquence, trouvée dans un autre post, mais cela n'avait pas fonctionné, mais je viens de voir une différence au niveau de la syntaxe. Avec ce code, le sauvetage fonctionne, avec quand même quelques problèmes:

1- Le format n'est pas le format xlsx, en renommant, j'ai vu qu'Excel pouvait le lire à condition de le renommer XLS;
je devrais pouvoir résoudre cela en cherchant le bon type à mettre dans le code uno.
2- Le document sauvé n'est pas celui créé par la commande "copy", mais bien l'original, avec tous ses onglets.
c'est pourtant la copie qui est active, mais Thisdocument n'est manifestement pas le bon document.
3- A la fermeture du fichier avec sauvegarde, j'ai une Exception:
Erreur d'exécution BASIC.
'1'
Type: com.sun.star.task.ErrorCodeIOException
Message: SfxBaseModel::storeSelf: 0x31c
C'est sans doute lié au problème 2: ce n'est pas le bon document qui se ferme mais celui qui contient le code en cours d'exécution.

Il s'agit donc de trouver un équivalemnt de "ThisComponent.CurrentController.Frame" qui pointe sur la copie et pas sur l'original.
Là, je rame car le modèle uno est tout à fait nouveau pour moi. Peut-être avec l'enregistreur, mais quand j'avais commencé à chercher de ce côté-là pour d'autres conversions, j'avais été plutôt déçu: le code était très incomplet, tout n'étant pas supporté par l'enregistreur.
Roger
LibreOffice7.0.6.2 (x64) - OpenOffice 4.1.10 - Windows 10
Avatar de l’utilisateur
Dolev
InconditiOOnnel
InconditiOOnnel
Messages : 948
Inscription : 19 août 2018 05:20

Re: [Calc] SaveAs FileFormat=xlOpenXMLWorkbook sauve en ODS

Message par Dolev »

Re,
Flying_Roger a écrit :A la fermeture du fichier avec sauvegarde, j'ai une Exception
Comme pour ton autre question, fournis ce fameux fichier. :fou:
Flying_Roger a écrit : j'ai vu qu'Excel pouvait le lire à condition de le renommer XLS
Excel sait aussi lire de l'ODS.
Open Office 4.1.15 sous Windows 11
Avatar de l’utilisateur
Flying_Roger
NOOuvel adepte
NOOuvel adepte
Messages : 21
Inscription : 24 juil. 2021 11:28

Re: [Calc] SaveAs FileFormat=xlOpenXMLWorkbook sauve en ODS

Message par Flying_Roger »

Sorry, j'essayais de poser des questions basiques pour tenter de comprendre les principes plutôt que d'envoyer un fichier avec une application assez lourde qui contient des données personnelles que je n'ai pas le droit de diffuser.
Dans ce cas précis, j'avais bien indiqué que la cause du plantage était probablement que le document fermé avec sauvegarde n'était pas le bon (cf. "storeSelf" dans le msg d'erreur).

J'ai donc abandonné l'idée que le document que je voyais à l'écran à ce stade du code était le document actif et j'ai remplacé ActiveWorkbook par un adressage spécifique, ce qui alourdit le code car le problème revient à divers endroits, mais cela fonctionne:

Code : Tout sélectionner

Workbooks("nomduworkbook.xlsx").Close
"Excel sait aussi lire de l'ODS."
=> bien entendu, mais le but était de créer une copie d'une feuille en format .XLSX.
Roger
LibreOffice7.0.6.2 (x64) - OpenOffice 4.1.10 - Windows 10
Avatar de l’utilisateur
Dolev
InconditiOOnnel
InconditiOOnnel
Messages : 948
Inscription : 19 août 2018 05:20

Re: [Calc] SaveAs FileFormat=xlOpenXMLWorkbook sauve en ODS

Message par Dolev »

Flying_Roger a écrit :envoyer un fichier avec une application assez lourde qui contient des données personnelles que je n'ai pas le droit de diffuser
Ce fichier ne nous intéresse pas.
Tu dois fournir un document limité à la seule problématique que tu poses.
Flying_Roger a écrit :J'ai donc abandonné l'idée
Si ton problème est clos, merci d'ajouter la balise [Résolu]
Open Office 4.1.15 sous Windows 11
Avatar de l’utilisateur
Flying_Roger
NOOuvel adepte
NOOuvel adepte
Messages : 21
Inscription : 24 juil. 2021 11:28

Re: [Résolu][Calc] SaveAs FileFormat=xlOpenXMLW...

Message par Flying_Roger »

C'est fait... j'ai dû raccourcir le titre car la longueur est apparemment très limitée.
Roger
LibreOffice7.0.6.2 (x64) - OpenOffice 4.1.10 - Windows 10