OleFrame无法保存Excel文件

时间:2014-07-09 07:23:48

标签: java excel swt ole

我使用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);
}
}

1 个答案:

答案 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();
        }
    }
}