2017-09-02 3 views
0

Je suis en train d'exporter tableView d'exceller en utilisant Apache POIJavaFX Export TableView vers Excel avec le nom des colonnes

Tout est bien, mais je dois exporter toutes ma table et pas seulement les articles, je veux dire avec les noms de colonnes quand i utiliser ce code

HSSFWorkbook workbook = new HSSFWorkbook(); 
HSSFSheet spreadsheet = workbook.createSheet("sample"); 

HSSFRow row = null; 

for (int i = 0; i < TousEmpSusp.getItems().size(); i++) { 
    row = spreadsheet.createRow(i); 
    for (int j = 0; j < TousEmpSusp.getColumns().size(); j++) { 
     row.createCell(j).setCellValue(TousEmpSusp.getColumns().get(j).getCellData(i).toString()); 
    } 
} 

il exporte uniquement les éléments, j'ai essayé de le modifier comme celui-ci

for (int j = 0; j < TousEmpView.getColumns().size(); j++) { 
      row.createCell(j).setCellValue(TousEmpView.getColumns().get(j).getText()); 

     } 
     for (int i = 0; i < TousEmpView.getItems().size(); i++) { 
      row = spreadsheet.createRow(i+1); 
      for (int j = 0; j < TousEmpView.getColumns().size(); j++) { 
       row.createCell(j).setCellValue(TousEmpView.getColumns().get(j).getCellData(i).toString()); 
      } 
     } 

mais il invoque IndexOutOfBoundsException. Comment puis-je exporter tableView avec des noms de colonnes? Que devrais-je modifier?

+0

On dirait que ce code devrait s'exécuter correctement, pouvez-vous pointer sur quelle ligne il lance 'IndexOutOfBoundsException'? – vl4d1m1r4

+0

Oui, ce code fonctionne correctement, mais il n'affiche pas les noms des colonnes, il commence à partir du premier élément de la vue tabulaire et lorsque j'utilise i = 1, il invoque IndexOutOfBoundsException. –

+0

Quelle version JDK et quelle version d'Apache POI utilisez-vous? Êtes-vous sûr de ne pas utiliser quelque chose comme: 'j <= TousEmpView.getColumns(). Size()' dans votre boucle for? Cela lancera l'exception lors de l'itération de 'i = TousEmpView.getColumns(). Size()'. – vl4d1m1r4

Répondre

1

Voici un exemple de travail qui va créer un workbook.xls lorsque vous l'exécutez avec les en-têtes de colonne exportés. C'est à peu près ce que vous avez écrit dans votre question, donc je ne comprends pas où cela ne fonctionne pas.

import javafx.application.Application; 
import javafx.application.Platform; 
import javafx.beans.property.SimpleStringProperty; 
import javafx.beans.property.StringProperty; 
import javafx.collections.FXCollections; 
import javafx.collections.ObservableList; 
import javafx.scene.control.TableColumn; 
import javafx.scene.control.TableView; 
import javafx.scene.control.cell.PropertyValueFactory; 
import javafx.stage.Stage; 
import org.apache.poi.hssf.usermodel.HSSFWorkbook; 
import org.apache.poi.ss.usermodel.Row; 
import org.apache.poi.ss.usermodel.Sheet; 
import org.apache.poi.ss.usermodel.Workbook; 

import java.io.FileOutputStream; 
import java.io.IOException; 

public class TableViewExample extends Application { 

    public static void main(String[] args) { 
     launch(args); 
    } 

    @Override 
    public void start(Stage primaryStage) throws IOException { 

     TableView<Person> table = new TableView<Person>(); 

     ObservableList<Person> teamMembers = getTeamMembers(); 
     table.setItems(teamMembers); 

     TableColumn<Person,String> firstNameCol = new TableColumn<Person,String>("First Name"); 
     firstNameCol.setCellValueFactory(new PropertyValueFactory<Person, String>("firstName")); 
     TableColumn<Person,String> lastNameCol = new TableColumn<Person,String>("Last Name"); 
     lastNameCol.setCellValueFactory(new PropertyValueFactory<Person, String>("lastName")); 

     ObservableList<TableColumn<Person, ?>> columns = table.getColumns(); 
     columns.add(firstNameCol); 
     columns.add(lastNameCol); 

     Workbook workbook = new HSSFWorkbook(); 
     Sheet spreadsheet = workbook.createSheet("sample"); 

     Row row = spreadsheet.createRow(0); 

     for (int j = 0; j < table.getColumns().size(); j++) { 
      row.createCell(j).setCellValue(table.getColumns().get(j).getText()); 
     } 

     for (int i = 0; i < table.getItems().size(); i++) { 
      row = spreadsheet.createRow(i + 1); 
      for (int j = 0; j < table.getColumns().size(); j++) { 
       if(table.getColumns().get(j).getCellData(i) != null) { 
        row.createCell(j).setCellValue(table.getColumns().get(j).getCellData(i).toString()); 
       } 
       else { 
        row.createCell(j).setCellValue(""); 
       } 
      } 
     } 

     FileOutputStream fileOut = new FileOutputStream("workbook.xls"); 
     workbook.write(fileOut); 
     fileOut.close(); 

     Platform.exit(); 

    } 

    private ObservableList<Person> getTeamMembers() { 

     ObservableList<Person> people = FXCollections.observableArrayList(); 
     Person person1 = new Person(); 
     person1.setFirstName("John"); 
     person1.setLastName("Doe"); 
     people.add(person1); 
     people.add(person1); 
     people.add(person1); 
     people.add(person1); 
     people.add(person1); 
     people.add(person1); 

     Person person2 = new Person(); 
     person2.setFirstName("Jane"); 
     person2.setLastName("Doe"); 
     people.add(person2); 
     people.add(person2); 
     people.add(person2); 
     people.add(person2); 
     people.add(person2); 

     return people; 
    } 

    public class Person { 
     private StringProperty firstName; 
     public void setFirstName(String value) { firstNameProperty().set(value); } 
     public String getFirstName() { return firstNameProperty().get(); } 
     public StringProperty firstNameProperty() { 
      if (firstName == null) firstName = new SimpleStringProperty(this, "firstName"); 
      return firstName; 
     } 

     private StringProperty lastName; 
     public void setLastName(String value) { lastNameProperty().set(value); } 
     public String getLastName() { return lastNameProperty().get(); } 
     public StringProperty lastNameProperty() { 
      if (lastName == null) lastName = new SimpleStringProperty(this, "lastName"); 
      return lastName; 
     } 
    } 
} 
+0

Parfait, j'ai utilisé la même chose avant, mais quand j'ai utilisé i = 1 j'ai 'ai des problèmes.Merci mais je vais modifier pour les cellules nuls. –