2017-09-02 35 views
0

我試圖出口的tableView使用Apache POI了JavaFx:出口TableView中脫穎而出的列

每一件事情是非常擅長的名字,但我需要導出我的所有的表不只是物品,我指的是列名時,我使用此代碼

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()); 
    } 
} 

它出口僅項目,我試圖修改它這樣

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()); 
      } 
     } 

但它調用IndexOutOfBoundsException異常。 所以我怎麼能與列名稱導出的tableView?我應該修改什麼?

+0

看起來像這段代碼應該正確執行,你能指出它拋出'IndexOutOfBoundsException'的哪一行嗎? – vl4d1m1r4

+0

是啊,這代碼工作正常,但它並沒有顯示的列名,從表視圖的項目一個開始,當我使用我= 1它調用IndexOutOfBoundsException異常。 –

+0

您使用的是哪個JDK版本和Apache POI版本?你確定你沒有在for循環中使用:'j <= TousEmpView.getColumns()。size()'嗎?這會在迭代'i = TousEmpView.getColumns()。size()'時拋出異常。 – vl4d1m1r4

回答

1

這裏是工作的例子,當你與出口列標題運行它會創建一個workbook.xls。這幾乎是你在你的問題中寫的,所以我沒有得到它不工作的地方。

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

完美的我用同樣的面前,但是當我使用我= 1 I「V得到problems.Thanks,但我會編輯空細胞。 –