SWT - ActiveX - OLE Excel

thnaxy

Grünschnabel
Hallo,
ich bin zur Zeit dabei in meiner Java Anwendung Excel in meine Anwendung per OLE / ActiveX zu integrieren.

Ich nutzen als Entwicklungsumgebung WinXP / Eclipse / SWT / Office 97 bzw. 2003. Ich bekomme auch ein Excel Tabellenblatt angezeigt, nur leider sind die Zellen und die Scrollbalken nicht korrekt sichtbar bzw. fehlen ganz. Dies triff auch auf die Kopfzeilen und Spalten zu.

Habt ihr mit SWT und Ole Erfahrungen gesammlt? Habt ihr Excel direkt einbinden können?

Mein Source Code...

Code:
  import java.io.File; 
   import org.eclipse.swt.*; 
   import org.eclipse.swt.layout.FillLayout; 
   import org.eclipse.swt.ole.win32.OLE; 
   import org.eclipse.swt.ole.win32.OleAutomation; 
   import org.eclipse.swt.ole.win32.OleClientSite; 
   import org.eclipse.swt.ole.win32.OleFrame; 
   import org.eclipse.swt.widgets.*; 
    
   public class CExcelViewer { 
      
   	private Shell shell = null; 
   	private Display display = null; 
   	private OleFrame frame = null; 
   	private OleClientSite site = null; 
   	private OleAutomation auto = null; 
   	private FillLayout layout = null; 
      
   	 
      public void InitUI(){ 
   	   
   	  File f = new File("c:\\test.xls"); 
   	   
   	  // Init der Variablen! 
   	  display = new Display(); 
   	  shell = new Shell(display); 
   	   
   	  layout = new FillLayout(); 
   	  layout.marginHeight=3; 
   	  layout.marginWidth=3; 
      
   	  shell.setLayout(layout); 
   	  frame = new OleFrame(shell, SWT.NONE); 
   	  site = new OleClientSite(frame, SWT.NONE, f); 
      //   site = new OleClientSite(frame, SWT.NONE, "Excel.Sheet"); 
   	  shell.layout(); 
   	  auto = new OleAutomation(site); 
   	   
   	   
   	  shell.setText("Excel Viewer"); 
   	   
   	  this.SetMenuBar(); 
   	  frame.setVisible(true); 
   	   
   	  shell.setSize(1024, 768); 
   	  site.setSize(shell.getSize()); 
   	   
   	  boolean result = true;   
   	  result = (site.doVerb(OLE.OLEIVERB_SHOW) == OLE.S_OK); 
   	  System.out.println("Aktiv:\t"+result); 
   	    
   	  frame.setSize(150, 150); 
   	   
   	  shell.open(); 
   	   
   	  // Display anzeigen. 
   	  while (!shell.isDisposed()) { 
   		if (!display.readAndDispatch()) 
   		  display.sleep(); 
   	  } 
   	  display.dispose(); 
   	   
   	} 
   	 
   	 
   	public void SetMenuBar() { 
   	   
   	  Menu menubar = new Menu(shell, SWT.BAR); 
   	  shell.setMenuBar(menubar); 
   	  
   	   
   	  MenuItem mItemDatei = new MenuItem(menubar, SWT.CASCADE); 
   	  mItemDatei.setText("Datei1"); 
   	   
   	  Menu sItemDateiNeu = new Menu(shell, SWT.DROP_DOWN); 
   	  mItemDatei.setMenu(sItemDateiNeu); 
   	   
   	  MenuItem mItemBearbeiten = new MenuItem(menubar, SWT.CASCADE); 
   	  mItemBearbeiten.setText("Bearbeiten"); 
   	   
   	} 
    
   }
 
Hallo!

ja, ich hab damit Erfahrung...
schau mal hier:
http://www.tutorials.de/tutorials206568.html&highlight=Outlook
Da hab ich mal beispielhaft aufgezeigt, wie man Outlook mittels SWT und OLE fernsteuern kann. Dort habe ich auch gezeigt, wie man die entsprechenden OLE Interfaces verwendet (Methoden findet und mit parameter aufruft...). Die passenden Methoden und Interfacedefinitionen findest du bei der entsprechenden OLE Komponente beispielsweise über die OLE Ansicht in den Visual Studio Tools.

Gruß Tom
 
Hallo Thomas,
vielen dank für die schnelle Antwort. Das einbinden eines ActiveX / OLE Oject ist für mich
soweit geklärt / verständlich.

Bei mir treten allerdings in Excel ein paar UI Probleme auf. D.h. die Zellen werden nicht korrekt anzeigt (nur der Bereich, welcher gefüllt ist). Teilweise sind die Scrollbalken abgeschnitten oder Randbereich fehlen.

In Eclipse Bugs habe ich folgenden Eintrag gefunden.
https://bugs.eclipse.org/bugs/show_bug.cgi?id=49098

Weißt du, ob es bei dir damals mit Outlook Darstellungsprobleme im UI gab? Wurden einige Teile nicht mit angezeigt? Ist das OLE im SWT eigentlich Stable, ist dies noch stark fehlerbehaftet?
 
Zurück