Nauczyłem się czytać i pisać plik Excela przy użyciu programu Java za pomocą interfejsu API Jxl i POI. Czy można uruchomić program Java za pomocą makr?Makro Microsoft Excel do uruchomienia programu Java
Odpowiedz
Tak, jest to możliwe.
Rzeczywiście istnieje wiele sposobów i mam nadzieję, że podoba mi się moje przykłady.
Aby to zademonstrować, tworzę program, w którym tekst jest wysyłany jako argumenty, a program odpowiada zmienioną wersją. Zrobiłem z tego słoik. Pierwszy przykład odczytuje argument z args i innych ze standardowego wejścia.
pliku Hello.java i 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());
}
}
pliku Hello2.java i 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());
}
}
Można zapisać je w pojedynczy słoik, ale musisz utworzyć i use a manifest (to trochę przesada).
Teraz w programie Excel dodaję moduł i odwołanie do obiektu Host skryptów systemu Windows. Jeśli nie podoba ci się sleep
, można zastąpić go 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
I przetestować go uratowałem pliki do c:\
napędu i wykorzystał kod:
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
W moim przypadku uzyskaj odpowiedź:
STDOUT: Hello Margus.
STDOUT: Cześć Margus.
Jeśli znalazłeś to przydatne, nie zapomnij upvote: D
Należy zauważyć, że zmienny ** program ** zawiera dodatkowe przydatne informacje, takie jak strumień błędów i kod powrotu. – Margus
@sreehari Wątpię, napisałem program, który odczytuje dane z komórek z już istniejącego pliku Excel i przetwarza go i umieszcza z powrotem w tym samym pliku. Nie jestem nowy w Javie, ale z pewnością jestem nowy w marce Excel. Czy muszę napisać makro? Nie mam pojęcia o tym, a samouczki nie dają żadnych informacji. Jak więc można to zrobić? –
Aby otworzyć środowisko VBA w Excelu, możesz użyć "alt + f11". Alternatywnym sposobem byłoby użycie przycisku wstążki programisty Visual Basic. Excel ma strony kodowe dla każdego arkusza, ale moduł jest podobny do przestrzeni wspólnej. Zauważ, że mogę użyć polecenia ** java -jar "C: \ H1.jar" Margus **, aby uruchomić program w CMD - jest bardzo mało kodu, który trzeba zapisać. – Margus
Twój VBA może zapisywać dane wyjściowe do pliku, a Java może okresowo odpytywać o modyfikacje plików i czytać z pliku. I zapisz dane z powrotem do VBA za pomocą innego pliku. VBA - integracja Java jest prawie niemożliwa, chyba że chcesz tylko wystrzelić program Java z powłoki przez System.execute (...).
Nieprawda. Integracja VBA-Java jest daleka od niemożliwości.Jakiś czas temu istniał nawet stary dobry Sun Java ActiveX Bridge, który niestety został przerwany przez Oracle (nadal dostępny dla Java 1.4: http://docs.oracle.com/javase/1.4.2/docs/guide/beans/ axbridge/developerguide /). Ale wciąż są dostępne technologie. Obba http://www.obba.info może być używany z VBA. Można również użyć xlloop. –
Użyłem go .. Uwaga, należy javaw inaczej czarne okna pojawiały się
Dim result As String
Dim commandstr As String
commandstr = "javaw -jar somejar someparameter"
' try with or without cast to string
result = CStr(shellRun(commandstr))
'somewhere from SO but forget.. sorry for missing credits
Public Function ShellRun(sCmd As String) As String
'Run a shell command, returning the output as a string'
Dim oShell As Object
Set oShell = CreateObject("WScript.Shell")
'run command'
Dim oExec As Object
Dim oOutput As Object
Set oExec = oShell.exec(sCmd)
Set oOutput = oExec.StdOut
'handle the results as they are written to and read from the StdOut object'
Dim s As String
Dim sLine As String
While Not oOutput.AtEndOfStream
sLine = oOutput.ReadLine
If sLine <> "" Then s = s & sLine & vbCrLf
Wend
ShellRun = s
End Function
Pytanie brzmiało, jak napisać program Java – user7294900
dziękuję za komentarz, ale pytanie brzmiało "Czy można uruchomić program Java za pomocą makr?" a to rozwiązanie robi to bez metody sleep i wskazywałem javaw zamiast java – mschwehl
- 1. DockerPlik do uruchomienia programu java
- 2. Jak uzyskać ścieżkę do uruchomienia programu java
- 3. makro, aby zaimportować plik CSV do arkusza nieaktywnego programu Excel
- 4. Dynamicznie wstawiaj makro do nowego skoroszytu programu Excel
- 5. Jak uruchomić makro programu Excel za pomocą zadania harmonogramu?
- 6. pisanie do programu Excel w języku Java
- 7. Makro Microsoft Word do podświetlania wielu słów
- 8. Zmień nazwę arkusza programu Excel na makro VBA
- 9. CSV do programu Excel konwersji
- 10. Uruchamianie makra programu Excel z zewnątrz programu Excel za pomocą skryptu VBScript z wiersza polecenia
- 11. Skrót do uruchomienia programu w SAS?
- 12. Microsoft Interop: Nazwy kolumn Excel
- 13. Utwórz makro programu Excel, które prosi o dzień, a następnie wstaw go do następnej otwartej komórki.
- 14. Dodatek COM dla programu Excel nie jest ładowany po uruchomieniu programu Excel przez otwarcie pliku
- 15. Konwersja makr programu Excel 4 do wersji VBA
- 16. Arkusze programu Excel + C#
- 17. Excel VBA - Uruchom makro przed zapisaniem
- 18. Eksportować do programu Excel z repeatera?
- 19. Hiperłącze programu Excel do konkretnej komórki
- 20. Import plików CSV do programu Excel
- 21. Eksportuj DataTable do programu Excel z EPPlus
- 22. Eksportowanie wyników zapytania Mysql do programu Excel?
- 23. Eksport do programu Excel w Asp.net MVC
- 24. przekonwertować arkusz programu Excel do skryptu sql
- 25. Makro eksportować tabele MS Word na arkuszach Excel
- 26. Eksportuj tabelę HTML do programu Excel za pomocą programu ASP.NET
- 27. Jak programowo importować dane programu Excel do tabeli programu Access?
- 28. przenoszenie danych z programu Excel do programu SQL Server tabeli
- 29. Eksportuj obszar wydruku programu Excel jako obrazkę
- 30. Otwieranie dostępu z programu Excel VBA
sprawdzić ten - [http://stackoverflow.com/questions/5297341/calling-java-library-jar-from-vba-vbscript-visual-basic-classic][1] [1]: http: // stackoverflow.com/questions/5297341/calling-java-library -jar-from-vba-vbscript-visual-basic-classic – sreehari
Wszystkie te dyskusje mówią, że nie jest to możliwe. –
Co powiesz na to? http://stackoverflow.com/questions/10879757/vba-shell-java-call-errors – JimmyPena