我得到的是打开Microsoft(Word,Excel等)到JFrame中。任何人都可以告诉我一些拿到这个库吗,Apache POI API(http://poi.apache.org)可以帮我这个吗,也许库JACOB(http://danadler.com/jacob/)?打开MS文档到JFrame
2
A
回答
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没有正确处理。所以你应该测试一下。
如果不是因为你需要一个花钱的图书馆(com.linar.jintegra),那将是完美的。 – Lobo 2011-02-03 09:12:45
哎呀..没注意到。删除链接 – 2011-02-03 09:26:50
POI显然可以,但看起来很费力得到一个良好的文件图形表示。 http://www.hiteshagrawal.com/java/reading-word-document-in-java – Lobo 2011-02-03 10:27:53