刚做的用GWT调用本地js导出excel , 导出的excel有点难看, 但总比没有导出功能好!
第一步: 编写本地js放到public/js/file/FileExport.js目录下:
//导入Excel
function ExportToExcel(element)
{
var oXL = new ActiveXObject("Excel.Application");
var oWB = oXL.Workbooks.Add();
var oSheet = oWB.ActiveSheet;
var sel=document.body.createTextRange();
sel.moveToElementText(element);
sel.select();
sel.execCommand("Copy");
oSheet.Paste();
oXL.Visible = true;
}
//导入Word
function ExportToWord(element)
{
var oWD = new ActiveXObject("Word.Application");
var oDC = oWD.Documents.Add("",0,1);
var oRange =oDC.Range(0,1);
var sel = document.body.createTextRange();
sel.moveToElementText(element);
sel.select();
sel.execCommand("Copy");
oRange.Paste();
oWD.Application.Visible = true;
}
第二步: 编写JSNI实现类来调用js
package com.gogocode.bi.client;
import com.google.gwt.user.client.Element;
/**
* JSNI实现类调用js
* @author 赵昌峻
*
*/
public class FileExport {
public static native void ExportToExcel(Element element) /*-{
$wnd.ExportToExcel(element);
}-*/;
public static native void ExportToWord(Element element) /*-{
$wnd.ExportToWord(element);
}-*/;
}
第三步: 在程序中调用JSNI实现类
package com.gogocode.bi.client;
import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.user.client.DOM;
import com.google.gwt.user.client.ui.RootPanel;
import com.gwtext.client.core.EventObject;
import com.gwtext.client.data.ArrayReader;
import com.gwtext.client.data.DateFieldDef;
import com.gwtext.client.data.FieldDef;
import com.gwtext.client.data.FloatFieldDef;
import com.gwtext.client.data.MemoryProxy;
import com.gwtext.client.data.RecordDef;
import com.gwtext.client.data.Store;
import com.gwtext.client.data.StringFieldDef;
import com.gwtext.client.widgets.Button;
import com.gwtext.client.widgets.Panel;
import com.gwtext.client.widgets.Toolbar;
import com.gwtext.client.widgets.ToolbarButton;
import com.gwtext.client.widgets.event.ButtonListenerAdapter;
import com.gwtext.client.widgets.grid.ColumnConfig;
import com.gwtext.client.widgets.grid.ColumnModel;
import com.gwtext.client.widgets.grid.GridPanel;
/**
* GWT 调用本地js 导出excel 示例程序
* @author 赵昌峻
*
*/
public class BI_Enter implements EntryPoint {
public void onModuleLoad() {
Panel panel = new Panel();
panel.setBorder(false);
panel.setPaddings(15);
RecordDef recordDef = new RecordDef(
new FieldDef[]{
new StringFieldDef("company"),
new FloatFieldDef("price"),
new FloatFieldDef("change"),
new FloatFieldDef("pctChange"),
new DateFieldDef("lastChanged", "n/j h:ia"),
new StringFieldDef("symbol"),
new StringFieldDef("industry")
}
);
final GridPanel grid = new GridPanel();
grid.setId("grid"); //给要导出的表格一个维一的ID
Object[][] data = getCompanyData();
MemoryProxy proxy = new MemoryProxy(data);
ArrayReader reader = new ArrayReader(recordDef);
Store store = new Store(proxy, reader);
store.load();
grid.setStore(store);
ColumnConfig[] columns = new ColumnConfig[]{
new ColumnConfig("股票", "company", 130, true, null, "company"),
new ColumnConfig("价格", "price", 35),
new ColumnConfig("涨跌", "change", 45),
new ColumnConfig("涨幅", "pctChange", 65),
new ColumnConfig("最后更新时间", "lastChanged", 100)};
ColumnModel columnModel = new ColumnModel(columns);
grid.setColumnModel(columnModel);
grid.setFrame(true);
grid.setStripeRows(true);
grid.setAutoExpandColumn("company");
grid.setHeight(350);
grid.setWidth(600);
grid.setTitle("今日股市情况");
Toolbar bottomToolbar = new Toolbar();
bottomToolbar.addFill();
bottomToolbar.addButton(new ToolbarButton("导出到Excel", new ButtonListenerAdapter() {
public void onClick(Button button, EventObject e) {
FileExport.ExportToExcel(DOM.getElementById("grid")); //调用本地js导出excel
grid.clearSortState(true);
}
}));
grid.setBottomToolbar(bottomToolbar);
panel.add(grid);
RootPanel.get().add(panel);
}
}