【问题标题】:OleFrame Cannot Save Excel FilesOleFrame 无法保存 Excel 文件
【发布时间】:2014-08-30 02:53:54
【问题描述】:

我设置了一个带有 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);
}
}

【问题讨论】:

标签: java excel swt ole


【解决方案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();
        }
    }
}

【讨论】:

  • 这根本解决不了问题。
猜你喜欢
  • 2022-08-22
  • 2013-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多