我正在尝试开发一段代码,以将数据从Excel文件导入/导出到Java。我已经完成了导入和导出到定义的模板的操作(例如:Class Employee,我知道Excel工作表在column1中具有“ id”,在column2中具有“ name”,依此类推)。
我遇到的麻烦是添加列和行,以使TableView具有与导入的Excel文件相同的信息,而不管行数/列数如何。
从Excel文件导入数据时,会将其发送到“ ArrayList参数”。因此,如果Excel文件具有:
ID |名称
1 |约翰
2 |玛丽
当我列出ArrayList'parameter'时,我得到:“ Id Name 01 John 02 Mary”
我知道我有多少列(因为所有单元格=行号*列号):
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中。
谢谢您的帮助。
西蒙
最佳答案
在您的代码中,您仅向表视图添加了空列。
为了用数据填充表格
您必须像这样设置表数据:
private TableView<your Object type> table = new TableView<>();
List<your Object type> list=new ArrayList<>();
填写您的列表,然后:
ObservableList<your Object type> fxlist=FXCollections.observableList(list);
table.getItems().addAll(fxlist);
数据对象的类型必须是代表每一行数据的类。
您的清单必须由您的exsl数据填写。