Saltar al contenido

Macro de Microsoft Excel para ejecutar el programa Java

Si encuentras algún detalle que no comprendes puedes dejarlo en los comentarios y trataremos de ayudarte rápidamente.

Solución:

Sí, es posible.

En realidad, hay bastantes formas y espero que les gusten mis ejemplos.

Para demostrar esto, creo un programa en el que se envía un texto como argumento y el programa responde con una versión alterada del mismo. Hice un frasco ejecutable de él. El primer ejemplo lee el argumento de args y otro de la entrada estándar.

Archivo Hola.java y H1.jar:

public class Hello 
    public static void main(String[] args) 
        StringBuilder sb = new StringBuilder("Hello");
        
        if (args.length > 0) 
            sb.append(' ').append(args[0]);
        System.out.println(sb.append('.').toString());
    

Archivo Hola2.java y H2.jar:

import java.util.Scanner;

public class Hello2 
    public static void main(String[] args) 
        Scanner sc = new Scanner(System.in);
        StringBuilder sb = new StringBuilder("Hello");
        
        sb.append(' ').append(sc.nextLine());
        System.out.println(sb.append('.').toString());
    

Puede guardarlos en un solo contenedor, pero luego necesita crear y usar un manifiesto (eso es un poco excesivo).

Ahora, en Excel, agrego un módulo y una referencia a Windows Script Host Object. Si no te gusta el sleepentonces puedes reemplazarlo con DoEvents:

'add a reference to Windows Script Host Object Model
'for example : Tools-References
Option Explicit
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Private Sub RunSleep( _
    exec As WshExec, _
    Optional timeSegment As Long = 20 _
)
    Do While exec.Status = WshRunning
        Sleep timeSegment
    Loop
End Sub

Private Function RunProgram( _
    program As String, _
    Optional command As String = "" _
) As WshExec
    Dim wsh As New WshShell
    Dim exec As WshExec

    Set exec = wsh.exec(program)
    Call exec.StdIn.WriteLine(command)
    Call RunSleep(exec)
    Set RunProgram = exec
End Function

Y para probarlo guardé los archivos en c: conducir y usó el código:

Public Sub Run()
    Dim program As WshExec
    Set program = RunProgram("java -jar ""C:\H1.jar"" Margus")
    Debug.Print "STDOUT: " & program.StdOut.ReadAll

    Set program = RunProgram("java -jar ""C:\H2.jar", "Margus")
    Debug.Print "STDOUT: " & program.StdOut.ReadAll
End Sub

En mi caso obtengo una respuesta de:

STDOUT: Hola Margus.

STDOUT: Hola Margus.

Su VBA puede escribir la salida en un archivo y Java puede sondear las modificaciones del archivo periódicamente y leer del archivo. Y vuelva a escribir los datos en VBA a través de otro archivo. VBA: la integración de Java es casi imposible a menos que solo desee iniciar un programa Java desde el shell a través de System.execute (…).

Recuerda que tienes permiso de decir si te fue útil.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *