2010-06-07 5 views
3

Je voudrais écrire une fonction OpenOffice personnalisée qui exécute une commande shell et place le résultat dans la cellule à partir de laquelle elle a été invoquée. J'ai une macro de base fonctionnant, mais je ne peux pas trouver un moyen de capturer la sortie de la commande. Ce qui précède renvoie toujours 0. En regardant la documentation de la commande Shell, je ne pense pas qu'elle renvoie réellement STDOUT.Exécuter la commande shell et renvoyer la sortie comme résultat de la fonction personnalisée

Comment est-ce que je capturerais la sortie pour que je puisse la retourner dans ma fonction?

Répondre

1

Pouvez-vous rediriger la sortie vers un fichier temporaire, puis lire le contenu de ce fichier avec une autre commande?

par exemple, Shell("bash -c "" echo hello > tmp.txt "" ")

1

Kimbal Robinson's answer œuvres, mais présente l'inconvénient d'utiliser un fichier. Il est lent (comparé à l'utilisation de la mémoire uniquement), et vous devez supprimer le fichier par la suite (bien qu'en le mettant dans/tmp, il sera généralement supprimé automatiquement par la suite).

Une alternative est d'avoir le transit de données via le presse-papiers:

Dim myCommand As String 
myCommand = "echo hello world" 
Shell ("bash", 1, "-c "" " & myCommand & " | xclip -selection clipboard"" ", true) 
' setting the 4th parameter to true ensures that the Shell function will wait until ' 
' the command terminates before returning ' 

' then paste the content of the clipboard ' 
Dim dh As Object 
dh = createUnoService("com.sun.star.frame.DispatchHelper") 
dh.executeDispatch(StarDesktop.CurrentFrame, ".uno:Paste", "", 0, Array()) 

Cela collera la sortie de la commande au point actuel du document actif.

Notez que si la commande émet plusieurs lignes, la boîte de dialogue "Importation de texte" apparaîtra (je ne sais pas comment l'éviter).

Questions connexes