问题描述:在将一个excel文件对象复制到另一个文件中时,发生了如下报错
主要代码如下
//输入流(获取文件)
FileInputStream fis = new FileInputStream("E:\\猿究院\\20230610\\test1.xlsx");
//输出流(存储含0的行)
FileOutputStream fos = new FileOutputStream("E:\\猿究院\\20230610\\test2.xlsx");
//Excel文件对象
Workbook workbookin = new XSSFWorkbook(fis);
Workbook workbookout = new XSSFWorkbook();
//按照下标加载工作簿
Sheet sheet = workbookin.getSheetAt(0);
Sheet sheet2 = workbookout.createSheet();
//创建输出行
int index = 0;
Row rowOut = sheet2.createRow(index);
//遍历所有数据行(不包括表头)
for(int i = 1; i<= sheet.getLastRowNum();i++ ) {
//创建数据行
Row row = sheet.getRow(i);
//获取二以及第三个单元格进行判断
Cell cell = row.getCell(1);
Cell cell1 = row.getCell(2);
//判断含0,并加入输出流
if(cell.getStringCellValue().contains("0") || cell1.getStringCellValue().contains("0")) {
//复制整行到另一个文件
//输出文件的行随着输入的数据++
rowOut = sheet2.createRow(index++);
//遍历输入行的所有元素,将其复制到输出行
for(Cell c:row) {
//设置下标取出每一个单元格
int in = c.getColumnIndex();
//创建每一个单元格,并将数据一一输入
Cell outCell = rowOut.createCell(in);
outCell.setCellValue(c.getStringCellValue());
代码主要作用就是复制一个excel表格中的数据到另一个excel表格中,而在进行数据的写入时发生了错误,我在进行第一个表格的创建时,它的序号使数字,但是其他数据为字符,因此在复制写入时,我第一行的数字类型并不能以字符的方式写入,所以在outCell.setCellValue(c.getStringCellValue());这句代码报错
for(int i = 0;i<=3;i++){
//第一列(序号,直接写入int类型的i)
Cell cell1 = row.createCell(0);
cell1.setCellValue(i);
//第二列(随机优惠码)
Cell cell2 = row.createCell(1);
cell2.setCellValue(UUID.randomUUID().toString().substring(0,7));
//第三列(随机校验码)
Cell cell3 = row.createCell(2);
cell3.setCellValue(UUID.randomUUID().toString().substring(0,4));
//第四列(日期)
Cell cell4 = row.createCell(3);
cell4.setCellValue(LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy年MM月dd
日 HH:mm:ss")));
}
解决方案:
只需要在赋值时,进行类型的判断,然后根据类型进行写入即可;由于单元格数据类型没有办法进行统一的强制类型转换,所以在复制数据时,一定要确认数据类型是否一致,不一致时,只能根据其具体类型进行操作
if(c.getCellType() == CellType.NUMERIC) {
outCell.setCellValue(c.getNumericCellValue());
}else {
outCell.setCellValue(c.getStringCellValue());
}