2011-09-06 77 views
3

我想导出我的ListGrid数据源到Excel文件,我使用Excel文件,因为我想在Excel文件中填充我的listgrid字段。有没有人知道如何去做。这对我很有帮助。smartgwt导出listgrid数据源到Excel文件

谢谢Ankit。

+0

你使用哪个版本的Smartgwt? LGPL或Pro/Power/EE? – Simson

+0

嘿,我正在使用Smartgwt LGPL 1.2版本 – ankit

回答

0

您可以设置seperat(非rpc)Servlet,并将必须通过http POST导出的数据发送到servlet(例如,通过GWT FormPanel)。在服务器端,您可以创建一个Apache POI exel文件并提供它下载。

SmartGwt的Pro/Power/EE具有此功能(参见this展示柜)。

3

作为一名业余爱好者,即使我想要做同样的事情,但在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。请让我知道,如果您需要更清晰的解决方案提供。