1

我使用单元格表并支持客户端上的过滤操作。我正在寻找一种方法来直接从 gwt 客户端下载表格以实现 excel。是否有捷径可寻?

我找到了http://code.google.com/p/gwt-table-to-excel/。但我正在寻找一种不使用上述方法的方法。

4

4 回答 4

3

下面的类在没有服务器端的情况下做到这一点。

public class TableToExcel {
    public static final <T> void save(final CellTable<T> table, String filename) {
        final AnchorElement a = Document.get().createAnchorElement();
        a.setHref("data:application/vnd.ms-excel;base64," + base64(table.getElement().getString()));
        a.setPropertyString("download", (filename.endsWith(".xls") || filename.endsWith(".xlsx")) ? filename : filename + ".xls");

        Document.get().getBody().appendChild(a);
        Scheduler.get().scheduleEntry(new ScheduledCommand() {
            @Override
            public void execute() {
                click(a);
                a.removeFromParent();
            }
        });
    }

    private static native void click(Element elem) /*-{
        elem.click();
    }-*/;

    public static native String base64(String data) /*-{
        return btoa(data);
    }-*/;
}
于 2014-04-03T14:20:55.913 回答
0

假设如果您从 2014 年 1 月 1 日到 2014 年 12 月 31 日生成报告,您需要从客户端将参数传递给服务器,例如:

                String parameters = "mode=" + report  + "&frmDate=" + from + "&toDate="+ upto ;
                String url = URL.encode(GWT.getHostPageBaseURL() + "something/something?" + parameters);
                // window for download process Excel shown to user
                String features = "menubar=no,location=no,status=no,width=200,height=100,toolbar=no,scrollbars=no,resizable=no";
                //pass the feature parameter to Window.open...
                // since GWT has provided this method -        public static native void open(String url, String name, String features)
                com.google.gwt.user.client.Window.open(url, "_blank", features); 
于 2015-01-01T09:18:57.143 回答
0

我使用http://en.wikipedia.org/wiki/Data_URI_scheme找到了合适的解决方案

我不想回到服务器,因为我在客户端上拥有一切!

这允许真正快速下载生成的单元格表。

(它不会超出某个点,但这对我的用例来说是可以接受的。下载速度优先。)

于 2013-10-25T00:18:31.253 回答
-2

如果要下载 Excel 文件,则必须从服务器编写创建。您必须将您的过滤操作发送到服务器以告诉他生成文件。

projet gwt-table-to-excell 使用来自 Excel 的 hack,它可以尝试读取 html 表以构建 excel 文件。但这可能不适用于新版本。

于 2013-10-23T15:12:18.617 回答