SmartGWT экспорт списка источников данных в файл Excel - PullRequest
3 голосов
/ 06 сентября 2011

Я хочу экспортировать свой источник данных ListGrid в файл Excel, и я использую файл Excel, потому что я хочу заполнить свои поля списка в файле Excel. кто нибудь знает как это сделать. это мне очень поможет.

Спасибо, Анкит.

Ответы [ 3 ]

3 голосов
/ 16 сентября 2012

Будучи любителем, даже я хотел сделать то же самое, но у 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 . Пожалуйста, дайте мне знать, если вам нужно больше ясности для предоставленного решения.

0 голосов
/ 10 марта 2014

Вам не нужно делать это вручную .... Это было сделано для вас ....

проверить это:

http://www.smartclient.com/smartgwtee/showcase/#excel_export

Это рабочий пример

0 голосов
/ 08 сентября 2011

Вы можете установить отдельный сервлет (не rpc) и отправить данные, которые должны быть экспортированы через HTTP POST сервлету (например, через GWT FormPanel). На стороне сервера вы можете создать exel-файл с Apache POI и предоставить его для загрузки.

Pro / Power / EE SmartGwt имеет такую ​​функцию (см. это витрина).

...