OleFrame不能保存Excel文件

我设置了一个用于就地编辑的OLE框架的应用程序。 所有的Word文件都适用,但是保存Excel不起作用。 Excel应用程序的保存button是灰色的(我猜当非OLE Excel仍然打开时),或者如果不是灰色的,它会显示“刷新”(德语,但仍然)并且不保存。 没有任何错误消息得到显示。

OleControlSite#save(File, boolean)起作用,但我们不能向客户解释为什么他们不能点击Excel保存button,所以我们需要以某种方式修复它。

重现问题的小演示:

 public class OleDemoDialog extends Dialog { public static void main(String[] args) { OleDemoDialog dialog = new OleDemoDialog(new Shell()); dialog.open(); } protected OleDemoDialog(Shell parentShell) { super(parentShell); setShellStyle(getShellStyle()| SWT.SHELL_TRIM); } @Override protected Control createDialogArea(Composite parent) { OleFrame oleFrame = new OleFrame(parent, SWT.CLIP_CHILDREN); oleFrame.setBackground(JFaceColors.getBannerBackground(parent .getDisplay())); oleFrame.setLayoutData(new GridData(GridData.FILL_BOTH)); OleControlSite oleControlSite = new OleControlSite(oleFrame, SWT.NONE, new File("Mappe1.xlsx")); oleControlSite.doVerb(OLE.OLEIVERB_INPLACEACTIVATE); return oleFrame; } @Override protected Point getInitialSize() { return new Point(600, 600); } } 

使用OleFrame保存Excel文件。

 OleClientSite clientSite.save(new File("D:\\JavaBooks.xlsx"), true); 

我希望这个例子是有用的。

 import java.io.*; import org.eclipse.swt.*; import org.eclipse.swt.events.*; import org.eclipse.swt.layout.*; import org.eclipse.swt.ole.win32.*; import org.eclipse.swt.widgets.*; public class OleDemoDialog { OleClientSite clientSite; OleFrame oleFrame; public static void main(String[] args) { Display display = new Display(); OleDemoDialog example = new OleDemoDialog(); example.open(display); } public void open(Display display) { Shell shell = new Shell(display); shell.setText("OleDemoDialog Example"); shell.setLayout(new FillLayout()); Composite parent = new Composite(shell, SWT.NONE); parent.setLayout(new GridLayout(4, true)); Composite buttons = new Composite(parent, SWT.NONE); buttons.setLayout(new GridLayout()); GridData gridData = new GridData(SWT.BEGINNING, SWT.FILL, false, false); buttons.setLayoutData(gridData); Composite displayArea = new Composite(parent, SWT.BORDER); displayArea.setLayout(new FillLayout()); displayArea.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 3, 1)); Button openButton = new Button(buttons, SWT.NONE); openButton.setText("Open file"); openButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { //new File("your File_Path.xlsx ") try { clientSite = new OleClientSite(oleFrame, SWT.NONE, "Excel.Sheet", new File("D:\\JavaBooks.xlsx")); } catch (SWTException error) {error.printStackTrace();} if (clientSite != null) clientSite.doVerb(OLE.OLEIVERB_INPLACEACTIVATE); } }); new Label(buttons, SWT.NONE); Button excelButton = new Button(buttons, SWT.NONE); excelButton.setText("Save"); excelButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { clientSite.save(new File("D:\\JavaBooks.xlsx"), true); System.out.println("save.."); } }); oleFrame = new OleFrame(displayArea, SWT.NONE); shell.setSize(800, 600); shell.open(); while (!shell.isDisposed()) { if (!display.readAndDispatch()) display.sleep(); } } }