精华内容
下载资源
问答
  • //poi工具类 package com.bpms.util; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.io.PushbackInputStream; import javax....

    //SHEET命名

    	Workbook workbook = ReadExcel.openExcleFile(srcXlsxPath);
    
    		// 获取合同到期工作簿
    		Sheet sheet1 = workbook.getSheetAt(0);// 获取页签
    		workbook.setSheetName(0, "12" + "月合同到期");

    //合并单元格

    sheet1.addMergedRegion(new CellRangeAddress(csize + 2, csize + 2, 0, 6));// 合并单元格
    sheet1.addMergedRegion(new CellRangeAddress(2, csize + 2, 12, 12));// 合并单元格



    //poi工具类

    package com.bpms.util;
    
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.PushbackInputStream;
    
    import javax.servlet.ServletOutputStream;
    import javax.servlet.http.HttpServletResponse;
    
    import org.apache.log4j.Logger;
    import org.apache.poi.POIXMLDocument;
    import org.apache.poi.hssf.usermodel.HSSFDateUtil;
    import org.apache.poi.hssf.usermodel.HSSFWorkbook;
    import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
    import org.apache.poi.openxml4j.opc.OPCPackage;
    import org.apache.poi.poifs.filesystem.POIFSFileSystem;
    import org.apache.poi.ss.usermodel.Cell;
    import org.apache.poi.ss.usermodel.DateUtil;
    import org.apache.poi.ss.usermodel.Sheet;
    import org.apache.poi.ss.usermodel.Workbook;
    import org.apache.poi.ss.usermodel.WorkbookFactory;
    import org.apache.poi.ss.util.CellRangeAddress;
    import org.apache.poi.xssf.usermodel.XSSFCell;
    import org.apache.poi.xssf.usermodel.XSSFRow;
    import org.apache.poi.xssf.usermodel.XSSFWorkbook;
    
    /**
     * 
     * 读取excle文件内容
     * 
     * @author liuhh 2014/10/20.
     * 
     * @version V1.00.
     * 
     *         
     */
    public class ReadExcel {
    
    	/** 日志. */
    	public static Logger logger = Logger.getLogger(ReadExcel.class);
    
    	/**
    	 * 私有构造方法.
    	 */
    	private ReadExcel() {
    
    	}
    
    	/**
    	 * 打开excle文件
    	 * 
    	 * @param fileName
    	 *            带后缀excle文件名称
    	 * @return
    	 * @throws IOException
    	 * @throws InvalidFormatException
    	 */
    	public static Workbook openExcleFile(String filePath) throws Exception {
    		// 定义返回值
    		Workbook workbook = null;
    		try {
    			// 打开工作簿
    			workbook = WorkbookFactory.create(new File(filePath));
    		} catch (Exception e) {
    			e.printStackTrace();
    			logger.error(e.getMessage());
    		}
    		// 返回
    		return workbook;
    	}
    	public static Workbook createworkbook(String filePath) throws IOException,InvalidFormatException {
    		InputStream inp = new FileInputStream(filePath);
    		if (!inp.markSupported()) {
    		   inp = new PushbackInputStream(inp, 8);
    		}
    		if (POIFSFileSystem.hasPOIFSHeader(inp)) {
    		  return new HSSFWorkbook(inp);
    		}
    		if (POIXMLDocument.hasOOXMLHeader(inp)) {
    		  return new XSSFWorkbook(OPCPackage.open(inp));
    		}
    		throw new IllegalArgumentException("你的excel版本目前poi解析不了");
        }
    
    	/**
    	 * 
    	 * @param cell
    	 *            获取的单元格
    	 * @return 返回单元格中的值
    	 */
    	public static Object getCellValue(Cell cell) {
    		// 定义返回值
    		Object objResult = null;
    
    		// 判断单元格中的值
    		if (cell != null) {
    			// 匹配格式类型
    			switch (cell.getCellType()) {
    
    			// 字符串类型
    			case Cell.CELL_TYPE_STRING:
    
    				objResult = cell.getRichStringCellValue().getString();
    
    				break;
    			// 货币类型
    			case Cell.CELL_TYPE_NUMERIC:
    
    				if (DateUtil.isCellDateFormatted(cell)) {
    					objResult = cell.getDateCellValue();
    				} else {
    					objResult = cell.getNumericCellValue();
    				}
    
    				break;
    			// 布尔类型
    			case Cell.CELL_TYPE_BOOLEAN:
    
    				objResult = cell.getBooleanCellValue();
    
    				break;
    			// 公式
    			case Cell.CELL_TYPE_FORMULA:
    				try {
    					objResult = cell.getNumericCellValue();
    				} catch (IllegalStateException e) {
    					objResult = String.valueOf(cell.getRichStringCellValue());
    				}
    			default:
    			}
    		}
    
    		// 返回取到的单元格值
    		return objResult;
    	}
    
    	/**
    	 * 复制单元格
    	 * 
    	 * @param currentSheet
    	 *            sheet页
    	 * @param startRow
    	 *            开始行
    	 * @param endRow
    	 *            结束行
    	 * @param pPosition
    	 *            目标位置
    	 */
    	public static void copyRows(Sheet currentSheet, int startRow, int endRow,
    			int pPosition) {
    
    		int pStartRow = startRow - 1;
    		int pEndRow = endRow - 1;
    		int targetRowFrom;
    		int targetRowTo;
    		int columnCount;
    		CellRangeAddress region = null;
    		int i;
    		int j;
    
    		if (pStartRow == -1 || pEndRow == -1) {
    			return;
    		}
    
    		for (i = 0; i < currentSheet.getNumMergedRegions(); i++) {
    			region = currentSheet.getMergedRegion(i);
    			if ((region.getFirstRow() >= pStartRow)
    					&& (region.getLastRow() <= pEndRow)) {
    				targetRowFrom = region.getFirstRow() - pStartRow + pPosition;
    				targetRowTo = region.getLastRow() - pStartRow + pPosition;
    				CellRangeAddress newRegion = region.copy();
    				newRegion.setFirstRow(targetRowFrom);
    				newRegion.setFirstColumn(region.getFirstColumn());
    				newRegion.setLastRow(targetRowTo);
    				newRegion.setLastColumn(region.getLastColumn());
    				currentSheet.addMergedRegion(newRegion);
    			}
    		}
    
    		for (i = pStartRow; i <= pEndRow; i++) {
    			XSSFRow sourceRow = (XSSFRow) currentSheet.getRow(i);
    			columnCount = sourceRow.getLastCellNum();
    			if (sourceRow != null) {
    				XSSFRow newRow = (XSSFRow) currentSheet.createRow(pPosition
    						- pStartRow + i);
    				newRow.setHeight(sourceRow.getHeight());
    				for (j = 0; j < columnCount; j++) {
    					XSSFCell templateCell = sourceRow.getCell(j);
    					if (templateCell != null) {
    						XSSFCell newCell = newRow.createCell(j);
    						copyCell(templateCell, newCell);
    					}
    				}
    			}
    		}
    	}
    
    	public static void copyCell(XSSFCell srcCell, XSSFCell distCell) {
    		distCell.setCellStyle(srcCell.getCellStyle());
    		if (srcCell.getCellComment() != null) {
    			distCell.setCellComment(srcCell.getCellComment());
    		}
    		int srcCellType = srcCell.getCellType();
    		distCell.setCellType(srcCellType);
    		if (srcCellType == XSSFCell.CELL_TYPE_NUMERIC) {
    			if (HSSFDateUtil.isCellDateFormatted(srcCell)) {
    				distCell.setCellValue(srcCell.getDateCellValue());
    			} else {
    				distCell.setCellValue(srcCell.getNumericCellValue());
    			}
    		} else if (srcCellType == XSSFCell.CELL_TYPE_STRING) {
    			distCell.setCellValue(srcCell.getRichStringCellValue());
    		} else if (srcCellType == XSSFCell.CELL_TYPE_BLANK) {
    			// nothing21
    		} else if (srcCellType == XSSFCell.CELL_TYPE_BOOLEAN) {
    			distCell.setCellValue(srcCell.getBooleanCellValue());
    		} else if (srcCellType == XSSFCell.CELL_TYPE_ERROR) {
    			distCell.setCellErrorValue(srcCell.getErrorCellValue());
    		} else if (srcCellType == XSSFCell.CELL_TYPE_FORMULA) {
    			distCell.setCellFormula(srcCell.getCellFormula());
    		} else { // nothing29
    
    		}
    	}
    	
    	public static void fileDownload(HttpServletResponse response,String path){  
    	        //1.设置文件ContentType类型,这样设置,会自动判断下载文件类型  
    	        response.setContentType("multipart/form-data");  
    	        //2.设置文件头:最后一个参数是设置下载文件名(假如我们叫a.pdf)  
    	        response.setHeader("Content-Disposition", "attachment;fileName="+"a.xlsx");  
    	        ServletOutputStream out;  
    	        //通过文件路径获得File对象(假如此路径中有一个download.pdf文件)  
    	        File file = new File(path);  
    	        try {  
    	            FileInputStream inputStream = new FileInputStream(file);  
    	            //3.通过response获取ServletOutputStream对象(out)  
    	            out = response.getOutputStream();  
    	            int b = 0;  
    	            byte[] buffer = new byte[512];  
    	            while (b != -1){  
    	                b = inputStream.read(buffer);  
    	                //4.写到输出流(out)中  
    	                out.write(buffer,0,b);  
    	            }  
    	            inputStream.close();  
    	            out.close();  
    	            out.flush();  
    	        } catch (IOException e) {  
    	            e.printStackTrace();  
    	        }  
       }  
    }
    


    展开全文
  • POI克隆sheet原来这么简单

    千次阅读 2020-05-28 10:29:30
    为了实现sheet的复制在快速浏览了EasyExcel的API后发现在EasyExcel中并没有相关的复制Sheet的api,所以打算用原生的POI去实现,于是我像往常一样在百度和谷歌中搜索关键字:poi sheet复制,poi sheet克隆

    背景

    因为项目需要,需要生成EXCEL,为了开发的方便,使用了阿里的EasyExcel,并使用了模板excel进行填充

    但由于需要根据数据动态填充多个sheet,所以便决定用代码先动态生成excel模板,在动态生成excel模板时需要将原始的模板sheet进行复制

    为了实现sheet的复制在快速浏览了EasyExcel的API后发现在EasyExcel中并没有相关的复制Sheet的api,所以打算用原生的POI去实现,于是我像往常一样在百度和谷歌中搜索关键字:poi sheet复制,poi sheet克隆
    结果发现了很多个搜索结果,于是我把搜索结果中的代码粘贴到我的项目中时却发现要么代码找不到包,要么就是不生效,也不知道给出答案的人在他们的项目中是怎么实现出来的,文章也是抄来抄去。

    解决方法

    后面我仔细看了下poi的api,发现有一个cloneSheet的方法:

        /**
         * create an HSSFSheet from an existing sheet in the HSSFWorkbook.
         *
         * @return HSSFSheet representing the cloned sheet.
         */
    
        @Override
        public HSSFSheet cloneSheet(int sheetIndex) {
            validateSheetIndex(sheetIndex);
            HSSFSheet srcSheet = _sheets.get(sheetIndex);
            String srcName = workbook.getSheetName(sheetIndex);
            HSSFSheet clonedSheet = srcSheet.cloneSheet(this);
            clonedSheet.setSelected(false);
            clonedSheet.setActive(false);
    
            String name = getUniqueSheetName(srcName);
            int newSheetIndex = _sheets.size();
            _sheets.add(clonedSheet);
            workbook.setSheetName(newSheetIndex, name);
    
            // Check this sheet has an autofilter, (which has a built-in NameRecord at workbook level)
            int filterDbNameIndex = findExistingBuiltinNameRecordIdx(sheetIndex, NameRecord.BUILTIN_FILTER_DB);
            if (filterDbNameIndex != -1) {
                NameRecord newNameRecord = workbook.cloneFilter(filterDbNameIndex, newSheetIndex);
                HSSFName newName = new HSSFName(this, newNameRecord);
                names.add(newName);
            }
            // TODO - maybe same logic required for other/all built-in name records
    //        workbook.cloneDrawings(clonedSheet.getSheet());
    
            return clonedSheet;
        }
    

    看上面的代码可以看出,cloneSheet方法会将索引为sheetIndex(下标从0开始)的sheet页进行拷贝生成一个新的sheet,并添加到原始excel的工作薄的末尾sheet中并根据原始sheet的名称后加下标来命名

    那么对于克隆/复制sheet页的实现就比较方便了:

    /**
     * POI Excel工具类
     * created on 2020/5/28 10:08
     * @author puhaiyang
     */
    public class POIExcelUtil {
    
        public static void cloneSheet(File excelFile, String srcSheetName, String destSheetName) {
            Workbook sheets = readExcelFromFile(excelFile);
            int index = sheets.getSheetIndex(srcSheetName);
            cloneSheet(excelFile, index, destSheetName);
        }
    
        public static void cloneSheet(File excelFile, Integer index, String destSheetName) {
            Workbook sheets = readExcelFromFile(excelFile);
            //克隆一个新的sheet
            Sheet newSheet = sheets.cloneSheet(index);
            int sheetIndex = sheets.getSheetIndex(newSheet);
            sheets.setSheetName(sheetIndex, destSheetName);
            try {
                FileOutputStream out = new FileOutputStream(excelFile);
                out.flush();
                sheets.write(out);
                out.close();
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        
        //读取excel
        public static Workbook readExcelFromFile(File file) {
            if (file == null) {
                return null;
            }
            try {
                return new XSSFWorkbook(new FileInputStream(file));
            } catch (IOException e) {
                throw new RuntimeException("文件解析失败");
            }
        }
    }
    

    EasyExcel使用注意点

    另外再记录一点,EasyExcel的实现也是基于poi的,如果导入到EasyExcel的包的话,是不需要再引入poi的包的(自己导poi的包可能由于版本代码原因导致EasyExcel不能正常使用 )

    如果是springBoot/springCloud的项目,根据项目需要,记得将其他的可能冲突的包排除掉,如我这里的,具体情况看自己项目而定

            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>easyexcel</artifactId>
                <version>2.2.3</version>
                <exclusions>
                    <exclusion>
                        <groupId>com.alibaba</groupId>
                        <artifactId>fastjson</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>org.springframework.boot</groupId>
                        <artifactId>spring-boot</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>org.springframework.boot</groupId>
                        <artifactId>spring-boot-starter-web</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
    

    最后想说

    本文无技术含量,在看到了网上还有那么一大堆关于poi的sheet页复制/克隆的无效文章后,为了不误导读者及浪费读者的时间决定还记录一下

    展开全文
  • poi复制sheet的内容到另外一个sheet

    千次阅读 2019-06-27 14:39:37
    1、具体代码如下所示: HSSFRow row; HSSFSheet sheet1= workbook.... //现有的sheet1名称为 1 for (int i=2;i<data.size()+1;i++){ //data为从数据库查询到的数据 //复制sheet内容到另外一个sheet(...

    1、具体代码如下所示:

    		HSSFRow row;
            HSSFSheet sheet1= workbook.getSheet("1"); //现有的sheet1名称为 1
                for (int i=2;i<data.size()+1;i++){ //data为从数据库查询到的数据
                    //复制sheet内容到另外一个sheet(有多少条数据就复制多少个sheet)
                    HSSFSheet  newSheet = workbook.createSheet(String.valueOf(i)); //新的sheet
                    //将现有的sheet内容复制到newSheet中,新sheet的名称为2、3、4.........
                    copySheet(workbook, sheet1, newSheet, sheet1.getFirstRowNum(), sheet1.getLastRowNum());
                }
    

    2、copySheet方法中的代码如下,可直接复制

    (限于.xls版本的excel,如果是.xlsx版本的excel话,可以excel文件另存的时候选择保存文件类型为.xls)

     /**
         *新增sheet,并且复制sheet内容到新增的sheet里
         */
        private static void copySheet(HSSFWorkbook wb, HSSFSheet fromsheet, HSSFSheet newSheet, int firstrow, int lasttrow) {
                // 复制一个单元格样式到新建单元格
                if ((firstrow == -1) || (lasttrow == -1) || lasttrow < firstrow) {
                    return;
                }
                // 复制合并的单元格
                Region region = null;
                for (int i = 0; i < fromsheet.getNumMergedRegions(); i++) {
                    region = fromsheet.getMergedRegionAt(i);
                    if ((region.getRowFrom() >= firstrow) && (region.getRowTo() <= lasttrow)) {
                        newSheet.addMergedRegion(region);
                    }
                }
                HSSFRow fromRow = null;
                HSSFRow newRow = null;
                HSSFCell newCell = null;
                HSSFCell fromCell = null;
                // 设置列宽
                for (int i = firstrow; i < lasttrow; i++) {
                    fromRow = fromsheet.getRow(i);
                    if (fromRow != null) {
                        for (int j = fromRow.getLastCellNum(); j >= fromRow.getFirstCellNum(); j--) {
                            int colnum = fromsheet.getColumnWidth((short) j);
                            if (colnum > 100) {
                                newSheet.setColumnWidth((short) j, (short) colnum);
                            }
                            if (colnum == 0) {
                                newSheet.setColumnHidden((short) j, true);
                            } else {
                                newSheet.setColumnHidden((short) j, false);
                            }
                        }
                        break;
                    }
                }
                // 复制行并填充数据
                for (int i = 0; i < lasttrow; i++) {
                    fromRow = fromsheet.getRow(i);
                    if (fromRow == null) {
                        continue;
                    }
                    newRow = newSheet.createRow(i - firstrow);
                    newRow.setHeight(fromRow.getHeight());
                    for (int j = fromRow.getFirstCellNum(); j < fromRow.getPhysicalNumberOfCells(); j++) {
                        fromCell = fromRow.getCell((short) j);
                        if (fromCell == null) {
                            continue;
                        }
                        newCell = newRow.createCell((short) j);
                        newCell.setCellStyle(fromCell.getCellStyle());
                        int cType = fromCell.getCellType();
                        newCell.setCellType(cType);
                        switch (cType) {
                            case HSSFCell.CELL_TYPE_STRING:
                                newCell.setCellValue(fromCell.getRichStringCellValue());
                                break;
                            case HSSFCell.CELL_TYPE_NUMERIC:
                                newCell.setCellValue(fromCell.getNumericCellValue());
                                break;
                            case HSSFCell.CELL_TYPE_FORMULA:
                                newCell.setCellValue(fromCell.getCellFormula());
                                break;
                            case HSSFCell.CELL_TYPE_BOOLEAN:
                                newCell.setCellValue(fromCell.getBooleanCellValue());
                                break;
                            case HSSFCell.CELL_TYPE_ERROR:
                                newCell.setCellValue(fromCell.getErrorCellValue());
                                break;
                            default:
                                newCell.setCellValue(fromCell.getRichStringCellValue());
                                break;
                        }
                    }
                }
            }
    

    3、excel模板自己手动设计的,如下

    在这里插入图片描述

    4、复制sheet之后,然后再向excel模板中填充数据之后的excel如下图所示:

    在这里插入图片描述

    展开全文
  • java poi 生成多个sheet

    千次阅读 2014-01-09 10:20:43
    我的需求是:在一个表格中生成多个sheet,每个sheet名称动态指定,每个sheet内的内容动态指定。生成的文件名动态指定。 工具类:package test; import java.io.OutputStream; import java.util.List; import ...

    我的需求是:在一个表格中生成多个sheet,每个sheet的名称动态指定,每个sheet内的内容动态指定。生成的文件名动态指定。


    工具类:

    package test;
    
    import java.io.OutputStream;
    import java.util.List;
    
    import org.apache.poi.hssf.usermodel.HSSFCell;
    import org.apache.poi.hssf.usermodel.HSSFCellStyle;
    import org.apache.poi.hssf.usermodel.HSSFFont;
    import org.apache.poi.hssf.usermodel.HSSFRichTextString;
    import org.apache.poi.hssf.usermodel.HSSFRow;
    import org.apache.poi.hssf.usermodel.HSSFSheet;
    import org.apache.poi.hssf.usermodel.HSSFWorkbook;
    import org.apache.poi.hssf.util.HSSFColor;
    
    public class ExportExcelUtils {
    
    	/**
    	 * @Title: exportExcel
    	 * @Description: 导出Excel的方法
    	 * @author: evan @ 2014-01-09 
    	 * @param workbook 
    	 * @param sheetNum (sheet的位置,0表示第一个表格中的第一个sheet)
    	 * @param sheetTitle  (sheet的名称)
    	 * @param headers    (表格的标题)
    	 * @param result   (表格的数据)
    	 * @param out  (输出流)
    	 * @throws Exception
    	 */
    	public void exportExcel(HSSFWorkbook workbook, int sheetNum,
    			String sheetTitle, String[] headers, List<List<String>> result,
    			OutputStream out) throws Exception {
    		// 生成一个表格
    		HSSFSheet sheet = workbook.createSheet();
    		workbook.setSheetName(sheetNum, sheetTitle,
    				HSSFWorkbook.ENCODING_UTF_16);
    		// 设置表格默认列宽度为20个字节
    		sheet.setDefaultColumnWidth((short) 20);
    		// 生成一个样式
    		HSSFCellStyle style = workbook.createCellStyle();
    		// 设置这些样式
    		style.setFillForegroundColor(HSSFColor.PALE_BLUE.index);
    		style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
    		style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
    		style.setBorderLeft(HSSFCellStyle.BORDER_THIN);
    		style.setBorderRight(HSSFCellStyle.BORDER_THIN);
    		style.setBorderTop(HSSFCellStyle.BORDER_THIN);
    		style.setAlignment(HSSFCellStyle.ALIGN_CENTER);
    		// 生成一个字体
    		HSSFFont font = workbook.createFont();
    		font.setColor(HSSFColor.BLACK.index);
    		font.setFontHeightInPoints((short) 12);
    		font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
    		// 把字体应用到当前的样式
    		style.setFont(font);
    
    		// 指定当单元格内容显示不下时自动换行
    		style.setWrapText(true);
    
    		// 产生表格标题行
    		HSSFRow row = sheet.createRow(0);
    		for (int i = 0; i < headers.length; i++) {
    			HSSFCell cell = row.createCell((short) i);
    			cell.setEncoding(HSSFCell.ENCODING_UTF_16);
    			cell.setCellStyle(style);
    			HSSFRichTextString text = new HSSFRichTextString(headers[i]);
    			cell.setCellValue(text.toString());
    		}
    		// 遍历集合数据,产生数据行
    		if (result != null) {
    			int index = 1;
    			for (List<String> m : result) {
    				row = sheet.createRow(index);
    				int cellIndex = 0;
    				for (String str : m) {
    					HSSFCell cell = row.createCell((short) cellIndex);
    					cell.setEncoding(HSSFCell.ENCODING_UTF_16);
    					cell.setCellValue(str.toString());
    					cellIndex++;
    				}
    				index++;
    			}
    		}
    	}
    }
    

    测试数据:(再D盘下生成test.xls文件,并有多个sheet)

    package test;
    
    import java.io.FileOutputStream;
    import java.io.OutputStream;
    import java.util.ArrayList;
    import java.util.List;
    
    import org.apache.poi.hssf.usermodel.HSSFWorkbook;
    
    public class PoiTest {
    
    	@SuppressWarnings("unchecked")
    	public static void main(String[] args) {
    		try {
    			OutputStream out = new FileOutputStream("D:\\test.xls");
    			List<List<String>> data = new ArrayList<List<String>>();
    			for (int i = 1; i < 5; i++) {
    				List rowData = new ArrayList();
    				rowData.add(String.valueOf(i));
    				rowData.add("东霖柏鸿");
    				data.add(rowData);
    			}
    			String[] headers = { "ID", "用户名" };
    			ExportExcelUtils eeu = new ExportExcelUtils();
    			HSSFWorkbook workbook = new HSSFWorkbook();
    			eeu.exportExcel(workbook, 0, "上海", headers, data, out);
    			eeu.exportExcel(workbook, 1, "深圳", headers, data, out);
    			eeu.exportExcel(workbook, 2, "广州", headers, data, out);
    			//原理就是将所有的数据一起写入,然后再关闭输入流。
    			workbook.write(out);
    			out.close();
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    	}
    
    }
    

    如果你有同样的需求,你能看到这。你肯定能设计出你想要的报表格式了。


    展开全文
  • POI 多线程多sheet导出数据

    千次阅读 2019-10-30 17:22:24
    import org.apache.commons.beanutils.PropertyUtilsBean; import org.apache.commons.lang....import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.Row; import org...
  • 概述: 将一个表格中的所有sheet页添加到另外一个表格中去. package com; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import java....
  • java使用POI获取sheet、行数、列数 FileInputStream inp = new FileInputStream("E:\\WEIAN.xls"); HSSFWorkbook wb = new HSSFWorkbook(inp); HSSFSheet sheet = wb.getSheetAt(2); // 获得第三个工作薄(2008工作...
  • * 获取Sheet中的字符串关键字 * * @param inputstream * @param cellContent * @return java.lang.Integer * @author ZHANGCHAO * @date 2021/2/20 14:14 **/ public static Integer ...
  • Java_poisheet分批次导出

    千次阅读 2017-04-06 17:57:28
    普通方式导出Excel,比较可行的方法是多Sheet页分批次写,如10000数据分2个Sheet,每个Sheet页5000,分5次每次取1000写,下面代码简单的实现了这个功能,可以指定Sheet页大小和每次取数大小。写的比较随意,可能会有bug,...
  • POI使用克隆的方式复制Excel的sheet

    千次阅读 热门讨论 2019-07-18 10:54:41
    **: 最近需要使用POI操作Excel,有好多同一类型的sheet,需要复制操作,网上找了一下,居然都是...新建一个Excel,并新建一个sheet,修改一下文件路径和sheet名称,就可以直接运行,大功告成 package com.exampl...
  • 最近在项目中客户提到一个新的需求,一开始是在列表查询时导出多个Excel表格,后面提到将多个Excel表格进行合并,实现一个sheet显示多个sheet内容,图示如下: 一开始: 合并后(不同表格空一行隔开): 二。实现...
  • poi如何删除多个sheet

    2021-05-11 18:25:47
    根据sheet名称多个删除会直接找不到指定的名称,但是实际excel中是存在的,根据下标删除的话会下标越界 大佬们,指教下啊~~~ <p><img alt="" height="176" src=...
  • Java poi技术写Excel的Sheet

    千次阅读 2016-07-21 09:41:46
    转自:http://www.cnblogs.com/hongten/p/poi_sheet.html 支持原创 在这之前写过关于java读,写Excel的blog如下: Excel转Html java的poi技术读,写Excel[2003-2007,2010] java的poi技术读取Excel[2003-2007,2010] ...
  • 该代码在https://blog.csdn.net/ylforever/article/details/80955595的基础上做了优化,新增根据sheet名称获取工作表和部分异常处理。 只需三行代码即可获取excel单元格数据 ParseXlsxExcel excel = new ...
  • FileInputStream inp = new FileInputStream("E:\\WEIAN.xls");... HSSFSheet sheet = wb.getSheetAt(2); // 获得第三个工作薄(2008工作薄) // 填充上面的表格,数据需要从数据库查询 HSSFRow ...
  • poi实现列表导出多sheet模板excel文件

    千次阅读 2019-03-25 15:54:41
    ,其中每个Map的内容以模板的形式导出为excel的一个sheet页;List的长度即sheet页的页数,总共保存为一个excel文件 2.整体思路 1)建立一个excel模板 2)后台获取泛型是Map<String,Object>的数据列表 3)...
  • 基于反射的Excel操作工具类,可以灵活设置表头以及内容,可根据数据类型匹配成POJO,支持正则表达式等
  • 使用POI生成多个自定义sheet页的新版本excel,参考原来在scdn查到的博客,但是发现生成的是旧的版本...1.实体类(一个sheet页):存放当前sheet名称(左下角)、第一行的多个列标题、每行的多列数据 2.处理流程 ...
  • JAVA利用poi实现多sheet页excel文件导入导出要是觉得不好的很一般的也别喷哦,我也不是大神,可以给我建议哦。哈哈哈哈哈哈哈哈哈哈哈哈哈 一、介绍 当前B/S模式已成为应用开发的主流,而在企业办公系统中,常常有...
  • 直接上demo 通过ExportUtil工具类将单个excel进行合并。 ExportUtil代码 ... import org.apache.poi.ss.usermodel.CellType; import org.apache.poi.ss.usermodel.DateUtil;...import org.apache.poi....

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 11,174
精华内容 4,469
关键字:

poisheet名称