poi操作Excel中sheet的复制(java版)
Excel VBA批量复制工作表
VBA批量复制工作表工作时,经常需要制作多个工作表,手动操作费时费力,尝试VBA代码帮你快速完成工作。
1、复制单个工作表到指定工作表前面或后面,代码如下:Sheets("Sheet1").Copy After:=Sheets("Sheet2") '复制工作表Sheet1到Sheet2后面Sheets("Sheet1").Copy Before:=Sheets("Sheet2") '复制工作表Sheet1到Sheet2前面2、利用For循环,批量复制单张工作表到指定工作表前面或后面,代码如下:Dim i As IntegerFor i = 0 To 5Sheets("Sheet1").Copy After:=Sheets("Sheet1") '复制工作表Sheet1到Sheet1后面'Sheets("Sheet1").Copy Before:=Sheets("Sheet2") '复制工作表Sheet1到Sheet2前面Next结果是复制6次,效果如下图:3、复制指定工作表,重命名后放在指定位置。
复制工作表“Sheet1”,将复制后的工作表重命名为“Sh eet2”并入在工作表最后,代码如下:Dim Sheets As WorksheetDim MSheetName As StringDim YSheetName As StringYSheetName = "Sheet1" '确定源工作表名称MSheetName = "Sheet2" '确定目标工作表名称Dim i As Integer '定义变量,判断是否有目标工作表名称时用i = 0Dim NewCopySheet As Worksheet'Set NewCopySheet = ThisWorkbook.Sheets(ThisWorkbook.Sheets.Count) For Each Sheets In WorksheetsIf = MSheetName Then '先判断是否有目标工作表名称,若有提示重新修改目标工作表名字。
java的POI操作Excel文件
java的POI操作Excel文件(2)现在我要做的东西基本完成啦,我把这段时间使用POI的一些心得总结出来,希望能对和我遇到相同问题的朋友有所帮助,至于POI基本的使用方法,自己去看文档吧。
1、设置分页符的bugPOI里的HSSFSheet类提供了setRowBreak方法可以设置Sheet的分页符。
Bug:如果你要设置分页符的Sheet是本来就有的,并且你没有在里面插入过分页符,那么调用setRowBreak时POI会抛出空指针的异常。
解决方法:在Excel里给这个sheet插入一个分页符,用POI打开后再把它删掉,然后你就可以随意插入分页符了。
如果sheet是由POI生成的则没有这个问题。
我跟踪了setRowBreak的源代码,发现是Sheet.Java下的PageBreakRecord rowBreaks这个变量在搞鬼,如果Sheet里原来没有分页符,开发这个模块的那位兄台忘了为这个对象new实例,所以只能我们先手工给Excel插入一个分页符来触发POI为rowBreaks创建实例。
2、如何拷贝行我在的POI用户论坛翻遍了每个相关的帖子,找遍了api,也没看到一个拷贝行的方法,没办法,只能自己写://注:this.fWorkbook是一个HSSHWorkbook,请自行在外部newpublic void copyRows(String pSourceSheetName,String pTargetSheetName,int pStartRow, int pEndRow,int pPosition){HSSFRow sourceRow = null;HSSFRow targetRow = null;HSSFCell sourceCell = null;HSSFCell targetCell = null;HSSFSheet sourceSheet = null;HSSFSheet targetSheet = null;Region region = null;int cType;int i;short j;int targetRowFrom;int targetRowTo;if ((pStartRow == -1) || (pEndRow == -1)){return;}sourceSheet = this.fWorkbook.getSheet(pSourceSheetName);targetSheet = this.fWorkbook.getSheet(pTargetSheetName);//拷贝合并的单元格for (i = 0; i < sourceSheet.getNumMergedRegions(); i++){region = sourceSheet.getMergedRegionAt(i);if ((region.getRowFrom() >= pStartRow) && (region.getRowTo() <= pEndRow)) {targetRowFrom = region.getRowFrom() - pStartRow + pPosition; targetRowTo = region.getRowTo() - pStartRow + pPosition;region.setRowFrom(targetRowFrom);region.setRowTo(targetRowTo);targetSheet.addMergedRegion(region);}}//设置列宽for (i = pStartRow; i <= pEndRow; i++){sourceRow = sourceSheet.getRow(i);if (sourceRow != null){for (j = sourceRow.getFirstCellNum(); j < sourceRow.getLastCellNum(); j++) {targetSheet.setColumnWidth(j, sourceSheet.getColumnWidth(j));}break;}}//拷贝行并填充数据for (;i <= pEndRow; i++){sourceRow = sourceSheet.getRow(i);if (sourceRow == null){continue;}targetRow = targetSheet.createRow(i - pStartRow + pPosition);targetRow.setHeight(sourceRow.getHeight());for (j = sourceRow.getFirstCellNum(); j < sourceRow.getLastCellNum(); j++)sourceCell = sourceRow.getCell(j);if (sourceCell == null){continue;}targetCell = targetRow.createCell(j);targetCell.setEncoding(sourceCell.getEncoding());targetCell.setCellStyle(sourceCell.getCellStyle());cType = sourceCell.getCellType();targetCell.setCellType(cType);switch (cType){case HSSFCell.CELL_TYPE_BOOLEAN:targetCell.setCellValue(sourceCell.getBooleanCellValue());break;case HSSFCell.CELL_TYPE_ERROR:targetCell.setCellErrorV alue(sourceCell.getErrorCellValue());break;case HSSFCell.CELL_TYPE_FORMULA://parseFormula这个函数的用途在后面说明targetCell.setCellFormula(parseFormula(sourceCell.getCellFormula()));break;case HSSFCell.CELL_TYPE_NUMERIC:targetCell.setCellValue(sourceCell.getNumericCellV alue());break;case HSSFCell.CELL_TYPE_STRING:targetCell.setCellValue(sourceCell.getStringCellValue());break;}}}}这个函数有两个问题暂时无法解决:a、只能在同一个Workbook里面使用,跨Workbook总是拷不过去,不知道为什么?b、由于在拷贝行时也把行高也拷过去了,如果往这些单元格里写入的数据长度超过单元格长度,那么他们不会自动调整行高!3、公式的问题POI对Excel公式的支持是相当好的,但是我发现一个问题,如果公式里面的函数不带参数,比如now()或today(),那么你通过getCellFormula()取出来的值就是now(ATTR(semiV olatile))和today(ATTR(semiV olatile)),这样的值写入Excel是会出错的,这也是我上面copyRow的函数在写入公式前要调用parseFormula的原因,parseFormula这个函数的功能很简单,就是把ATTR(semiVolatile)删掉,我把它的代码贴出来:private String parseFormula(String pPOIFormula){final String cstReplaceString = "ATTR(semiV olatile)"; //$NON-NLS-1$StringBuffer result = null;int index;result = new StringBuffer();index = pPOIFormula.indexOf(cstReplaceString);if (index >= 0){result.append(pPOIFormula.substring(0, index));result.append(pPOIFormula.substring(index + cstReplaceString.length()));}else{result.append(pPOIFormula);}return result.toString();}至于为什么会出现ATTR(semiVolatile),还需要大家的探索精神!4、向Excel写入图片的问题。
复制带表头的excelsheet页(poi的HSSFWorkbook)
复制带表头的excelsheet页(poi的HSSFWorkbook)HSSFWorkbook导出excel时会有65535⾏的限制,当我们数据量⼤的时候可以分多个sheet页的⽅案来解决,但是每个sheet页都需要读取下载模版⽂件的表头,⽽poi库对⼀个excel之间的多sheet页都读取模版excel⽂件不⽀持,本⽂的思路是先⽣成多个excel⽂件到内存,然后再将这些excel复制到⼀个⽂件的多个sheet页中。
⼀ . ⾸先查出来数据总数,按6万条⼀个excel进⾏⽣成。
//⽣成excel@GetMapping("/generate")public void generate(String fileName){List<Map<String,Object>> dataList=new ArrayList();//测试数据for (int i=0;i<200000;i++){Map m1 = new HashMap();m1.put("Zara", "8bbb");m1.put("Mahnaz", "31cc");m1.put("Ayan", "12");m1.put("Daisy", "14111aa");dataList.add(m1);}//单个sheet处理65536条最多final int sheetNum= new Double(Math.ceil((float)dataList.size()/60000)).intValue();HSSFWorkbook sumWorkBook =new HSSFWorkbook();for (int i=0;i<sheetNum;i++){HSSFWorkbook workbook1=exportExcelByPostFix(dataList.subList(60000*i,(i!=(sheetNum-1)?(60000*(i+1)):dataList.size())));HSSFSheet sheet1=workbook1.getSheetAt(0);HSSFSheet newsheet =sumWorkBook.createSheet("sheet"+(i+1));ExcelUtil.copySheet(sumWorkBook,sheet1,newsheet);}//⽣成⽂件exportFile(sumWorkBook,fileName);return Result.succ("copy");}⼆ . 将每6万条数据⽣成⼀个excel到内存中,即excel的第⼀个sheet页public HSSFWorkbook exportExcelByPostFix(List<Map<String,Object>> dataList){//获取模版表头Resource resourceData=new DefaultResourceLoader().getResource("classpath:doctemp/temp.xls");InputStream inputStream=null;HSSFWorkbook wb=null;try {//获取输⼊流inputStream= resourceData.getInputStream();//创建带表头的⼯作表wb=new HSSFWorkbook(inputStream);//设置单元格基础样式,加边框,加基础⿊框CellStyle hssfCellStyle=wb.createCellStyle();hssfCellStyle.setBorderBottom(BorderStyle.THIN);hssfCellStyle.setBorderLeft(BorderStyle.THIN);hssfCellStyle.setBorderRight(BorderStyle.THIN);hssfCellStyle.setBorderTop(BorderStyle.THIN);//字居中hssfCellStyle.setAlignment(HorizontalAlignment.CENTER);//获取第⼀个sheet页HSSFSheet sheet=wb.getSheetAt(0);//前五⾏表头int count=5;ExcelUtil.exportForData(dataList,sheet,hssfCellStyle,count);}catch (IOException e){}finally {}return wb;}三.⽣成excel⼯具类,以及复制sheet页的⽅法public class ExcelUtil {/*** sheet复制*/public static void copySheet(HSSFWorkbook wb, HSSFSheet fromSheet, HSSFSheet toSheet){ //合并区域处理mergeSheetAllRegion(fromSheet, toSheet);// 列宽int length = fromSheet.getRow(fromSheet.getFirstRowNum()).getLastCellNum();for (int i = 0; i <= length; i++) {toSheet.setColumnWidth(i, fromSheet.getColumnWidth(i));}int flag=0;//设置单元格基础样式,加边框,加基础⿊框CellStyle hssfCellStyle=wb.createCellStyle();hssfCellStyle.setBorderBottom(BorderStyle.THIN);hssfCellStyle.setBorderLeft(BorderStyle.THIN);hssfCellStyle.setBorderRight(BorderStyle.THIN);hssfCellStyle.setBorderTop(BorderStyle.THIN);//字居中hssfCellStyle.setAlignment(HorizontalAlignment.CENTER);for (Iterator rowIt = fromSheet.rowIterator(); rowIt.hasNext(); ) {HSSFRow oldRow = (HSSFRow) rowIt.next();HSSFRow newRow = toSheet.createRow(oldRow.getRowNum());flag++;copyRow(wb, oldRow, newRow,flag,hssfCellStyle);}}/*** ⾏复制*/private static void copyRow(HSSFWorkbook wb, HSSFRow oldRow, HSSFRow toRow,int flag, CellStyle hssfCellStyle) {toRow.setHeight(oldRow.getHeight());for (Iterator cellIt = oldRow.cellIterator(); cellIt.hasNext(); ) {HSSFCell tmpCell = (HSSFCell) cellIt.next();HSSFCell newCell = toRow.createCell(tmpCell.getColumnIndex());copyCell(wb, tmpCell, newCell,flag,hssfCellStyle);}}/*** 合并单元格处理*/private static void mergeSheetAllRegion(HSSFSheet fromSheet, HSSFSheet toSheet) {int sheetMergeCount = fromSheet.getNumMergedRegions();CellRangeAddress cellR = null;for (int i = 0; i < sheetMergeCount; i++) {cellR = fromSheet.getMergedRegion(i);toSheet.addMergedRegion(cellR);}}/*** 复制单元格*/private static void copyCell(HSSFWorkbook wb, HSSFCell fromCell, HSSFCell toCell, int flag, CellStyle hssfCellStyle) {//excel表头有5⾏if(flag<6){HSSFCellStyle newstyle = wb.createCellStyle();// 复制单元格样式newstyle.cloneStyleFrom(fromCell.getCellStyle());// 样式toCell.setCellStyle(newstyle);}else {//其它的单元格⽤标准格式//单元格格式过多会抛出异常,不⽀持创建太多toCell.setCellStyle(hssfCellStyle);}if (fromCell.getCellComment() != null) {toCell.setCellComment(fromCell.getCellComment());}// 不同数据类型处理CellType fromCellType = fromCell.getCellType();toCell.setCellType(fromCellType);if (fromCellType == CellType.NUMERIC) {if (DateUtil.isCellDateFormatted(fromCell)) {toCell.setCellValue(fromCell.getDateCellValue());} else {toCell.setCellValue(fromCell.getNumericCellValue());}} else if (fromCellType == CellType.STRING) {toCell.setCellValue(fromCell.getRichStringCellValue());} else if (fromCellType == CellType.BLANK) {// nothing21} else if (fromCellType == CellType.BOOLEAN) {toCell.setCellValue(fromCell.getBooleanCellValue());} else if (fromCellType == CellType.ERROR) {toCell.setCellErrorValue(fromCell.getErrorCellValue());} else if (fromCellType == CellType.FORMULA) {toCell.setCellFormula(fromCell.getCellFormula());} else {// nothing29}}/*** 创建单元格*/public static void createCell(Row rows,int column,String value,CellStyle hssfCellStyle){Cell cell=rows.createCell(column);cell.setCellValue(value);cell.setCellStyle(hssfCellStyle);}/*** 根据数据组装cell数据* count=5表⽰从第6⾏开始⽣成单元格,前⾯5⾏是表头*/public static void exportForData(List<Map<String,Object>> list, HSSFSheet hssfSheet,CellStyle hssfCellStyle,int count){if(list!=null&& list.size()!=0){for (int i=0;i<list.size();i++){//创建⾏Row rows=hssfSheet.createRow(count);Map<String,Object> map= list.get(i);//是否总计数据int j=0;Set<String> sets= map.keySet();if(sets==null||sets.size()<1){continue;}for (String key:sets){createCell(rows,j,String.valueOf(map.get(key)),hssfCellStyle);//在for循环中。
xssfworkbook复制单元格的方法
xssfworkbook复制单元格的方法XSSFWorkbook是Apache POI库中的一个类,用于操作Excel文件。
它提供了许多方法来复制单元格,包括复制单个单元格、复制单元格区域以及复制单元格样式等。
1. 复制单个单元格:要复制单个单元格,可以使用XSSFCell的setCellValue()方法将源单元格的值设置为目标单元格的值。
以下是一个示例代码:javaXSSFWorkbook workbook = new XSSFWorkbook();XSSFSheet sheet = workbook.createSheet("Sheet1");创建源单元格XSSFRow sourceRow = sheet.createRow(0);XSSFCell sourceCell = sourceRow.createCell(0);sourceCell.setCellValue("Source Value");创建目标单元格XSSFRow targetRow = sheet.createRow(1);XSSFCell targetCell = targetRow.createCell(0);复制单元格的值targetCell.setCellValue(sourceCell.getStringCellValue());2. 复制单元格区域:要复制单元格区域,可以使用XSSFSheet的addMergedRegion()方法将源单元格区域合并,并使用XSSFCell的setCellStyle()方法将源单元格样式应用到目标单元格区域。
以下是一个示例代码:javaXSSFWorkbook workbook = new XSSFWorkbook();XSSFSheet sheet = workbook.createSheet("Sheet1");创建源单元格区域CellRangeAddress sourceRegion = new CellRangeAddress(0, 0, 0, 1); sheet.addMergedRegion(sourceRegion);XSSFRow sourceRow = sheet.createRow(0);XSSFCell sourceCell1 = sourceRow.createCell(0);XSSFCell sourceCell2 = sourceRow.createCell(1);sourceCell1.setCellValue("Source Value 1");sourceCell2.setCellValue("Source Value 2");创建目标单元格区域CellRangeAddress targetRegion = new CellRangeAddress(1, 1, 0, 1); sheet.addMergedRegion(targetRegion);XSSFRow targetRow = sheet.createRow(1);XSSFCell targetCell1 = targetRow.createCell(0);XSSFCell targetCell2 = targetRow.createCell(1);复制单元格区域的值和样式targetCell1.setCellValue(sourceCell1.getStringCellValue());targetCell2.setCellValue(sourceCell2.getStringCellValue());targetCell1.setCellStyle(sourceCell1.getCellStyle());targetCell2.setCellStyle(sourceCell2.getCellStyle());3. 复制单元格样式:要复制单元格样式,可以使用XSSFCellStyle的clone()方法克隆源单元格样式,并使用XSSFCell的setCellStyle()方法将克隆的样式应用到目标单元格。
poi 拷贝行 合并单元格
poi 拷贝行合并单元格POI(Apache POI)是一个用于操作Microsoft Office文件的开源Java库。
在很多业务场景中,我们常常需要对Excel文件进行操作,例如读取数据、写入数据、格式化表格等。
其中,拷贝行和合并单元格是Excel操作中常见且有实用性的功能。
在本文中,我们将一步一步地介绍如何使用POI库来实现拷贝行和合并单元格的功能。
第一步:导入POI库首先,我们需要在Java工程中引入POI库。
POI库的最新稳定版本为5.0.0。
你可以在第二步:创建Excel文件在使用POI库操作Excel文件之前,我们首先需要创建一个Excel文件。
可以使用POI库提供的Workbook接口的实现类来创建一个新的工作簿对象。
以下是一个示例代码:javaimport ermodel.Workbook;import ermodel.XSSFWorkbook;import java.io.FileOutputStream;import java.io.IOException;public class ExcelDemo {public static void main(String[] args) {Workbook workbook = new XSSFWorkbook(); 创建新的工作簿对象 try {FileOutputStream fileOutputStream = new FileOutputStream("sample.xlsx");workbook.write(fileOutputStream); 将工作簿写入输出流fileOutputStream.close();workbook.close(); 关闭工作簿} catch (IOException e) {e.printStackTrace();}}}在上面的示例代码中,我们创建了一个名为"sample.xlsx"的新Excel文件,并将其保存在当前工作目录中。
java sheet 的相关方法
java sheet 的相关方法Java的Sheet类是Apache POI库中的一个重要类,用于操作Excel 文件中的工作表。
通过Sheet类提供的相关方法,我们可以实现对Excel文件的创建、读取、修改和删除等操作。
本文将介绍Sheet 类的常用方法,并给出相应的示例代码,以帮助读者更好地理解和应用这些方法。
一、创建Sheet1. createRow(int rowIndex):在工作表中创建一行,参数为行索引。
示例代码:```javaSheet sheet = workbook.createSheet("Sheet1");Row row = sheet.createRow(0);```2. setColumnWidth(int columnIndex, int width):设置指定列的宽度,参数为列索引和宽度值(单位为字符数)。
示例代码:```javasheet.setColumnWidth(0, 10);```二、读取Sheet1. getRow(int rowIndex):根据行索引获取指定行对象。
示例代码:```javaRow row = sheet.getRow(0);```2. getPhysicalNumberOfRows():获取工作表的实际行数。
示例代码:```javaint rowCount = sheet.getPhysicalNumberOfRows();```3. getLastRowNum():获取工作表的最后一行的行号。
示例代码:```javaint lastRowNum = sheet.getLastRowNum();```4. getCell(int rowIndex, int columnIndex):根据行索引和列索引获取指定单元格对象。
示例代码:```javaCell cell = row.getCell(0);```5. getPhysicalNumberOfCells():获取指定行的实际单元格数。
sheets copy方法
sheets copy方法Sheets Copy方法谷歌表格(Google Sheets)是一款强大的在线电子表格工具,它提供了许多强大的功能来处理和分析数据。
其中一个非常实用的功能就是“Copy”方法。
本文将介绍如何使用Sheets的Copy方法来复制和粘贴数据,以及它的一些应用场景和注意事项。
Copy方法是Sheets的一个内建函数,可以用来复制数据并粘贴到指定的位置。
它可以用于复制单元格、行、列或整个工作表中的数据。
使用Copy方法可以快速、简便地进行数据的复制和粘贴操作,提高工作效率。
要使用Copy方法,首先需要选中要复制的数据。
可以通过鼠标拖动来选中单元格、行或列,也可以使用快捷键来选中整个工作表。
选中数据后,可以右键点击选中区域,在右键菜单中选择“Copy”选项,或者使用快捷键Ctrl+C来复制数据。
复制后,可以选择要粘贴到的位置。
可以选中一个单元格,然后右键点击该单元格,在右键菜单中选择“Paste”选项,或者使用快捷键Ctrl+V来粘贴数据。
粘贴时,可以选择不同的粘贴选项,如只粘贴数值、格式、公式等。
除了手动复制和粘贴外,Copy方法还可以在脚本中使用。
在Sheets中,可以使用Google Apps Script编写脚本来自动化一些操作。
通过编写脚本,可以实现在指定位置进行数据的复制和粘贴。
以下是Copy方法的一个示例脚本:```javascriptfunction copyData() {var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();var sheet = spreadsheet.getSheetByName("Sheet1");var sourceRange = sheet.getRange("A1:B3");var targetRange = sheet.getRange("C1:D3");sourceRange.copyTo(targetRange);}```上述脚本会将工作表“Sheet1”中A1:B3范围内的数据复制到C1:D3范围内。
excel 复制工作表
excel 复制工作表
在Excel中,复制工作表是一个非常常见的操作。
无论是为了备份工作表,还
是为了在同一工作簿中创建类似的工作表,复制工作表都是非常有用的。
在本文中,我们将介绍如何在Excel中复制工作表的几种方法。
方法一,拖动复制。
首先,我们可以使用最简单的方法来复制工作表,那就是拖动复制。
在工作表
标签上点击右键,选择“移动或复制”,然后选择“创建副本”,最后点击“确定”。
接着,按住工作表标签并拖动到想要的位置,释放鼠标即可完成复制。
方法二,复制粘贴。
另一种常见的方法是使用复制粘贴功能。
首先,选择要复制的工作表标签,然
后按下Ctrl + C进行复制。
接着,选择要粘贴的位置,按下Ctrl + V进行粘贴。
这
样就完成了工作表的复制。
方法三,右键菜单复制。
除了上述两种方法,我们还可以使用右键菜单来进行复制。
在工作表标签上点
击右键,选择“移动或复制”,然后选择“创建副本”,最后点击“确定”。
这样就完成了工作表的复制。
方法四,使用快捷键。
最后,我们可以使用快捷键来进行工作表的复制。
首先,选择要复制的工作表
标签,然后按下Ctrl + C进行复制。
接着,选择要粘贴的位置,按下Ctrl + V进行
粘贴。
这样就完成了工作表的复制。
在Excel中,复制工作表是一个非常简单的操作,但是掌握多种复制方法可以让我们更加高效地完成工作。
希望本文介绍的方法对大家有所帮助,让大家能够更加轻松地处理Excel中的工作表复制操作。
poi clonesheet用法 -回复
poi clonesheet用法-回复poi clonesheet用法:一步一步回答POI(Poor Obfuscation Implementation)是一个开源的Java类库,提供了许多用于操作Microsoft Office文档的功能。
POI项目的一个重要特性是可以通过POI库来创建和操作Excel文件。
在POI库中,有一个非常实用的功能叫做clonesheet。
这个功能允许我们在一个Excel文件中,复制一个已有的工作表,并在新的工作表中进行修改和编辑。
clonesheet的用法非常简单,但是却非常强大。
在本文中,我们将一步一步介绍和回答关于poi clonesheet用法的问题。
第一步:导入POI库要使用poi clonesheet功能,首先要确保已经导入了POI库。
POI库的最新版本可以从官方网站(第二步:创建一个Excel文件在Java中,可以使用Workbook来表示一个Excel文件。
我们可以通过调用WorkbookFactory的create方法来创建一个新的Excel文件。
javaWorkbook workbook = WorkbookFactory.create(newFile("path/to/excel.xlsx"));在这个例子中,我们创建了一个名为workbook的Workbook对象,并将它与一个已经存在的Excel文件进行关联。
第三步:复制一个工作表要使用poi clonesheet功能,我们首先需要获取要复制的工作表。
POI 库中的Workbook对象提供了getSheet方法来获取工作表。
我们可以通过调用这个方法,并传递工作表的名称或索引来获取工作表对象。
javaSheet sheetToClone = workbook.getSheet("Sheet1");在这个例子中,我们获取了名为"Sheet1"的工作表。
java通过POI技术操作Excel(2)----模板读取,录入数据
java通过POI技术操作Excel(2)----模板读取,录⼊数据 先来回顾下通常把java对Excel的操作分为以下功能:1、⽣成模板,导出模板;2、填充模板,录⼊数据;3;读取数据库数据,导出数据;在上⼀篇博⽂中,我简单记录了模板⽣成和导出,在这篇博⽂中,主要来记录--Excel⽂件导⼊,数据录⼊(仍然是以jsp+servlet为例) 既然要解决这个问题,那⾸先来分析下我们需要⾯对的有哪些需求需要实现: 1、Excel⽂件导⼊(这是最基础的,巧妇难为⽆⽶之炊,导⼊环节也是查了好久才完成的); 2、Excel⽂件中数据的格式判定,你要读取⽂件,如果⽂件中其实没有数据怎么办,程序会报错么; 3、Excel⽂件中数据的数值判定,“编号”啊,“⾝份证号”啊之类是不是需要有⼀定的规范才说明数值是正确的,否则录⼊毫⽆意义,数据库中可能还会报错; 4、Excel⽂件中数据判定完成后,判定全部正确的,全部录⼊数据库,录⼊成功显⽰录⼊成功,录⼊不成功则修改录⼊环节; 判定如果存在错误,将所有出现错误的列汇总,返回界⾯提⽰所有出错的列;⾸先,我们来完成导⼊功能,实现如下效果:相信这个上传效果,很多⼈都能实现,<input type="file">如是⽽已嘛,但是实现它后我们如何进⾏excel数据操作呢?通常我们想到的有如下两种⽅法:1、将excel⽂件传上去,然后对传上的⽂件进⾏操作,因为我们传到哪了我们知道,可以直接获取路径;2、我们可以直接获取想要上传的⽂件在电脑上的路径,然后我们通过路径直接对⽂件进⾏操作;这⾥我主要来介绍下我实现的第⼆种⽅法,(以ie浏览器为例,其它浏览器暂不讨论)1function upLoad(){2var myFile=document.getElementById("myFile");3 myFile.select();4var realPath=document.selection.createRange().text;5var len=realPath.length;6var path=realPath.substr(len-4);7if(path==".xls"){ document.getElementById("myForm").action="upLoad?path="+realPath;8 document.getElementById("myForm").submit();9 }else{10 alert("请输⼊excel格式的⽂件");11 }12 }通常情况下,在ie7之前我们可以通过document.getElementById('file_upl').value 直接获取⽂本的本地路径,但是在ie8之后,处于安全性考虑,上传时获取以上value 值则会以“C:\fakepath\”来代替了,这个时候我们就需要上⽂中出现的var myFile=document.getElementById("myFile"); myFile.select();varrealPath=document.selection.createRange().text;这三步来进⾏完成了。
利用Java实现复制Excel工作表功能
利⽤Java实现复制Excel⼯作表功能本⽂归纳了关于Java如何复制Excel⼯作表的⽅法,按不同复制需求,可分为:1. 复制⼯作表1.1 在同⼀个⼯作簿内复制⼯作表1.2 在不同⼯作簿间复制⼯作表2. 复制指定单元格数据对于复制⽅法copy(),这⾥简单整理了⼀个表格,其中包含了对数据复制的不同应⽤需求,可参考使⽤:⽅法解释copyFrom(Worksheet worksheet)复制⾃源⼯作表的数据copy(CellRange sourceRange, CellRange destRange)复制源数据到⽬标数据范围copy(CellRange sourceRange, CellRange destRange, Boolean copyStyle)复制源数据到⽬标数据范围时,是否复制源数据样式copy(CellRange sourceRange, Worksheet worksheet, int destRow, intdestColumn)复制源数据到⽬标⼯作表中的指定⾏和列copy(CellRange sourceRange, Worksheet worksheet, int destRow, int destColumn, Boolean copyStyle)复制源数据到⽬标⼯作表中的指定⾏和列时,是否复制源数据样式copy(CellRange sourceRange, CellRange destRange, Boolean copyStyle, Boolean updateReference, Boolean ignoreSize)复制源数据到⽬标数据范围时,是否复制源数据样式,是否更新引⽤,是否忽略⼤⼩copy(CellRange sourceRange, Worksheet worksheet, int destRow, int destColumn, boolean copyStyle, boolean undateReference)复制源数据到⽬标⼯作表中的指定⾏和列时,是否复制源数据样式,是否更新引⽤copy(CellRange sourceRange, CellRange destRange, boolean copyStyle, boolean updateReference, boolean ignoreSize, boolean copyShape)复制源数据到⽬标数据范围时,是否复制源数据样式,是否更新引⽤,是否忽略⼤⼩,是否复制形状⽂中的⽅法使⽤了免费Java Excel类库(Free Spire.XLS for Java),可在下载包,解压后,将lib⽂件夹中的jar⽂件导⼊Java 程序;或者通过maven仓库下载导⼊jar,maven仓库路径配置及依赖添加可以参考。
springboot中使用java操作poi案例(excel数据写入与导出)
springboot中使⽤java操作poi案例(excel数据写⼊与导出)1.⼯程导⼊依赖<dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>RELEASE</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>RELEASE</version></dependency>这⾥导⼊两个poi的原因是:在excel的表格保存为xls和xlsx两种格式,excel表格早先是xls后来⼜加⼊了xlsx的格式,在下⾯的代码中会有所体现。
2.编写demo@RestController@RequestMapping("/POI")public class POIController {@RequestMapping("/createExcel")public void createExcel(){//HSSFWorkbook wb = new HSSFWorkbook();XSSFWorkbook wb = new XSSFWorkbook();XSSFSheet sheets= wb.createSheet("九九乘法表");for (int i=1;i<=9;i++){XSSFRow row = sheets.createRow(i - 1);for (int j = 1; j<= 9; j++) {XSSFCell cell = row.createCell(j - 1);cell.setCellValue(i+"*"+j+"="+i*j);}}try {FileOutputStream fileOutputStream = new FileOutputStream("d:\\test.xlsx");try {wb.write(fileOutputStream);} catch (IOException e) {e.printStackTrace();}} catch (FileNotFoundException e) {e.printStackTrace();}}}⾥注意的点是在上图创建excel⼯作簿的时候有两种⽅式,如下所⽰:HSSFWorkbook wb = new HSSFWorkbook();//⽣成xls格式的excelXSSFWorkbook wb = new XSSFWorkbook();//⽣成xlsx格式的excel3.poi的整个设计是根据excel表格的特性来做的,⼤致思路是:3.1 通过HSSFWorkbook wb = new HSSFWorkbook()或 XSSFWorkbook wb = new XSSFWorkbook()⽣成excel⼯作簿(wb)3.2 通过创建好的⼯作簿去创建⼯作表(sheet)3.3 通过⼯作表去创建表中的⾏(row),⾏⾥索要填的内容就是单元格的内容(cell)最后,提供了⼯作簿(wb)、⼯作表(sheet)、表中的⾏(row)、⾏内容的单元格(cell)分别的api,⾃⼰稍微摸索⼀下就能。
poi clonesheet用法 -回复
poi clonesheet用法-回复poi clonesheet用法详解POI(Java中的POI库)是一个开源的Java类库,用于操作Microsoft Office格式的文档。
其中的POI clonesheet功能是可以在Excel文档中创建和克隆工作表的功能。
在本篇文章中,我将一步一步地回答关于poi clonesheet的用法,以帮助初学者更好地理解和使用这个功能。
第一步:导入POI库首先,我们需要在Java项目中导入POI库。
可以通过在pom.xml文件中添加以下依赖项来实现:xml<dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>版本号</version></dependency>第二步:创建工作簿对象在使用poi clonesheet功能之前,我们需要先创建一个工作簿对象,用于操作Excel文档。
可以通过以下代码实现:javaWorkbook workbook = new XSSFWorkbook(); 创建xlsx格式的工作簿对象第三步:创建工作表对象接下来,我们需要在工作簿中创建一个工作表对象。
可以通过以下代码实现:javaSheet sheet = workbook.createSheet("工作表名"); 创建一个名为"工作表名"的工作表对象第四步:克隆工作表现在我们已经创建了一个工作表对象,在克隆之前,我们需要先获取到要克隆的工作表对象。
可以通过以下代码实现:javaSheet sourceSheet = workbook.getSheetAt(0); 获取工作簿中的第一个工作表对象接下来,我们可以使用poi clonesheet功能,通过以下代码实现对工作表的克隆:javaSheet cloneSheet =workbook.cloneSheet(workbook.getSheetIndex(sourceSheet)); 克隆工作表对象在这段代码中,我们使用`workbook.cloneSheet()`方法对工作表对象进行克隆。
java poi 复制合并单元格格式
Apache POI 是一个非常强大的Java 库,可以用于读取和写入Microsoft Office 格式的文件,包括Excel。
如果你想要复制并合并单元格的格式,你可以使用`CellCopyPolicy` 类和`CellMerger` 类。
以下是一个示例代码,演示了如何复制并合并单元格:```javaimport ermodel.*;import org.apache.poi.ss.util.CellRangeAddress;import ermodel.XSSFWorkbook;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;public class CopyAndMergeCells {public static void main(String[] args) throws IOException {// 打开Excel文件FileInputStream fis = new FileInputStream("source.xlsx");Workbook workbook = new XSSFWorkbook(fis);Sheet sheet = workbook.getSheetAt(0);// 创建CellCopyPolicy以复制源单元格的样式CellCopyPolicy cellCopyPolicy = new CellCopyPolicy();cellCopyPolicy.setCopyStyle(true);// 创建CellMerger以合并单元格CellMerger cellMerger = new CellMerger(sheet);cellMerger.setRowSpan(2); // 跨越2行cellMerger.setColumnSpan(2); // 跨越2列cellMerger.setCreateForgetLastCell(true); // 为合并单元格的最后一个单元格创建样式// 执行合并单元格操作cellMerger.merge(new CellRangeAddress(0, 0, 0, 1)); // (row from, row to, column from, column to)// 将合并后的单元格写入新的Excel文件FileOutputStream fos = new FileOutputStream("merged.xlsx");workbook.write(fos);fos.close();fis.close();}}```这个例子首先打开一个名为"source.xlsx" 的Excel文件,然后创建一个`CellCopyPolicy` 以复制源单元格的样式。
npoi clonesheet方法
npoi clonesheet方法在使用NPOI进行Excel文件操作时,有时我们需要将一个工作表的内容复制到另一个工作表中。
这时我们可以使用NPOI的Clonesheet方法来实现这个功能。
Clonesheet方法是NPOI中的一个重要方法,它可以用来复制一个工作表的内容到另一个工作表中。
使用Clonesheet方法非常简单,只需要提供源工作簿和目标工作簿即可。
下面我们通过一个示例来演示如何使用Clonesheet方法来复制工作表。
我们需要创建一个源工作簿和一个目标工作簿。
我们可以使用NPOI的Workbook类来创建工作簿对象。
```csharpWorkbook sourceWorkbook = new HSSFWorkbook(); Workbook targetWorkbook = new HSSFWorkbook();```接下来,我们需要在源工作簿中创建一个工作表,并向其添加一些数据。
```csharpISheet sourceSheet = sourceWorkbook.CreateSheet("源工作表");for (int i = 0; i < 10; i++){IRow row = sourceSheet.CreateRow(i);for (int j = 0; j < 10; j++){row.CreateCell(j).SetCellValue(i * 10 + j);}}```然后,我们可以使用Clonesheet方法将源工作表的内容复制到目标工作簿中。
```csharpISheet targetSheet = targetWorkbook.CloneSheet(0); targetSheet.SheetName = "目标工作表";```在上面的示例中,我们使用CloneSheet(0)方法将源工作表的第一个工作表复制到目标工作簿中,并将目标工作表的名称设置为"目标工作表"。
poi操作Excel中sheet的复制(java版)
fileOut.flush();
fileOut.close();
in.close();
} catch (RuntimeException e) {
e.printStackTrace();
}
}
};
/**
* @Title:复制sheet
* @Description:将fromFile文件中的sheet全部复制到toFile中
//创建新建excel Sheet的行
HSSFRow rowCreat = sheetCreat.createRow(i);
//取得源有excel Sheet的行
HSSFRow row = sheet.getRow(i);
if (row == null)
continue;
//单元格式样
int firstCell = row.getFirstCellNum();
sheetCreat.setColumnWidth((short) j,(short) (1.15 * width));
boolean isHidden=sheet.isColumnHidden(j);
sheetCreat.setColumnHidden(j,isHidden);
}
rowCreat.createCell(j);
throws IOException {
//创建新的excel
HSSFWorkbook wbCreat = null;
if (!toFile.isFile()) {
wbCreat = new HSSFWorkbook();//建立新HSSFWorkbook对象
} else {
JAVA用poi实现多个excel的Sheet合并
JAVA⽤poi实现多个excel的Sheet合并前⾔项⽬中遇到需求,需要将多个excel的sheet合并到⼀个excel⾥⾯。
⽹上看了⼀下⽂章,但是很多都是断章取义,不是代码不全,就是jar 包版本不同⼀,为此⾃⼰解决这个问题后,把解决⽅案记录下来,供后来的童鞋参考:第⼀步:导⼊poi相关jar包<dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>4.1.2</version></dependency>第⼆步:复制⼯具类import ermodel.CellType;import ermodel.DateUtil;import org.apache.poi.ss.util.CellRangeAddress;import ermodel.*;import java.io.*;import java.util.Arrays;import java.util.Iterator;import java.util.List;/*** @description: 多个Excel合并Sheet* @author: wyj* @time: 2020/9/18 15:28*/public class ExcelUtil {public static void main(String[] args) {List<String> list = Arrays.asList(new File("D:\\test\\a.xlsx").toString(),new File("D:\\test\\b.xlsx").toString(),new File("D:\\test\\c.xlsx").toString());mergexcel(list,"杨洪-家庭贷-20190908(报告).xlsx","D:\\test");System.out.println("OJBK");}/*** * 合并多个ExcelSheet** @param files ⽂件字符串(file.toString)集合,按顺序进⾏合并,合并的Excel中Sheet名称不可重复* @param excelName 合并后Excel名称(包含后缀.xslx)* @param dirPath 存储⽬录* @return* @Date: 2020/9/18 15:31*/public static void mergexcel(List<String> files, String excelName, String dirPath) {XSSFWorkbook newExcelCreat = new XSSFWorkbook();// 遍历每个源excel⽂件,TmpList为源⽂件的名称集合for (String fromExcelName : files) {try (InputStream in = new FileInputStream(fromExcelName)) {XSSFWorkbook fromExcel = new XSSFWorkbook(in);int length = fromExcel.getNumberOfSheets();if (length <= 1) { //长度为1时XSSFSheet oldSheet = fromExcel.getSheetAt(0);XSSFSheet newSheet = newExcelCreat.createSheet(oldSheet.getSheetName());copySheet(newExcelCreat, oldSheet, newSheet);} else {for (int i = 0; i < length; i++) {// 遍历每个sheetXSSFSheet oldSheet = fromExcel.getSheetAt(i);XSSFSheet newSheet = newExcelCreat.createSheet(oldSheet.getSheetName());copySheet(newExcelCreat, oldSheet, newSheet);}}} catch (IOException e) {e.printStackTrace();}}// 定义新⽣成的xlxs表格⽂件String allFileName = dirPath + File.separator + excelName;try (FileOutputStream fileOut = new FileOutputStream(allFileName)) {newExcelCreat.write(fileOut);fileOut.flush();} catch (IOException e) {e.printStackTrace();} finally {try {newExcelCreat.close();} catch (IOException e) {e.printStackTrace();}}}/*** 合并单元格** @param fromSheet* @param toSheet*/private static void mergeSheetAllRegion(XSSFSheet fromSheet, XSSFSheet toSheet) { int num = fromSheet.getNumMergedRegions();CellRangeAddress cellR = null;for (int i = 0; i < num; i++) {cellR = fromSheet.getMergedRegion(i);toSheet.addMergedRegion(cellR);}}/*** 复制单元格** @param wb* @param fromCell* @param toCell*/private static void copyCell(XSSFWorkbook wb, XSSFCell fromCell, XSSFCell toCell) { XSSFCellStyle newstyle = wb.createCellStyle();// 复制单元格样式newstyle.cloneStyleFrom(fromCell.getCellStyle());// 样式toCell.setCellStyle(newstyle);if (fromCell.getCellComment() != null) {toCell.setCellComment(fromCell.getCellComment());}// 不同数据类型处理CellType fromCellType = fromCell.getCellType();toCell.setCellType(fromCellType);if (fromCellType == CellType.NUMERIC) {if (DateUtil.isCellDateFormatted(fromCell)) {toCell.setCellValue(fromCell.getDateCellValue());} else {toCell.setCellValue(fromCell.getNumericCellValue());}} else if (fromCellType == CellType.STRING) {toCell.setCellValue(fromCell.getRichStringCellValue());} else if (fromCellType == CellType.BLANK) {// nothing21} else if (fromCellType == CellType.BOOLEAN) {toCell.setCellValue(fromCell.getBooleanCellValue());} else if (fromCellType == CellType.ERROR) {toCell.setCellErrorValue(fromCell.getErrorCellValue());} else if (fromCellType == CellType.FORMULA) {toCell.setCellFormula(fromCell.getCellFormula());} else {// nothing29}}/*** ⾏复制功能** @param wb* @param oldRow* @param toRow*/private static void copyRow(XSSFWorkbook wb, XSSFRow oldRow, XSSFRow toRow) { toRow.setHeight(oldRow.getHeight());for (Iterator cellIt = oldRow.cellIterator(); cellIt.hasNext(); ) {XSSFCell tmpCell = (XSSFCell) cellIt.next();XSSFCell newCell = toRow.createCell(tmpCell.getColumnIndex());copyCell(wb, tmpCell, newCell);}}/*** Sheet复制** @param wb* @param fromSheet* @param toSheet*/private static void copySheet(XSSFWorkbook wb, XSSFSheet fromSheet, XSSFSheet toSheet) { mergeSheetAllRegion(fromSheet, toSheet);// 设置列宽int length = fromSheet.getRow(fromSheet.getFirstRowNum()).getLastCellNum();for (int i = 0; i <= length; i++) {toSheet.setColumnWidth(i, fromSheet.getColumnWidth(i));}for (Iterator rowIt = fromSheet.rowIterator(); rowIt.hasNext(); ) {XSSFRow oldRow = (XSSFRow) rowIt.next();XSSFRow newRow = toSheet.createRow(oldRow.getRowNum());copyRow(wb, oldRow, newRow);}}}View Code附加:提供⼀个创建空⽩excel的⽅法/*** *创建空的excel⽂件,可⾃定义sheet名称** @param filePath ⽂件路径* @param sheetList sheet名称集合(名称不可重复)* @return* @Date: 2020/9/21 17:36*/public static void createBlankExcel(String filePath, List<String> sheetList) {try (FileOutputStream out = new FileOutputStream(new File(filePath))) {XSSFWorkbook workbook = new XSSFWorkbook();if (sheetList != null && sheetList.size() > 0) {for (String sheet : sheetList) {workbook.createSheet(sheet);}} else {// 默认3个sheetworkbook.createSheet("sheet1");workbook.createSheet("sheet2");workbook.createSheet("sheet3");}XSSFCellStyle cellStyle = workbook.createCellStyle();XSSFFont font = workbook.createFont();font.setColor(Font.COLOR_RED);cellStyle.setFont(font);workbook.write(out);} catch (IOException e) {e.printStackTrace();}}。
使用POI操作Excel:Sheet拷贝
41.newsheet.setMargin(HSSFSheet.LeftMargin,fromsheet.getMargin(HSSFSheet.LeftMargin) );//页边距(左)
项目中很多模块需要将数据导出到Excel中,简单的如导出所有的用户信息到Excel,对于导出这种数据,可以通过POI/JXL直接生成Excel即可;当面临复杂格式的报表怎么办呢?下面这张图是项目中某张需要导出的Excel模版中部分截图,需求是根据查询条件生成N张同类型的这种单子到Excel中的不同Sheet中,后期要打印成纸质单据!需要明确有几个重点是:需要在A4纸中打印,所有打印出来的格式必须一样,可能后期这张表还会进行调整,必须满足其高扩展和变化性;
62.e.printStackTrace();
63.}
64.}
65.
66./**
67.*拷贝Excel行
68.* @param wb
69.* @param fromsheet
70.* @param newsheet
71.* @param firstrow
72.* @param lastrow
73.*/
ermodel.HSSFCell;
ermodel.HSSFPrintSetup;
ermodel.HSSFRow;
ermodel.HSSFSheet;
95.for(intj = fromRow.getLastCellNum(); j >= fromRow.getFirstCellNum(); j--) {
JAVAPOI替换EXCEL模板中自定义标签(XLSX版本)满足替换多个SHEET中自定义标签
JAVAPOI替换EXCEL模板中⾃定义标签(XLSX版本)满⾜替换多个SHEET中⾃定义标签个⼈说明:为了简单实现导出数据较少的EXCEL(根据⾃定义书签模板)⼀、替换Excel表格标签⽅法```/*** 替换Excel模板⽂件内容* @param map* 需要替换的标签建筑队形式* @param intPath* Excel模板⽂件路径* @param outPath* Excel⽣成⽂件路径*/public static boolean replaceSheetsModel(Map map, String intPath, String outPath) {boolean flag = true;try {FileInputStream fs = new FileInputStream(intPath);//EXCEL xlsx格式与xls格式⽤的类是不同的,xlsx⽤的是XSSFWorkbookXSSFWorkbook workbook = new XSSFWorkbook(fs);XSSFWorkbook wb = (XSSFWorkbook) workbook;XSSFSheet sheet;//由于个⼈使⽤是多sheet故获取excel对象后进⾏sheet遍历,分别对每个sheet⾥⾯的标签进⾏替换for (int j = 0; j < wb.getNumberOfSheets(); j++) {sheet = workbook.getSheetAt(j);Iterator rows = sheet.rowIterator();while (rows.hasNext()) {XSSFRow row = (XSSFRow) rows.next();if (row != null) {int num = row.getLastCellNum();for (int i = 0; i < num; i++) {XSSFCell cell = row.getCell(i);if (cell != null) {cell.setCellType(XSSFCell.CELL_TYPE_STRING);}if (cell == null || cell.getStringCellValue() == null) {continue;}String value = cell.getStringCellValue();if (!"".equals(value)) {Set<String> keySet = item.keySet();Iterator<String> it = keySet.iterator();while (it.hasNext()) {String text = it.next();if (value.equalsIgnoreCase(text)) {cell.setCellValue((String) item.get(text));break;}}} else {cell.setCellValue("");}}}}}// 输出⽂件FileOutputStream fileOut = new FileOutputStream(outPath);wb.write(fileOut);fileOut.close();} catch (Exception e) {flag = false;e.printStackTrace();}return flag;}```⼆、借助main⽅法进⾏测试```public static void main(String[] args) {Map map = new HashMap();map.put("aa", "sheet1");map.put("bb", "sheet2");map.put("cc", "sheet3");map.put("dd", "sheet4");// test.xlsx为Excel模板⽂件,sheets.xlsx为程序⽣成的新⽂件replaceSheetsModel(item, "f:\test.xlsx", "f:\\sheets.xlsx");}```三、⼯具包说明(JAVAPOI)1.头部核⼼```import ermodel.XSSFCell;import ermodel.XSSFRow;import ermodel.XSSFSheet;import ermodel.XSSFWorkbook;```2.⼯具包名称以及版本poi-ooxml 3.16如有疑问,若不嫌弃,可私信我,也可⼀起探讨POI 操作EXCEL表格,相互成长。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
} else {
InputStream out = new FileInputStream(toFile);
wbCreat = new HSSFWorkbook(out);
}
File fromFile = new File(fromPath);
if (fromFile.exists()) {
try {
HSSFSheet sheet = wb.getSheetAt(ii);
if (wbCreat.getSheetIndex(sheet.getSheetName()) >= 0) {
continue;
}
HSSFSheet sheetCreat = wbCreat.createSheet(sheet
.getSheetName());
@SuppressWarnings("deprecation")
public static void main(String[] args) throws FileNotFoundException,
IOException {
String fromPath = "C:\\Users\\Administrator\\Desktop\\quinn\\1.xls";// excel存放路径
import ermodel.HSSFWorkbook;
import org.apache.poi.hssf.util.Region;
import ermodel.Font;
public class CopyExcelSheet{
boolean isHidden=sheet.isColumnHidden(j);
sheetCreat.setColumnHidden(j,isHidden);
}
rowCreat.createCell(j);
//设置高度
rowCreat.getCell(j).getRow().setHeight(
row.getCell(j).getRow().getHeight());
rowCreat.getCell(j).setCellStyle(newStyle);
//复制内容
rowCreat.getCell(j).setCellValue(copyfont(wbCreat, wb, row.getCell(j)));
}
}
}
FileOutputStream fileOut = new FileOutputStream(toFile);
//复制样式
HSSFCellStyle newStyle = wbCreat.createCellStyle();
HSSFCellStyle oldStely = row.getCell(j).getCellStyle();
newStyle=copyStyle(newStyle, wbCreat, oldStely, wb);
wbCreat.write(fileOut);
fileOut.flush();
fileOut.close();
in.close();
} catch (RuntimeException e) {
e.printStackTrace();
}
}
};
/**
* @Title:复制sheet
* @Description:将fromFile文件中的sheet全部复制到toFile中
InputStream in = new FileInputStream(fromFile);
HSSFWorkbook wb = new HSSFWorkbook(in);
for (int ii = 0; ii < wb.getNumberOfSheets(); ii++) {
HSSFSheet sheet = wb.getSheetAt(ii);
import java.io.IOException;
import java.io.InputStream;
import ermodel.HSSFCell;
import ermodel.HSSFCellStyle;
//设置高度
rowCreat.getCell(j).getRow().setHeight(
row.getCell(j).getRow().getHeight());
//复制样式
HSSFCellStyle newStyle = wbCreat.createCellStyle();
HSSFCellStyle oldStely = row.getCell(j).getCellStyle();
}
}
}
FileOutputStream fileOut = new FileOutputStream(toFile);
* @param @param fromPath源文件全路径
* @param @param toPath新文件全路径
* @param @throws IOException
* @return返回类型
* @throws
*/
@SuppressWarnings("deprecation")
public static void copyExcelSheet(String fromPath, String toPath)
import ermodel.HSSFFont;
import ermodel.HSSFRichTextString;
import ermodel.HSSFRow;
import ermodel.HSSFSheeห้องสมุดไป่ตู้;
//取得源有excel Sheet的行
HSSFRow row = sheet.getRow(i);
if (row == null)
continue;
//单元格式样
int firstCell = row.getFirstCellNum();
int lastCell = row.getLastCellNum();
int lastCell = row.getLastCellNum();
for (int j = firstCell; j < lastCell; j++) {
if (row.getCell(j) == null)
continue;
if (i == 0) {
short width = sheet.getColumnWidth((short) j);
String toPath = "C:\\Users\\Administrator\\Desktop\\quinn\\5.xls";//保存新EXCEL路径
copyExcelSheet(fromPath, toPath);
}
/**
* @Title:根据文件路径复制sheet
* @Description:将fromPath文件中的sheet全部复制到toPath中
int firstRow = sheet.getFirstRowNum();
int lastRow = sheet.getLastRowNum();
for (int i = firstRow; i <= lastRow; i++) {
//创建新建excel Sheet的行
HSSFRow rowCreat = sheetCreat.createRow(i);
for (int j = firstCell; j < lastCell; j++) {
if (row.getCell(j) == null)
continue;
if (i == 0) {
short width = sheet.getColumnWidth((short) j);
sheetCreat.setColumnWidth((short) j,(short) (1.15 * width));
* @param @param fromFile .xls源文件
* @param @param toFile .xls新文件
* @param @throws IOException
* @return返回类型
* @throws
*/
@SuppressWarnings("deprecation")
public static void copyExcelSheet(File fromFile, File toFile)
newStyle=copyStyle(newStyle, wbCreat, oldStely, wb);
rowCreat.getCell(j).setCellStyle(newStyle);
//复制内容
rowCreat.getCell(j).setCellValue(copyfont(wbCreat, wb, row.getCell(j)));
sheetCreat.setColumnWidth((short) j,(short) (1.15 * width));
boolean isHidden=sheet.isColumnHidden(j);
sheetCreat.setColumnHidden(j,isHidden);
}