smartgwt экспортирует источник данных listgrid в файл excel

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

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


person ankit    schedule 06.09.2011    source источник
comment
Какую версию Smartgwt вы используете? LGPL или Pro/Power/EE?   -  person Simson    schedule 07.09.2011
comment
эй, я использую версию Smartgwt LGPL 1.2   -  person ankit    schedule 07.09.2011


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

person Mr. DROID    schedule 16.09.2012

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

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

person Simson    schedule 08.09.2011

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

Проверь это:

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

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

person kholofelo Maloma    schedule 10.03.2014