ERLEDIGT
JA
JA
ANTWORTEN
3
3
ZUGRIFFE
3160
3160
EMPFEHLEN
-
Hallo!
Irgendwas mache ich falsch.
Ich habe in meine SWT-Applikation MS-Word engebettet und möchte gleich beim Start der Anwendung eine Datei öffnen. Ich übergebe den Pfad zur Datei, die geöffnet werden soll, es scheint jedoch etwas falsch zu laufen. Der Fehler tritt meines Wissens nach beim Aufruf der invoke-Methode auf. Und zwar in der folgenden Zeile:
Code :1
Variant pVarResult = fDocumentsAutomation.invoke(dispIdMember, rgvarg, rgdispidNamedArgs);
Damit ihr es nachvollziehen könnt, hier der komplette Quellcode.
THX im Voraus!
PS: Ich verwende OleControlSite statt OleClientSite. Bei der OleClientSite kann man dem Konstruktor als Parameter zusätzlich eine Datei mitgeben, die sofort geöffnet wird. Der OleClientSite kann man aber keinen EventListener adden. Dies ist der Grund, warum ich OleControlSite verwende, was mir das Leben etwas schwerer macht.
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114
import java.io.File; import org.eclipse.swt.SWT; import org.eclipse.swt.ole.win32.OLE; import org.eclipse.swt.ole.win32.OleAutomation; import org.eclipse.swt.ole.win32.OleControlSite; import org.eclipse.swt.ole.win32.OleFrame; import org.eclipse.swt.ole.win32.Variant; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; public class WordOpenFileTest { /** * File has to be opened. */ private File file = new File("c:\\test.rtf"); private OleAutomation fWordAutomation; private OleAutomation fDocumentsAutomation; /** * Constructor. */ public WordOpenFileTest() { Display display = new Display(); Shell shell = new Shell(display); shell.open(); OleFrame frame = new OleFrame(shell, SWT.NONE); OleControlSite site = new OleControlSite(frame, SWT.NONE, "Word.Document"); fWordAutomation = new OleAutomation(site); site.doVerb(OLE.OLEIVERB_SHOW); site.setVisible(true); int openResult = openFile(file.getAbsolutePath()); System.out.println("Open return value: " + openResult); while (!shell.isDisposed()) { if (!display.readAndDispatch()) { display.sleep(); } } } private int openFile(String pFile) { // Type Lib method: Open // [id(0x00000013), helpcontext(0x096c0013)] // Document* Open( // [in] VARIANT* FileName, // [in, optional] VARIANT* ConfirmConversions, // [in, optional] VARIANT* ReadOnly, // [in, optional] VARIANT* AddToRecentFiles, // [in, optional] VARIANT* PasswordDocument, // [in, optional] VARIANT* PasswordTemplate, // [in, optional] VARIANT* Revert, // [in, optional] VARIANT* WritePasswordDocument, // [in, optional] VARIANT* WritePasswordTemplate, // [in, optional] VARIANT* Format, // [in, optional] VARIANT* Encoding, // [in, optional] VARIANT* Visible, // [in, optional] VARIANT* OpenAndRepair, // [in, optional] VARIANT* DocumentDirection, // [in, optional] VARIANT* NoEncodingDialog, // [in, optional] VARIANT* XMLTransform); // names of the Method ant the first parameter String [] names = { "Open", "FileName" }; // get the application id int appId = fWordAutomation.getIDsOfNames(new String[] { "Application" })[0]; OleAutomation application = fWordAutomation.getProperty(appId).getAutomation(); // get the id to access the docuemts functions int documentsId = application.getIDsOfNames(new String[] { "Documents" })[0]; Variant docVariant = application.getProperty(documentsId); fDocumentsAutomation = docVariant.getAutomation(); int [] rgdispid = fDocumentsAutomation.getIDsOfNames(names); docVariant.dispose(); // function id int dispIdMember = rgdispid[0]; // Set the parameter Variant [] rgvarg = new Variant[1]; rgvarg[0] = new Variant(pFile); // id of the argument name int [] rgdispidNamedArgs = new int[1]; rgdispidNamedArgs[0] = rgdispid[1]; Variant pVarResult = fDocumentsAutomation.invoke(dispIdMember, rgvarg, rgdispidNamedArgs); rgdispid.getClass(); if (pVarResult == null) { return 0; } return pVarResult.getInt(); } public static void main(String [] args) { new WordOpenFileTest(); } }
-
Um das Thema abzuschließen, will ich erwähnen, dass ich statt OleControlSite doch OleClientSite benutze. Hier kann man direkt beim Erzeugen von OleClientSite eine Datei übergeben.
Code java:1 2 3
OleFrame frame = new OleFrame(pParent, SWT.NONE); OleClientSite site = new OleClientSite(frame, SWT.NONE, "Word.Document", file); site.doVerb(OLE.OLEIVERB_SHOW);
Mit OleControlSite hat es bei mir leider nicht geklappt. Vll. weiss es ja jemand von euch.
-
Um die Thematik noch mal aufzugreifen..... Gibt es evtl auch die Möglichkeit das Dokument direkt einzubinden, aber so darzustellen, daß der Inhalt nicht editiert werden kann?
Hintergedanke: Man soll sich die Informationen in einem Dokument nur noch mal anzeigen lassen ohen sie direkt zu editieren......
-
Hm... So auf Anhieb wüsste ich es nicht...
Prinzipiell ist es möglich in MS Word Dokumente vor unberechtigtem Editieren zu schützen. Man sieht also den Inhalt und wenn man rein klickt und zu editieren versucht, taucht eine Meldung im MS Word auf "Dieses Dokument ist vor versehentlicher Bearbeitung geschützt. Sie können diesen Bereich nur ansehen."
Wie man ein Dokument vor unberechtigter Bearbeitung schützt, weiss ich momentan nicht. Evtl. kann man mittels Berechtigungen etwas regeln.
@Ronin-Jay: Falls Du eine Lösung findest, könntest Du diese hier bitte posten? Würde mich sehr interessieren, danke!
Ähnliche Themen
-
Mittels PHP eine Excel Datei öffnen - bearbeiten - speichern
Von 3Dnavigator im Forum PHPAntworten: 1Letzter Beitrag: 05.11.08, 14:54 -
PDF-Datei mittels PHP öffnen, bearbeiten und speichern
Von easywing im Forum PHPAntworten: 7Letzter Beitrag: 07.02.08, 15:37 -
ActiveX / OLE in SWT: MS-Word Symbolleiste / Toolbar ausblenden
Von JDad im Forum Swing, Java2D/3D, SWT, JFaceAntworten: 6Letzter Beitrag: 22.10.07, 17:51 -
EXCEL/Word-Datei in html-Dokument öffnen und speichern
Von Loola im Forum HTML & XHTMLAntworten: 5Letzter Beitrag: 06.01.07, 17:50 -
Öffnen einer Word Datei per Doppelklick
Von Rolf Schleiffer im Forum Office-AnwendungenAntworten: 2Letzter Beitrag: 31.01.05, 18:35





Zitieren
Login





