如何基于excel文件

时间:2017-12-02 01:23:41

标签: java javafx tableview

所以我想从excel文件构建TableView。

这个Excel文件没有定义的列数,所以如果我加载第一个excel文件,它可以有5列,第二个可以有7个等等...

我的问题是我不知道如何在TableView中创建这个“动态”列数。

 TableColumn [] tc = new TableColumn[r.getPhysicalNumberOfCells()];
    for(int i=0;i< r.getPhysicalNumberOfCells();i++){
        tc[i] = new TableColumn(r.getCell(i).toString());
        tc[i].setCellValueFactory(
            new PropertyValueFactory<String,String>(??????)
            );
        excelTable.getColumns().add(tc[i]);
    }

因此,以下内容创建列并设置其名称。但现在我想从excel加载数据行到表。令人不安的部分是“??????”是。由于我不知道我的列的名称是什么,所以我无法使用属性创建类。

整个代码:

public class ExcelController {

final static Logger logger = LoggerFactory.getLogger(ExcelMethods.class);
private ExcelMethods ex;


@FXML
TableView excelTable;

@FXML
Pane rootPane;

public void initialize() {
    logger.info("Excel controller initalized");
    ex = new ExcelMethods();
}

/**
 * select and load excel file into program
 * loading excel file into system is
 * happening here
 */
public void loadExcelSheet() {
    logger.info("loadExcelSheet function selected");
    FileChooser fileChooser = new FileChooser();
    fileChooser.setTitle("Open Excel File");
    File excel = fileChooser.showOpenDialog(rootPane.getScene().getWindow());
    if (excel != null) {
        logger.info("File loaded successfully");
        Path path = Paths.get(excel.getPath());
        ex.loadWorkbook(path);

        loadTableData();
    } else
        logger.info("User did not select any file to load");
}

public void saveExcelSheet() {
    logger.info("saveExcelSheet function selected");
    DirectoryChooser dirChooser = new DirectoryChooser();
    dirChooser.setTitle("Save Excel File");
    File excel = dirChooser.showDialog(rootPane.getScene().getWindow());
    if (excel != null) {
        logger.info("File selected successfully");
        Path path = Paths.get(excel.getPath());
        ex.saveExcel(ex.wb, path);
    } else
        logger.info("User did not select any file to save into");
}

/**
 * loads table from loaded excel file
 */
public void loadTableData() {

    List<String> columns = new ArrayList<String>();
    ObservableList<ObservableList<String>> excelData = FXCollections.observableArrayList();


    logger.info("Populating table ...");
    excelTable.setEditable(true);
    excelTable.setColumnResizePolicy(TableView.UNCONSTRAINED_RESIZE_POLICY);

    Sheet sh = ex.selectSheet(ex.wb);
    Row r = ex.getRow(sh, 0);

    //laod columsn into List
    for(int i=0;i<r.getPhysicalNumberOfCells();i++){
        columns.add(r.getCell(i).toString());
    }

    for(int i=0;i<r.getPhysicalNumberOfCells();i++){
        final int finalIdx = i;
        TableColumn<ObservableList<String>, String> column = new TableColumn<>(columns.get(i));
        column.setCellValueFactory(
                param -> new ReadOnlyObjectWrapper<>(param.getValue().get(finalIdx)));
        excelTable.getColumns().add(column);

    }

    r = ex.getRow(sh, 1);
    for(int i=0;i<15;i++){
        ObservableList<String> row = FXCollections.observableArrayList();
        row.add(r.getCell(i).toString());
        excelData.add(row);
    }
    excelTable.setItems(excelData);


    }



}

0 个答案:

没有答案