我正在嘗試開發一段代碼來將數據從Excel文件導入/導出到Java中。我完成了導入和導出到已定義的模板中(例如:Employee類,我知道Excel表在第一列中有「id」,在第二列中有「name」等等)。 我遇到的麻煩是添加列和行,以使TableView具有與導入的Excel文件相同的信息,而不管行數/列數。JavaFX將行和列動態添加到TableView
當我從Excel文件導入數據時,我將它發送到'ArrayList參數'。所以如果Excel文件有:
Id |名稱
1 | John
2 |瑪麗
當我列出了ArrayList的「參數」我得到:「ID名稱01約翰02瑪麗」
我知道我是從多少列有(因爲所有細胞=行數*列數):
columnSize = parameter.size()/importedExcel.RowNumber()
我設法根據一般的Excel文件動態添加列。
public class ExcelObject {
private int rowNum;
private ArrayList<String> parameters;
public void readExcel(String filePath, int sheetInt) {
try {
FileInputStream file = new FileInputStream(new File(filePath));
XSSFWorkbook workbook = new XSSFWorkbook(file);
XSSFSheet sheet = workbook.getSheetAt(sheetInt);
Iterator<Row> rowIterator = sheet.iterator();
while (rowIterator.hasNext())
{
Row row = rowIterator.next();
this.incRowNum();
Iterator<Cell> cellIterator = row.cellIterator();
while (cellIterator.hasNext())
{
Cell cell = cellIterator.next();
switch (cell.getCellType()) {
case Cell.CELL_TYPE_STRING:
this.parameters.add(cell.getRichStringCellValue().getString());
break;
case Cell.CELL_TYPE_NUMERIC:
if (DateUtil.isCellDateFormatted(cell)) {
this.parameters.add(cell.getDateCellValue().toString());
} else {
this.parameters.add(Double.toString(cell.getNumericCellValue()));
}
break;
case Cell.CELL_TYPE_BOOLEAN:
this.parameters.add("" +cell.getBooleanCellValue());
break;
case Cell.CELL_TYPE_FORMULA:
this.parameters.add(cell.getCellFormula());
break;
default:
System.out.println("ERROR");
}
}
}
file.close();
}
catch (Exception e)
{
e.printStackTrace();
}
}
public class vfUIController implements Initializable {
private ExcelReader read;
@FXML
private TableView table = new TableView();
@Override
public void initialize(URL url, ResourceBundle rb) {
List<String> columns = new ArrayList<String>();
ExcelObject obj = new ExcelObject();
obj.readExcel("file.xlsx", 2);
for (int i = 0; i< obj.getColumnNum; i++) {
columns.add(obj.getParametersValue(i));
System.out.println("ADDED COLUMN:" +i);
}
ArrayList<TableColumn> columns = new ArrayList<TableColumn>();
for (int i = 0 ; i < obj.getColNum() ; i++) {
columns.add(new TableColumn(obj.getParameters().get(i)));
}
table.getColumns().addAll(columns);
//missing code to add rows from 'ArrayList<String> parameters' at obj.getParameterValue(int arrayListPosition)
}
但我似乎無法使用table.setItems()
或其他方法添加任何行。我總是空白行。 我不知道如果我沒有正確使用setCellValueFactory
或因爲我用來將單元格數據導入ArrayList的整個方法不智能。
總之我想將任何Excel文件信息導入到JAVA的TableView中。
感謝您的幫助。 Simon
你說你不知道你是否正確使用'setCellValueFactory',但我沒有看到你調用它。你可以發佈該代碼嗎? –
我根本沒有在實際的代碼中使用它。我無法找到插入有或沒有setCellValueFactory的行的方法 –
如果沒有'cellValueFactory',表列將不會顯示任何數據。您需要在每列上設置一個「cellValueFactory」。 –