Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/394.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用ApachePOI将动态excel文件(列数可以超过)写入java对象_Java_Excel_Automated Tests_Apache Poi - Fatal编程技术网

如何使用ApachePOI将动态excel文件(列数可以超过)写入java对象

如何使用ApachePOI将动态excel文件(列数可以超过)写入java对象,java,excel,automated-tests,apache-poi,Java,Excel,Automated Tests,Apache Poi,我知道我们可以创建一个模型类,它的每个实例变量将绑定到每个excel列,如下所示 class emp{ String name; String empId; //getter and setter method of each } excel文件: 名称| empid abc | 123 bcd | 3232 xyz | ee32 当excel中的列数动态增加时,如何处理这种情况我将使用一种表模型来实现这一点。类似于的模型 显示此方法蓝图的完整示例: 导入java.io

我知道我们可以创建一个模型类,它的每个实例变量将绑定到每个excel列,如下所示

class emp{
    String name;
    String empId;

   //getter and setter method of each
}
excel文件: 名称| empid abc | 123

bcd | 3232

xyz | ee32


当excel中的列数动态增加时,如何处理这种情况

我将使用一种表模型来实现这一点。类似于的模型

显示此方法蓝图的完整示例:

导入java.io.*; 导入org.apache.poi.ss.usermodel.*; 公共类模型{ 公共静态无效主字符串[]args引发异常{ 工作簿工作簿=WorkbookFactory.CreateNewFileInputStreamExcelFile.xlsx; 工作表=工作簿.getSheetAt0; ExcelTableModel ExcelTableModel=新的ExcelTableModelsheet; System.out.PrintLnCelTableModel.getColumnCount; System.out.PrintLnCelTableModel.getRowCount; System.out.PrintLnCelTableModel.getColumnNames; System.out.PrintLnCelTableModel.getData; System.out.PrintLnCelTableModel.getColumnName1; System.out.PrintLnCelTableModel.getValueAt2,1; 工作簿.close; } } 导入java.util.Vector; 导入org.apache.poi.ss.usermodel.Cell; 导入org.apache.poi.ss.usermodel.DataFormatter; 导入org.apache.poi.ss.usermodel.Row; 导入org.apache.poi.ss.usermodel.Sheet; 公共类模型{ 专用向量列名称; 专用矢量数据; 专用数据格式化程序DataFormatter=新数据格式化程序; 公共表格模型表{ this.columnNames=新向量; this.data=新向量; int firstRow=sheet.getFirstRowNum; 行colNamesRow=sheet.getRowfirstRow; int firstCol=colNamesRow.getFirstCellNum; int lastColP1=colNamesRow.getLastCellNum; 对于int c= FirStCl;C < LASTCOLP1;C++ > Cell Cell=colNamesRow.getCellc; String columnName=dataFormatter.formatCellValuecell; this.columnNames.addcolumnName; } int lastRow=sheet.getLastRowNum; 对于int r=firstRow+1;r Cell Cell=row.getCellc; 字符串cellValue=dataFormatter.formatCellValuecell; cells.addcellValue; } this.data.addcells; } } 公共整型getColumnCount{ 返回this.columnNames.size; } 公共整数getRowCount{ 返回此.data.size; } 公共字符串getColumnNameint columnIndex{ 返回this.columnNames.getcolumnIndex; } 公共字符串getValueAtint行索引,int列索引{ 返回this.data.getrowIndex.getcolumnIndex; } 公共向量getColumnNames{ 返回此.columnNames; } 公共向量获取数据{ 返回此.data; } //更多的能手和二传手。。。 } ExcelFile.xlsx中的第一张图纸可以是这样的:


如您所见,表格将从使用的范围中获取,使用的范围的第一行将作为列名获取。

使用Map而不是Emp OBJECT我认为它不起作用。我正在创建列表。但问题是,若excel列发生更改,则需要更改代码。你可以发布LogicThank@Axel的代码快照吗。。。这绝对有道理。@Polywhill先生:请解释编辑我的代码的原因。我没有编辑代码,我只是将文章作为一个整体格式化。将每个类看作一个单独的代码块可以减少在代码中滚动查看新类何时启动的麻烦。我还调整了缩进以提高可读性。@Polywhill先生:即使我通过回滚您的编辑来表明我不同意这一点,也有必要再做一次吗?非常感谢校长先生。