2011-09-06 78 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。請讓我知道,如果您需要更清晰的解決方案提供。