2011-02-03 96 views
2

我得到的是打开Microsoft(Word,Excel等)到JFrame中。任何人都可以告诉我一些拿到这个库吗,Apache POI API(http://poi.apache.org)可以帮我这个吗,也许库JACOB(http://danadler.com/jacob/)?打开MS文档到JFrame

+0

如果不是因为你需要一个花钱的图书馆(com.linar.jintegra),那将是完美的。 – Lobo 2011-02-03 09:12:45

+1

哎呀..没注意到。删除链接 – 2011-02-03 09:26:50

+0

POI显然可以,但看起来很费力得到一个良好的文件图形表示。 http://www.hiteshagrawal.com/java/reading-word-document-in-java – Lobo 2011-02-03 10:27:53

回答

4

好吧!这是我的解决方案(使用Eclipse SWT)打开MS Word文档到一个JFrame:

import java.awt.Canvas; 
import java.io.File; 

import javax.swing.JFrame; 

import org.eclipse.swt.SWT; 
import org.eclipse.swt.SWTError; 
import org.eclipse.swt.awt.SWT_AWT; 
import org.eclipse.swt.browser.Browser; 
import org.eclipse.swt.events.SelectionAdapter; 
import org.eclipse.swt.events.SelectionEvent; 
import org.eclipse.swt.layout.FillLayout; 
import org.eclipse.swt.layout.GridData; 
import org.eclipse.swt.ole.win32.OLE; 
import org.eclipse.swt.ole.win32.OleClientSite; 
import org.eclipse.swt.ole.win32.OleFrame; 
import org.eclipse.swt.widgets.Display; 
import org.eclipse.swt.widgets.FileDialog; 
import org.eclipse.swt.widgets.Menu; 
import org.eclipse.swt.widgets.MenuItem; 
import org.eclipse.swt.widgets.Shell; 


public class AbrirWordJFrame { 
    static OleClientSite clientSite; 
    static OleFrame frame; 

    public static void main(String[] args) { 
     final Display display = new Display(); 
     final Shell shell = new Shell(display); 

     JFrame jframe=new JFrame("Mi jframe"); 
     final Canvas canvas=new Canvas(); 
     jframe.getContentPane().add(canvas); 
     jframe.setSize(800, 600); 
     jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     jframe.setVisible(true); 

     display.asyncExec(new Runnable() { 
      public void run() { 
       Shell shell = SWT_AWT.new_Shell(display, canvas); 
       shell.setSize(800, 600); 

       //abrimos un word 
       shell.setText("Word Example"); 
       shell.setLayout(new FillLayout()); 
       try { 
        frame = new OleFrame(shell, SWT.NONE); 
        //esto abre un documento existente 
        clientSite = new OleClientSite(frame, SWT.NULL, new File("prueba.doc")); 
        //esto abre un documento en blanco 
//     clientSite = new OleClientSite(frame, SWT.NONE, "Word.Document"); 
        addFileMenu(frame); 
       } catch (SWTError e) { 
        System.out.println("Unable to open activeX control"); 
        display.dispose(); 
        return; 
       } 
       //fin abrimos un word 
       //abrimos un navegador 
//    Browser browser = new Browser(shell, SWT.NONE); 
//    browser.setLayoutData(new GridData(GridData.FILL_BOTH)); 
//    browser.setSize(800, 600); 
//    browser.setUrl("http://www.google.com"); 
       //fin abrimos un navegador 
       shell.open(); 

      } 
     }); 

     //el titulo 
//  shell.setText("Word Example"); 
//  shell.setLayout(new FillLayout()); 
//  try { 
//   frame = new OleFrame(shell, SWT.NONE); 
//   //esto abre un documento existente 
//   clientSite = new OleClientSite(frame, SWT.NULL, new File("prueba.doc")); 
//   //esto abre un documento en blanco 
////   clientSite = new OleClientSite(frame, SWT.NONE, "Word.Document"); 
//   addFileMenu(frame); 
//  } catch (SWTError e) { 
//   System.out.println("Unable to open activeX control"); 
//   display.dispose(); 
//   return; 
//  } 
//  shell.setSize(800, 600); 
//  shell.open(); 
//  
     while (!shell.isDisposed()) { 
      if (!display.readAndDispatch()) 
       display.sleep(); 
     } 
     display.dispose(); 
    } 

    static void addFileMenu(OleFrame frame) { 
     final Shell shell = frame.getShell(); 
     Menu menuBar = shell.getMenuBar(); 
     if (menuBar == null) { 
      menuBar = new Menu(shell, SWT.BAR); 
      shell.setMenuBar(menuBar); 
     } 
     MenuItem fileMenu = new MenuItem(menuBar, SWT.CASCADE); 
     fileMenu.setText("&File"); 
     Menu menuFile = new Menu(fileMenu); 
     fileMenu.setMenu(menuFile); 
     frame.setFileMenus(new MenuItem[] { fileMenu }); 

     MenuItem menuFileOpen = new MenuItem(menuFile, SWT.CASCADE); 
     menuFileOpen.setText("Open..."); 
     menuFileOpen.addSelectionListener(new SelectionAdapter() { 
      public void widgetSelected(SelectionEvent e) { 
       fileOpen(); 
      } 
     }); 
     MenuItem menuFileExit = new MenuItem(menuFile, SWT.CASCADE); 
     menuFileExit.setText("Exit"); 
     menuFileExit.addSelectionListener(new SelectionAdapter() { 
      public void widgetSelected(SelectionEvent e) { 
       shell.dispose(); 
      } 
     }); 
    } 

    static void fileOpen() { 
     FileDialog dialog = new FileDialog(clientSite.getShell(), SWT.OPEN); 
     dialog.setFilterExtensions(new String[] { "*.doc" }); 
     String fileName = dialog.open(); 
     if (fileName != null) { 
      clientSite.dispose(); 
      clientSite = new OleClientSite(frame, SWT.NONE, "Word.Document", new File(fileName)); 
      clientSite.doVerb(OLE.OLEIVERB_INPLACEACTIVATE); 
     } 
    } 
} 

资源: Eclipse的SWT:http://www.eclipse.org/swt

谢谢大家!

0

Apache POI是一个很好很强大的库。我多次使用它,它确实帮助了我。

0

但要做好准备,Apache POI甚至无法读取Microsoft文档中的各种信息。我有很多来自我们客户的文件,POI没有正确处理。所以你应该测试一下。