2017-03-14 4 views
0

J'ai un fichier .ods qui contient de nombreux liens qui doivent être mis à jour automatiquement. Comme je comprends, il n'y a pas de moyen facile de le faire avec des macros ou des arguments de commande libreoffice, donc j'essaie de mettre à jour tous les liens lors de l'ouverture du fichier puis je vais enregistrer le fichier et quitter.Libreoffice - mettre à jour automatiquement les liens lors de l'ouverture?

Tous les liens sont des liens DDE qui devraient pouvoir se mettre à jour automatiquement (et sont configurés dans Edit> Links), et je les ai également activés dans Outils> Options> Calc> Général> Toujours mettre à jour les liens lors de l'ouverture, ainsi que Outils> Options> Calc> Formules> Toujours recalculer. Cependant, je suis toujours invité avec un popup pour mettre à jour manuellement les liens à l'ouverture, et les liens ne seront pas à jour si je ne sélectionne pas Mettre à jour. J'ai besoin de ces liens DDE pour mettre à jour automatiquement, pourquoi cela ne fonctionne-t-il pas?

S'il n'y a pas de solution, je suis également prêt à essayer de mettre à jour les liens via Python. Est-ce que Uno travaillera avec libreoffice pour le faire sans ruiner les graphes préexistants dans le fichier comme le fait openpyxl?

+0

Quelle est la formule de la cellule - Cela ressemble-t-il '= DDE (" soffice "," c: \ users \ nom d'utilisateur \ desktop \ 1.ods " , "Sheet1.A1") 'ou' = 'file: /// C: /Users/nom_utilisateur/Desktop/1.ods' # $ Sheet1.A2' ou '{=' file: /// C:/Users /username/Desktop/1.ods '# $ Sheet1.A3} '? DDE peut signifier plusieurs choses différentes. –

+1

Le premier: "= DDE (" soffice "," file: ///Users/crushendo/Desktop/Folder/Report-Data.xlsx "," Weekly Report.A1 ")" – crushendo

+1

J'ai le code pour mettre à jour les liens DDE , mais l'API ne fournit pas une méthode pour supprimer l'invite lors de l'ouverture du fichier (j'ai essayé d'exécuter le code sur l'événement "document open"). Donc, je suppose que vous n'avez pas de chance: vous devez répondre "Oui" si vous voulez les valeurs réelles. – ngulam

Répondre

0

L'API ne fournit pas de méthode pour supprimer l'invite lors de l'ouverture du fichier!

J'ai essayé d'exécuter le code StarBasic pour mettre à jour les liens DDE sur l'événement "document open", mais la question ne cesse de surgir. Donc, je suppose que vous n'avez pas de chance: vous devez répondre «Oui» si vous voulez les valeurs réelles.

[posté le commentaire à la question OP ici encore comme réponse, comme le suggère @ Jim K]

+0

Eh bien, c'est terrible. Y at-il une solution de contournement en mode sans tête que vous avez trouvé, ou toute autre façon de mettre à jour les liens sans aucune intervention humaine? J'ai besoin de mettre à jour les liens sur un programme de minuterie automatique. J'ai cherché dans pyoo comme une solution, mais la bibliothèque a quelques problèmes avec la dépendance de la bibliothèque Uno pour moi. – crushendo

0

Essayez ce code, mettre à jour les liens DDE d'un document CALC (en mode sans tête)

Sub autoupdate_DDE 
' 20170314 
' load library with help function 
GlobalScope.BasicLibraries.LoadLibrary("Tools") 
' get all DDE links of document ' 
dde_links = ThisComponent.DDELinks 
' get array of names ' 
aEN = dde_links.getElementNames() 
' work on every DDE link ' 
for i = 0 to UBound(aEN()) 
    xTF = dde_links.getByName(aEN(i)) 
    xTF.refresh() 
Next 
End Sub 

note: cet extrait est uniquement pour CALC, WRITER utilise textfield s pour les liens DDE.

[fourni comme une autre réponse, afin d'utiliser le formatage du code. Ajout de chaînes de guillemets simples à la fin des commentaires, pour conserver la colorisation du code]