我使用OLE框架设置了一个用于就地编辑的应用程序。一切都适用于Word文件,但保存Excel不起作用。 Excel应用程序的保存按钮要么显示为灰色(我想当非OLE Excel仍处于打开状态时),或者如果它没有显示为灰色,则表示"刷新" (用德语,但仍然)并且不保存。不会显示任何类型的错误消息。
OleControlSite#save(File, boolean)
有效,但我们无法向客户解释为何他们无法点击Excel保存按钮,因此我们需要以某种方式修复它。
重现问题的小型演示:
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);
}
}
答案 0 :(得分:-1)
使用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();
}
}
}