我想导出我的ListGrid数据源到Excel文件,我使用Excel文件,因为我想在Excel文件中填充我的listgrid字段。有没有人知道如何去做。这对我很有帮助。smartgwt导出listgrid数据源到Excel文件
谢谢Ankit。
我想导出我的ListGrid数据源到Excel文件,我使用Excel文件,因为我想在Excel文件中填充我的listgrid字段。有没有人知道如何去做。这对我很有帮助。smartgwt导出listgrid数据源到Excel文件
谢谢Ankit。
您可以设置seperat(非rpc)Servlet,并将必须通过http POST导出的数据发送到servlet(例如,通过GWT FormPanel
)。在服务器端,您可以创建一个Apache POI exel文件并提供它下载。
SmartGwt的Pro/Power/EE具有此功能(参见this展示柜)。
作为一名业余爱好者,即使我想要做同样的事情,但在SmartGwt中选择很少。只有SmartGwt Pro/Power/EE版本具有此类功能。不过,我已经找到了解决方案,并附上了代码,因为现在还没有任何示例,如果有人像我一样对GWT是新手,那么您将不得不花费整整一段时间来解决这个问题。以下示例代码简单易懂。
public class GridToCSV implements EntryPoint {
/**
* Create a remote service proxy to talk to the server-side Greeting
* service.
*/
private final GreetingServiceAsync greetingService = GWT.create(GreetingService.class);
public void onModuleLoad() {
DataSource dataSource = new DataSource();
dataSource.setDataFormat(DSDataFormat.JSON);
dataSource.setDataURL("data/countries_small.js");
DataSourceTextField nameField = new DataSourceTextField("name", "Name");
DataSourceTextField populationfield = new DataSourceTextField(
"population", "Population");
DataSourceTextField areaField = new DataSourceTextField("total_area",
"Total Area");
DataSourceTextField governmentField = new DataSourceTextField(
"government", "Government");
dataSource.setFields(nameField, populationfield, areaField,
governmentField);
final ListGrid grid = new ListGrid();
grid.setDataSource(dataSource);
grid.setWidth100();
grid.setHeight(150);
grid.setAutoFetchData(true);
IButton button = new IButton("Export CSV");
button.addClickHandler(new ClickHandler() {
public void onClick(ClickEvent event) {
StringBuilder exportedCSV = exportCSV(grid);
System.out.println(exportedCSV);
sendTOServer(exportedCSV);
// Window.Location(listGrid.exportData());
}
});
//grid.draw();
//button.draw();
VLayout layout = new VLayout(); layout.addMember(button);
layout.addMember(grid);
layout.addMember(button);
layout.setWidth100();
layout.draw();
}
private StringBuilder exportCSV(ListGrid listGrid) {
StringBuilder stringBuilder = new StringBuilder(); // csv data in here
// column names
ListGridField[] fields = listGrid.getFields();
for (int i = 0; i < fields.length; i++) {
ListGridField listGridField = fields[i];
stringBuilder.append("\"");
stringBuilder.append(listGridField.getName());
stringBuilder.append("\",");
}
stringBuilder.deleteCharAt(stringBuilder.length() - 1); // remove last
// ","
stringBuilder.append("\n");
// column data
ListGridRecord[] records = listGrid.getRecords();
for (int i = 0; i < records.length; i++) {
ListGridRecord listGridRecord = records[i];
ListGridField[] listGridFields = listGrid.getFields();
for (int j = 0; j < listGridFields.length; j++) {
ListGridField listGridField = listGridFields[j];
stringBuilder.append("\"");
stringBuilder.append(listGridRecord.getAttribute(listGridField
.getName()));
stringBuilder.append("\",");
}
stringBuilder.deleteCharAt(stringBuilder.length() - 1); // remove
// last ","
stringBuilder.append("\n");
}
return stringBuilder;
}
private void sendTOServer(StringBuilder csvText) {
// TODO Auto-generated method stub
String csv = csvText.toString();
final HTML serverResponseLabel = new HTML();
greetingService.greetServer(csv, new AsyncCallback<String>() {
public void onFailure(Throwable caught) {
}
public void onSuccess(String result) {
// dialogBox.setText("Remote Procedure Call");
serverResponseLabel.removeStyleName("serverResponseLabelError");
serverResponseLabel.setHTML(result);
Window.open(result, "_blank", "");
// dialogBox.center();
// closeButton.setFocus(true);
}
});
}
}
GreetingService.java
@RemoteServiceRelativePath("greet")
public interface GreetingService extends RemoteService {
String greetServer(String name) throws IllegalArgumentException;
}
GreetingServiceAsync.java
public interface GreetingServiceAsync {
void greetServer(String input, AsyncCallback<String> callback)
throws IllegalArgumentException;
}
GreetingServiceImpl.java
@SuppressWarnings("serial")
public class GreetingServiceImpl extends RemoteServiceServlet implements
GreetingService {
String url;
public String greetServer(String input) throws IllegalArgumentException {
FileWriter fw;
try {
fw = new FileWriter("WriteTest.csv");
PrintWriter pw = new PrintWriter(fw);
// Write to file for the first row
url = "http://127.0.0.1:8888/WriteTest.csv";
pw.print(input);
pw.flush();
// Close the Print Writer
pw.close();
// Close the File Writer
fw.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return url;
}
}
上述代码的工作原理及其易于理解。我已经使用GWT的默认测试项目结构来了解。用于ListGrid部件的代码来自smartgwt展柜ListGrid JSON Integration。请让我知道,如果您需要更清晰的解决方案提供。
你不需要手动做到这一点....这已经为你做了....
检查了这一点:
http://www.smartclient.com/smartgwtee/showcase/#excel_export
这是一个工作示例
你使用哪个版本的Smartgwt? LGPL或Pro/Power/EE? – Simson
嘿,我正在使用Smartgwt LGPL 1.2版本 – ankit