300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > 深度拷贝Excel文件中sheet工作簿

深度拷贝Excel文件中sheet工作簿

时间:2022-04-21 21:32:22

相关推荐

深度拷贝Excel文件中sheet工作簿

使用POI复制sheet工作簿,网上的绝大多数教程都是挨个单元格复制,由于我的业务需要深度拷贝,以下是复制工作簿到新工作簿的代码实现:

/*** 复制sheet工作簿** @param sourceFile 源文件* @param sheetIndex 要复制sheet的索引* @param newSheetName 复制sheet后的新名称* @throws IOException 流错误*/public static void copySheet(File sourceFile, Integer sheetIndex, String newSheetName) throws IOException {//一定要用文件输入流最为参数加到workbook,将文件直接作为参数加入workbook会报错 InputStream sourceIn = new FileInputStream(sourceFile);XSSFWorkbook sourceWorkbook = new XSSFWorkbook(sourceIn);//poi提供了可以不加的新名称的方法XSSFSheet targetSheet = sourceWorkbook.cloneSheet(sheetIndex, newSheetName);//将文件一定要转为输出流,因为克隆的sheet是在workbook对象中,没有在文件中,需要workbook写入输出流//修改workbook后,一定要记得将work重新写入文件的输出流中,是不是源文件都可以FileOutputStream fileOut = new FileOutputStream(sourceFile);sourceWorkbook.write(fileOut);fileOut.flush();fileOut.close();sourceWorkbook.close();}

注意:克隆出来的sheet表格不会克隆Excel顶端标题行,需要自己指定,具体代码如下所示:

//作用是将excel的各种设置放到XSSFName对象中XSSFName name1 = workbook.createName();//顶端标题行的标志是"_xlnm.Print_Titles"name1.setNameName("_xlnm.Print_Titles");//sheet工作簿名称中含有"-"字符,Excel会将sheet工作簿名称进行切割,所以需要将sheet工作簿名称放到单引号中,38、39代表标题行的行号,name1.setRefersToFormula("'20TR01001TR-2-1-1_D'!$38:$39");//可以设置,也可以不设置,1代表sheet工作簿的序号,在上一行代码中已经指明了sheet工作簿name1.setSheetIndex(1);

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。