一、POI介绍

Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能。

基本功能:

HSSF - 提供读写Microsoft Excel格式档案的功能。
XSSF - 提供读写Microsoft Excel OOXML格式档案的功能。
HWPF - 提供读写Microsoft Word格式档案的功能。
HSLF - 提供读写Microsoft PowerPoint格式档案的功能。
HDGF - 提供读写Microsoft Visio格式档案的功能。

下载地址:

1、Apache官网:https://poi.apache.org/download.html
2、https://archive.apache.org/dist/poi/release/bin/


二、功能详解

首先,在项目内部有一个excel表格模板,本项目后缀名使用的是.xlsx,在WebRoot目录下新建一个文件夹formmb,存放这个表格模板,此表格模板内无数据,但有一些相应的列名作为解释,目的就是读取这个模板,然后把从数据库取出的数据填充到相应的表格。
        读取表格模板后,有两种方式填充数据
一种是,需要填充数据的单元格固定,有具体的坐标;
另一种是,需要填充的单元格以行的形式,根据数据的条数逐条增行.

解释:

在表格中的sheet页数,从0开始,即第一个sheet页为0;
行数和列数也是从0开始
比如:(1.2.1) 表示:第二个sheet页第三行第二列


三、代码演示:

1、准备工作

前提准备:先把表格模板放在新建的文件下
如图:

表格中有种方式需要读取并填充数据,这里展示两种样式:
1、固定坐标填充数据

2、以行形式填充

2、具体代码

项目采用ssm框架,因此这里有控制器和mapper文件,但是模式可能传统的模式不太一样,比如传参等,大体上还是一致的,废话不多说,看代码

ForWardFormsController.java

package com.sinosoft.controller.business.infodisclosure;import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;import org.apache.log4j.Logger;
import org.apache.poi.hssf.util.HSSFColor;
import org.springframework.stereotype.Repository;import com.sinosoft.controller.base.BaseController;
import com.sinosoft.entity.Page;
import com.sinosoft.service.business.infodisclosure.ForWardFormsService;
import com.sinosoft.utils.PageData;
import com.sinosoft.utils.WriteExcelUtil;import net.sf.json.JSONObject;@Repository(value="forWardFormsController")
public class ForWardFormsController implements BaseController {protected Logger logger = Logger.getLogger(this.getClass());@Resource(name = "forWardFormsService")private ForWardFormsService forwardFormsService;@Overridepublic String dispanse(String funcId, Page pageReq, HttpServletRequest request) {String returnStr = "";if("exchangeBuyBackQuery".equals(funcId)){                 //读取管理人报告信息excel模板returnStr = exchangeBuyBackQuery(pageReq,request);}return returnStr;}/*** 读取管理人报告信息excel模板* @param pageReq* @param request* @return*/private String exchangeBuyBackQuery(Page pageReq, HttpServletRequest request) {// 存放结果集List<List<Map<String, String>>> queryValue = new ArrayList<List<Map<String, String>>>();// 存放sheet页List<String> sheetList = new ArrayList<String>();// 存放开始行数List<String> rowList = new ArrayList<String>();List<Map<String, String>> fs = null;List<Short> colors = new ArrayList<Short>();PageData pd_result = new PageData();PageData pd = new PageData();pd = new PageData(request);pageReq.setPd(pd);Map<String, String> resultMap = new HashMap<String, String>();try {//1计划资产净值和收益情况fs = forwardFormsService.SheetOnePage(pageReq);if(fs.size() != 0 ){queryValue.add(fs);sheetList.add("0");/*真对坐标固定的sheet,将开始行写成"tuoguan-sheetone",在EXCEL导出方法内会解析开始行,若其中包含“tuoguan”,则进入key值与坐标一一对应的方法,“sheetone”用于到配置文件获取具体坐标*/rowList.add("tuoguan-sheetone");colors.add( HSSFColor.WHITE.index);}//2计划投资资产分布情况fs=null;fs = forwardFormsService.SheetTwoPage(pageReq);if(fs.size() != 0 ){queryValue.add(fs);sheetList.add("1");/*真对坐标固定的sheet,将开始行写成"tuoguan-sheettwo",在EXCEL导出方法内会解析开始行,若其中包含“tuoguan”,则进入key值与坐标一一对应的方法,“sheettwo”用于到配置文件获取具体坐标*/rowList.add("tuoguan-sheettwo");colors.add( HSSFColor.WHITE.index);}//3计划管理费用fs=null;fs = forwardFormsService.SheetThreePage(pageReq);if(fs.size() != 0 ){queryValue.add(fs);sheetList.add("2");/*真对坐标固定的sheet,将开始行写成"tuoguan-sheettwo",在EXCEL导出方法内会解析开始行,若其中包含“tuoguan”,则进入key值与坐标一一对应的方法,“sheettwo”用于到配置文件获取具体坐标*/rowList.add("tuoguan-sheetthree");colors.add( HSSFColor.WHITE.index);}//4计划管理费用明细fs=null;fs = forwardFormsService.SheetFourPage(pageReq);if(fs.size() != 0 ){queryValue.add(fs);sheetList.add("3");/*真对坐标固定的sheet,将开始行写成"tuoguan-sheettwo",在EXCEL导出方法内会解析开始行,若其中包含“tuoguan”,则进入key值与坐标一一对应的方法,“sheettwo”用于到配置文件获取具体坐标*/rowList.add("tuoguan-sheetfour");colors.add( HSSFColor.WHITE.index);}//5资产负债表fs=null;fs = forwardFormsService.SheetFivePage(pageReq);if(fs.size() != 0 ){queryValue.add(fs);sheetList.add("4");/*真对坐标固定的sheet,将开始行写成"tuoguan-sheettwo",在EXCEL导出方法内会解析开始行,若其中包含“tuoguan”,则进入key值与坐标一一对应的方法,“sheettwo”用于到配置文件获取具体坐标*/rowList.add("tuoguan-sheetfive");colors.add( HSSFColor.WHITE.index);}//6净资产变动表fs=null;fs = forwardFormsService.SheetSixPage(pageReq);if(fs.size() != 0 ){queryValue.add(fs);sheetList.add("5");/*真对坐标固定的sheet,将开始行写成"tuoguan-sheettwo",在EXCEL导出方法内会解析开始行,若其中包含“tuoguan”,则进入key值与坐标一一对应的方法,“sheettwo”用于到配置文件获取具体坐标*/rowList.add("tuoguan-sheetsix");colors.add( HSSFColor.WHITE.index);}//7养老金产品分布fs=null;//每月成本统计-展示计提当月列 fs = forwardFormsService.SheetSevenPage(pageReq);if(fs.size() != 0){queryValue.add(fs);sheetList.add("6");rowList.add("2");colors.add( HSSFColor.WHITE.index);}String[] sheet = new String[sheetList.size()];sheetList.toArray(sheet);String[] row = new String[rowList.size()];rowList.toArray(row);Date date = new Date();SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");String time = sdf.format(date);String modeName = pd.getString("modeName");   //模板文件名String downLoadName = pd.getString("filename");  //填完数据后生成的文件的文件名String fileDownloadName = downLoadName + time+ ".xlsx";/*excel导出方法* modeName:模板名称。* sheet:sheet页的序号* row:写入的开始行数(类似主表的位置已经确定的,需要传入)* queryValue:所有数值的集合* fileDownloadName:下载至文件服务器的文件的名称* * */if(queryValue.size()==0){//文件下载路径//String fileDownloadPath=resultMap.get("fileDownloadPath");pd_result.put("err_code", "");pd_result.put("err_message", "");pd_result.put("fileDownloadPath", "");}else{resultMap=WriteExcelUtil.GetExcelAddredds(request, modeName, sheet, row, queryValue,fileDownloadName,colors);//文件下载路径String fileDownloadPath=resultMap.get("fileDownloadPath");pd_result.put("err_code", "");pd_result.put("err_message", "");pd_result.put("fileDownloadPath", fileDownloadPath);}}catch(Exception e) {e.printStackTrace();logger.error(e);pd_result.put("err_code", "error");pd_result.put("err_message", e.getCause().getMessage());pd_result.put("totalCount", 0);pd_result.put("queryValue", null);}return JSONObject.fromObject(pd_result).toString();}}

通过WriteExcelUtil.GetExcelAddredds(request, modeName, sheet, row, queryValue,fileDownloadName,colors);读取模板

需要在config.properties中配置模板中的固定坐标

#文件生成地址
downLoadFormPath=D:/data/form/#1计划资产净值和收益情况   固定坐标
sheetonekey=A3,B3,C3,D3,E3,F3
sheetonecoord=0.2.0,0.2.1,0.2.2,0.2.3,0.2.4,0.2.5#2计划投资资产分布情况
sheettwokey=C2,D2,E2,C3,D3,C4,D4,C5,D5,C6,D6,C7,D7,C8,D8,C9,D9,C10,D10,C11,D11,C12,D12,C13,D13,C14,D14,C15,D15,C16,D16,C17,D17,C18,D18,C19,D19,C20,D20,C21,D21,C22,D22,C23,D23,C24,D24,C25,D25,C26,D26,C27,D27,C28,D28,C29,D29,C30,D30,C31,D31,C32,D32,C33,D33,C34,D34,C35,D35,E11,E27,E34
sheettwocoord=1.1.2,1.1.3,1.1.4,1.2.2,1.2.3,1.3.2,1.3.3,1.4.2,1.4.3,1.5.2,1.5.3,1.6.2,1.6.3,1.7.2,1.7.3,1.8.2,1.8.3,1.9.2,1.9.3,1.10.2,1.10.3,1.11.2,1.11.3,1.12.2,1.12.3,1.13.2,1.13.3,1.14.2,1.14.3,1.15.2,1.15.3,1.16.2,1.16.3,1.17.2,1.17.3,1.18.2,1.18.3,1.19.2,1.19.3,1.20.2,1.20.3,1.21.2,1.21.3,1.22.2,1.22.3,1.23.2,1.23.3,1.24.2,1.24.3,1.25.2,1.25.3,1.26.2,1.26.3,1.27.2,1.27.3,1.28.2,1.28.3,1.29.2,1.29.3,1.30.2,1.30.3,1.31.2,1.31.3,1.32.2,1.32.3,1.33.2,1.33.3,1.34.2,1.34.3,1.10.4,1.26.4,1.33.4#3计划管理费用
sheetthreekey=B2,C2,B3,C3,B4,C4
sheetthreecoord=2.1.1,2.1.2,2.2.1,2.2.2,2.3.1,2.3.2#4计划管理费用明细
sheetfourkey=B1,B4,B5,B6,B7,B8,B9,B10,B11,B12,C5,C6,C7
sheetfourcoord=3.0.1,3.3.1,3.4.1,3.5.1,3.6.1,3.7.1,3.8.1,3.9.1,3.10.1,3.11.1,3.4.2,3.5.2,3.6.2#5资产负债表
sheetfivekey=B5,B6,B7,B8,B9,B10,B11,B12,B13,B14,B15,B16,B17,B18,B19,B20,B21,B22,B23,B24,B25,B26,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21,C22,C23,C24,C25,C26,E5,E6,E7,E8,E9,E10,E11,E12,E13,E14,E15,E16,E17,E18,E19,E21,E22,E23,E24,E26,F5,F6,F7,F8,F9,F10,F11,F12,F13,F14,F15,F16,F17,F18,F19,F21,F22,F23,F24,F26
sheetfivecoord=4.4.1,4.5.1,4.6.1,4.7.1,4.8.1,4.9.1,4.10.1,4.11.1,4.12.1,4.13.1,4.14.1,4.15.1,4.16.1,4.17.1,4.18.1,4.19.1,4.20.1,4.21.1,4.22.1,4.23.1,4.24.1,4.25.1,4.4.2,4.5.2,4.6.2,4.7.2,4.8.2,4.9.2,4.10.2,4.11.2,4.12.2,4.13.2,4.14.2,4.15.2,4.16.2,4.17.2,4.18.2,4.19.2,4.20.2,4.21.2,4.22.2,4.23.2,4.24.2,4.25.2,4.4.4,4.5.4,4.6.4,4.7.4,4.8.4,4.9.4,4.10.4,4.11.4,4.12.4,4.13.4,4.14.4,4.15.4,4.16.4,4.17.4,4.18.4,4.20.4,4.21.4,4.22.4,4.23.4,4.25.4,4.4.5,4.5.5,4.6.5,4.7.5,4.8.5,4.9.5,4.10.5,4.11.5,4.12.5,4.13.5,4.14.5,4.15.5,4.16.5,4.17.5,4.18.5,4.20.5,4.21.5,4.22.5,4.23.5,4.25.5#6净资产变动表
sheetsixkey=B2,B4,B5,B6,B7,B8,B9,B10,B11,B12,B13,B14,B15,B16,B17,B18,B19,B20,B21,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17,C18,C19,C20,C21
sheetsixcoord=5.1.1,5.3.1,5.4.1,5.5.1,5.6.1,5.7.1,5.8.1,5.9.1,5.10.1,5.11.1,5.12.1,5.13.1,5.14.1,5.15.1,5.16.1,5.17.1,5.18.1,5.19.1,5.20.1,5.3.2,5.4.2,5.5.2,5.6.2,5.7.2,5.8.2,5.9.2,5.10.2,5.11.2,5.12.2,5.13.2,5.14.2,5.15.2,5.16.2,5.17.2,5.18.2,5.19.2,5.20.2

WriteExcelUtil.java

package com.sinosoft.utils;import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.regex.Matcher;
import java.util.regex.Pattern;import javax.servlet.http.HttpServletRequest;import org.apache.log4j.Logger;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.Font;
import org.apache.poi.xssf.streaming.SXSSFCell;
import org.apache.poi.xssf.streaming.SXSSFRow;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;public class WriteExcelUtil {private static Logger logger = Logger.getLogger(WriteExcelUtil.class);/*** EXCEL导出方法:* 1、将查询结果集的key值替换为坐标* 2、使用XSSFWorkbook读取模板EXCEL* 3、使用SXSSFWorkbook将模板EXCEL和查询结果集整体写入到一个新的EXCEL,并生成流* 4、将流写入文件服务器,并返回生成EXCEL的地址名称。* * 注:由于XSSFWorkbook在写入大量数据的EXCEL时会占用大量内存甚至造成内存溢出,所以需要选用SXSSFWorkbook写EXCEL*/public static HashMap<String,String> GetExcelAddredds(HttpServletRequest request, String modeName,String sheet[], String[] row, List<List<Map<String, String>>> queryValue,String fileDownloadName,List<Short> colors){//获取模版路径String modelPath = request.getSession().getServletContext().getRealPath("/formmb")+ File.separator + modeName;logger.info(modeName + ":" + modelPath);//下载文件的名称String[] ExcelAddredds = new String[queryValue.size()];List<Map<String, Object>> values = new ArrayList<Map<String, Object>>();Properties getProperties = PropertyUitls.getProperties("config.properties");String path =getProperties.getProperty("downLoadFormPath");//将查询结果集的key值替换为坐标for(int i = 0 ; i < queryValue.size() ; i ++){//定义集合,需要转换Map<String, Object> valuesTemp = new HashMap<String, Object>();String Addredds ="";//固定坐标的sheet页的if(row[i].indexOf("tuoguan")!=-1){String sheetN = row[i].substring(8);//key值String key =getProperties.getProperty(sheetN+"key");//坐标值String coord =getProperties.getProperty(sheetN+"coord");String[] a =key.split(",");String[] b =coord.split(",");System.out.println(queryValue.get(i).get(0));//将查询结果集中的key替换为坐标coordMap<String, String> result1 = (Map<String, String>) replaceKeys2( (Map<String, String>) queryValue.get(i).get(0), a, b);valuesTemp = mapValuesZB(result1,sheet[i],row[i]);Addredds = coord;}else{valuesTemp = mapValues(queryValue.get(i),sheet[i],row[i]);Addredds = getAddredds(queryValue.get(i), sheet[i], row[i]);}ExcelAddredds[i] = Addredds;values.add(valuesTemp);         }return downloadFile(values,ExcelAddredds,row,modelPath, fileDownloadName,path,colors);}/*** 获取具体坐标(通用方法)* @param List<Map<String, String>> queryeResult* @return*/ public static String getAddredds(List<Map<String, String>> queryeResult,String sheet,String startRow){//定义地址StringBuffer addres = new StringBuffer();//循环存入全部的坐标for (int i = 0 ; i < queryeResult.size() ; i ++){//获取第一个map的key值,列Map<String, String> mapTemp = queryeResult.get(i);//存放到一个数组中,得到需要写入的列String [] cols = new String[mapTemp.size()];int colIndex = 0;for (String key : mapTemp.keySet()) {cols[colIndex++] = key;}for (int j = 0 ; j < cols.length ; j ++){//存入开始sheeet页addres.append(sheet);addres.append(".");//行坐标自动递增addres.append(Integer.parseInt(startRow)+i);addres.append(".");//列坐标按查询字段结束数字取值Pattern p = Pattern.compile("[^0-9]"); Matcher m = p.matcher(cols[j]);addres.append(m.replaceAll(""));if(j < cols.length-1){addres.append(",");}}if(i < queryeResult.size()-1){addres.append(",");}}return addres.toString();}/*** 替换map的key值* 以实际需要的格式返回map数据,格式为{"0.0.0=value,..."}* @param listMap List<Map<String, String>>* @param sheet        写入的sheet页* @param startRow 开始写入的行数* @return*/public static Map<String, Object> mapValues(List<Map<String, String>> listMap,String sheet,String startRow){// 替换map的key值if(listMap.get(0) == null || listMap.get(0).size() == 0){return null;}Map<String, Object> map = new HashMap<String, Object>();String[] address = getAddreddsArray(listMap, sheet, startRow);int index = 0;for(int i = 0 ; i < listMap.size() ; i ++){Map<String, String> mapTemp = listMap.get(i);for (String key : mapTemp.keySet()) {map.put(address[index++], mapTemp.get(key));}}return map;}/*** 获取坐标 传入的 List<Map<String, String>>* @param queryeResult      List<Map<String, String>>       list* @param sheet             String                          写入sheet页* @param startRow          String                          开始行数* @return*/public static String[] getAddreddsArray(List<Map<String, String>> queryeResult,String sheet,String startRow){//定义长度----------针对与报表导出,数据  总行数*总列数 < 200万   使用int类型(最大返回数据单元999999999)int length = 0;//获取长度----------返回的map可能是长短不一的for(int i = 0 ; i < queryeResult.size() ; i ++){if(queryeResult.get(i).size() == 0 || queryeResult.get(i) == null){String[] s = {""};return s;}length += queryeResult.get(i).size();}//定义地址String[] address = new String[length];int index = 0;//循环存入全部的坐标for (int i = 0 ; i < queryeResult.size() ; i ++){//获取第i个map的key值,列Map<String, String> mapTemp = queryeResult.get(i);//获取需要写入的列,存放到一个数组中String [] cols = new String[mapTemp.size()];int colIndex = 0;for (String key : mapTemp.keySet()) {cols[colIndex++] = key;}for (int j = 0 ; j < cols.length ; j ++){String str = "";//存入开始sheeet页str += sheet + ".";//行坐标自动递增str += Integer.parseInt(startRow)+i+"" + "." ;//列坐标按查询字段结束数字取值Pattern p = Pattern.compile("[^0-9]"); Matcher m = p.matcher(cols[j]);str += m.replaceAll("");address[index++] = str;}}return address;}/*** EXCEL导入文件服务器* @param values      结果集* @param execlPoint 写入坐标* @param row       开始行* @param modelFile      模板* @param fileDownloadName        生成文件名* @param path     文件服务器路径* @return*/ private static HashMap<String,String> downloadFile(List<Map<String, Object>> values, String[] execlPoint,String[] row,String modelFile,String fileDownloadName,  String path,List<Short> colors) {// 下载报表BufferedInputStream bis = null;BufferedOutputStream bos = null;HashMap<String,String> resultMap =new HashMap<String,String>();try {//EXCEL写入方法,生成流ByteArrayOutputStream os = writeDataToExecl(modelFile, execlPoint, row, values, colors, fileDownloadName);byte[] content = os.toByteArray();InputStream is = new ByteArrayInputStream(content);String fileDownloadPath = path+fileDownloadName;File f = new File(fileDownloadPath);resultMap.put("fileDownloadPath", fileDownloadPath);FileOutputStream down = new FileOutputStream(f);bis = new BufferedInputStream(is);bos = new BufferedOutputStream(down);byte[] buff = new byte[2048];int bytesRead;while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) {bos.write(buff, 0, bytesRead);}} catch (Exception e) {e.printStackTrace();logger.error(e);} finally {if (bis != null) {try {bis.close();} catch (IOException e) {e.printStackTrace();}}if (bos != null) {try {bos.close();} catch (IOException e) {e.printStackTrace();}}}return resultMap;}/*** 读取EXCEL模板并写入数据* @param modelFile        模板excel名称* @param execlPoint   写入坐标* @param values        写入值* @return*/public static ByteArrayOutputStream writeDataToExecl(String modelFile, String[] execlPoint, String[] row, List<Map<String, Object>> values,List<Short> colors, String fileDownloadName) {ByteArrayOutputStream os = null;FileInputStream input = null;try {os = new ByteArrayOutputStream();logger.info(modelFile);input = new FileInputStream(new File(modelFile));XSSFWorkbook workBook = new XSSFWorkbook(new BufferedInputStream(input));SXSSFWorkbook SworkBook = new SXSSFWorkbook(100);for(int i = 0 ; i < values.size() ; i ++){//如果没有数据,那么不执行写的操作if(values.get(i).size()==0 || values.get(i) == null){continue;}String[] ss = execlPoint[i].split(",");//获取结束的列String endCell = getEndCell(values.get(i));//写EXCELShort color=null;if(colors.size()>i){color =colors.get(i);}workBook = SwriteWorkBook(SworkBook,workBook,ss, values.get(i),endCell, row[i],color);}workBook.write(os);os.flush();} catch (Exception e) {logger.info(e);e.printStackTrace();}finally {try {if(os != null){os.close();}} catch (IOException e) {logger.info(e);e.printStackTrace();}try {if(input != null){input.close();}} catch (IOException e) {logger.info(e);e.printStackTrace();}}return os;  }/*** 写入EXCEL* @param workBook  XSSFWorkbook  一个工作薄* @param ss        String[]  绝对坐标* @param values  Map<String, Object>  与绝对值对应的map集合* @return* @throws IOException */public static XSSFWorkbook SwriteWorkBook(SXSSFWorkbook SworkBook,XSSFWorkbook workBook,String[] ss,Map<String, Object> values,String endCell,String row,Short color) throws IOException {// 设置公共单元格样式,包括单元格的四周框线、单元格格式,背景色if (color == null) {color = 0;}// 一次性将统一创建样式相对于每个单元格分别创建样式,可提高写入效率Map<String, CellStyle> styleMap = new HashMap<String, CellStyle>();CellStyle styleSL = NMCellStyle(workBook, color);for (int i = 0; i < ss.length; i++) {String[] sss = ss[i].split("\\.");/** 思路: 1、判断该值(即坐标sss)所在的sheet模板是否已经写入SworkBook 2、* 若没有写入sheet模板,将sheet模板写入SworkBook(包括样式),并将该值写入对应坐标* 3、若已经读取sheet页模板,则判断是否已经写入该值所在的行 3.1、若该行已经存在,则插入数值 3.2、若该行不存在,则生成该行,并插入数据* */XSSFSheet sheetMB = workBook.getSheetAt(Integer.parseInt(sss[0]));String sheetName = sheetMB.getSheetName();int lastRows = sheetMB.getLastRowNum();
//            SXSSFSheet sheetS = (SXSSFSheet) SworkBook.getSheet(sheetName);XSSFSheet sheetS1 = (XSSFSheet) workBook.getSheet(sheetName);// sheet页已经存在,模板已经读取,则根据坐标写入数据XSSFRow
//          SXSSFRow RowS = (SXSSFRow) sheetS.getRow(Integer.parseInt(sss[1]));
//          SXSSFCell cellS = (SXSSFCell) RowS.getCell(Integer.parseInt(sss[2]));XSSFRow RowS = (XSSFRow) sheetS1.getRow(Integer.parseInt(sss[1]));if (RowS == null) {RowS = (XSSFRow) sheetS1.createRow(Integer.parseInt(sss[1]));int lastCell = Integer.parseInt(endCell);for (int k = 0; k < lastCell + 1; k++) {XSSFCell cellS = (XSSFCell) RowS.getCell(k);if (cellS == null) {cellS = (XSSFCell) RowS.createCell(k);}String value = null;if (k == Integer.parseInt(sss[2])) {if (values.get(ss[i]) != null) {value = values.get(ss[i]).toString();}}cellS = setCell(workBook, cellS, RowS, value, styleSL);}} else {XSSFCell cellS = (XSSFCell) RowS.getCell(Integer.parseInt(sss[2]));if (cellS == null) {cellS = (XSSFCell) RowS.createCell(Integer.parseInt(sss[2]));}String value = null;if (values.get(ss[i]) != null) {value = values.get(ss[i]).toString();}cellS = setCell(workBook, cellS, RowS, value, styleSL);}}return workBook;}//设置cell的值和样式public static XSSFCell setCell(XSSFWorkbook SworkBook,XSSFCell cellS,XSSFRow RowS ,String value,CellStyle styleSL ){//给单元格赋值if (value == null) {cellS.setCellValue("-");// 给单元格赋值cellS.setCellStyle(styleSL);} else {    cellS.setCellValue(value+"");// 给单元格赋String值
//          cellS.setCellStyle(styleSL);}return cellS;}//设置cell的值和样式public static SXSSFCell setCell1(SXSSFWorkbook SworkBook,SXSSFCell cellS,SXSSFRow RowS ,String value,Map<String,CellStyle> styleMap ){//给单元格赋值if (value == null) {cellS.setCellValue("-");// 给单元格赋值cellS.setCellStyle(styleMap.get("0"));} else {String val="";cellS.setCellValue(value+"");// 给单元格赋String值cellS.setCellStyle(styleMap.get("0"));}return cellS;}/*** 获取结束列* @param values* @return*/private static String getEndCell(Map<String, Object> values) {Integer endCell = 0;for (String key : values.keySet()) {String[] keys = key.split("\\.");if(endCell < Integer.parseInt(keys[2])){endCell = Integer.parseInt(keys[2]);}}return endCell.toString();}/** 用于处理坐标明确的sheet页,* 将查询结果集的key值与坐标进行替换* */public static Map<String, Object> mapValuesZB(Map<String, String> listMap,String sheet,String startRow){if(listMap == null || listMap.size() == 0){return null;}Map<String, Object> map = new HashMap<String, Object>();for(String key : listMap.keySet()){map.put(key, listMap.get(key));}return map;}public static Map<String, String> replaceKeys2(Map<String, String> map,String[] a, String[] b) {Map<String,String> result = new HashMap<String,String>();for (String key : map.keySet()) {System.out.println("key= "+ key + " and value= " + map.get(key));for (int i = 0 ; i< a.length;i++){if (key.equals(a[i])){result.put(b[i],map.get(key));}}}return result;}//设置通用Cell样式public static CellStyle NMCellStyle(XSSFWorkbook workBook,short color){CellStyle style =  workBook.createCellStyle();/*if(color!=0&&color!=HSSFColor.WHITE.index){style.setFillPattern(CellStyle.SOLID_FOREGROUND);style.setFillForegroundColor(color);}*/style.setBorderBottom(CellStyle.BORDER_THIN);style.setBorderLeft(CellStyle.BORDER_THIN);style.setBorderRight(CellStyle.BORDER_THIN);style.setBorderTop(CellStyle.BORDER_THIN);Font sfont =  workBook.createFont();//单元格字体//常规字符类型的Short high = 14;sfont.setFontHeightInPoints(high);//字体大小sfont.setFontName("宋体");//字体类型style.setAlignment(HSSFCellStyle.ALIGN_CENTER);//水平居中style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//垂直居中style.setFont(sfont);return style;}}

ForWardFormsService.java

package com.sinosoft.service.business.infodisclosure;import java.util.List;
import java.util.Map;import javax.annotation.Resource;import org.apache.log4j.Logger;
import org.springframework.stereotype.Service;import com.sinosoft.dao.DaoSupport;
import com.sinosoft.entity.Page;@Service("forWardFormsService")
public class ForWardFormsService {protected static Logger logger = Logger.getLogger(ForWardFormsService.class);@Resource(name = "daoSupport")private DaoSupport dao;/** description:1计划资产净值和收益情况* author: Penghui Su* time: 2018/11/29 09:13:00* forWardFormsMapper*/public List<Map<String, String>> SheetOnePage(Page page)throws Exception{return (List<Map<String, String>>) dao.findForList("noticeGenerateMapper.SheetOne", page);}/** description:2计划投资资产分布情况* author: Penghui Su* time: 2018/11/29 09:13:00* forWardFormsMapper*/public List<Map<String, String>> SheetTwoPage(Page page)throws Exception{return (List<Map<String, String>>) dao.findForList("noticeGenerateMapper.SheetTwo", page);}/** description:3计划管理费用* author: Penghui Su* time: 2018/11/29 09:13:00* forWardFormsMapper*/public List<Map<String, String>> SheetThreePage(Page page)throws Exception{return (List<Map<String, String>>) dao.findForList("noticeGenerateMapper.SheetThree", page);}/** description:4计划管理费用明细* author: Penghui Su* time: 2018/11/29 09:13:00* forWardFormsMapper*/public List<Map<String, String>> SheetFourPage(Page page)throws Exception{return (List<Map<String, String>>) dao.findForList("noticeGenerateMapper.SheetFour", page);}/** description:5资产负债表* author: Penghui Su* time: 2018/11/29 09:13:00* forWardFormsMapper*/public List<Map<String, String>> SheetFivePage(Page page)throws Exception{return (List<Map<String, String>>) dao.findForList("noticeGenerateMapper.SheetFive", page);}/** description:6净资产变动表* author: Penghui Su* time: 2018/11/29 09:13:00* forWardFormsMapper*/public List<Map<String, String>> SheetSixPage(Page page)throws Exception{return (List<Map<String, String>>) dao.findForList("noticeGenerateMapper.SheetSix", page);}/** description:7养老金产品分布* author: Penghui Su* time: 2018/11/29 09:13:00* forWardFormsMapper*/public List<Map<String, String>> SheetSevenPage(Page page)throws Exception{return (List<Map<String, String>>) dao.findForList("noticeGenerateMapper.SheetSeven", page);}}

NoticeGenerateMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="noticeGenerateMapper"><!-- 查询管理人--><resultMap id="psOrganInfoResultMap" type="com.sinosoft.utils.PageData"><result column="mngType" property="mngType"/><result column="mgName" property="mngName"/><result column="mngCode" property="mngCode"/></resultMap><!-- 计划建立:分支机构信息列表查询--><select id="listPageShowMngName" parameterType="pd" resultType="com.sinosoft.utils.PageData" resultMap="psOrganInfoResultMap" statementType="PREPARED">SELECT obc.CUSTODIANNAME || obi.IVSTMNGNAME as mgName,obm.mngcode,getcodename('ManagerType',obm.mngtype)mngtypeFROM OP_BP_ManagerLink obm left join OP_B_IvstManager obion obm.mngcode = obi.IVSTMNGCODE left join OP_B_Custodian obc on obm.mngcode = obc.custodiancodeWHERE obm.plancode='00000000000000000293' and obm.mngtype in (02,04)</select><!--1计划资产净值和收益情况  --><resultMap id="sheetOneResultMap" type="com.sinosoft.utils.PageData"><result column="A3" property="A3"/><result column="B3" property="B3"/><result column="C3" property="C3"/><result column="D3" property="D3"/><result column="E3" property="E3"/><result column="F3" property="F3"/></resultMap><select id="SheetOne" parameterType="pd" resultType="com.sinosoft.utils.PageData" resultMap="sheetOneResultMap" statementType="PREPARED">SELECTcase when (to_char(opc.BEFOREMONEY,'fm9999990.0099'))is null then '-'else  to_char(opc.BEFOREMONEY,'fm9999990.0099') end A3,case when (to_char(opc.selloutamount,'fm9999990.0099'))is null then '-'else  to_char(opc.selloutamount,'fm9999990.0099') end B3,case when (to_char(opc.aftermoney,'fm9999990.0099'))is null then '-'else  to_char(opc.aftermoney,'fm9999990.0099') end C3,case when (to_char(opc.payredeemmoney,'fm9999990.0099'))is null then '-'else  to_char(opc.payredeemmoney,'fm9999990.0099') end D3,case when (to_char(opc.invconversionmoney,'fm9999990.0099'))is null then '-'else  to_char(opc.invconversionmoney,'fm9999990.0099') end E3,case when (to_char(opc.otherbuyamount,'fm9999990.0099'))is null then '-'else  to_char(opc.otherbuyamount,'fm9999990.0099') end F3FROM OP_P_CollectDetail opcWHERE opc.COLLECTSN='00000000000000000152'</select><!-- 2计划投资资产分布情况 --><resultMap id="sheetTwoResultMap" type="com.sinosoft.utils.PageData"><result column="C2" property="C2"/><result column="D2" property="D2"/><result column="E2" property="E2"/><result column="C3" property="C3"/><result column="D3" property="D3"/><result column="C4" property="C4"/><result column="D4" property="D4"/><result column="C5" property="C5"/><result column="D5" property="D5"/><result column="C6" property="C6"/><result column="D6" property="D6"/><result column="C7" property="C7"/><result column="D7" property="D7"/><result column="C8" property="C8"/><result column="D8" property="D8"/><result column="C9" property="C9"/><result column="D9" property="D9"/><result column="C10" property="C10"/><result column="D10" property="D10"/><result column="C11" property="C11"/><result column="D11" property="D11"/><result column="C12" property="C12"/><result column="D12" property="D12"/><result column="C13" property="C13"/><result column="D13" property="D13"/><result column="C14" property="C14"/><result column="D14" property="D14"/><result column="C15" property="C15"/><result column="D15" property="D15"/><result column="C16" property="C16"/><result column="D16" property="D16"/><result column="C17" property="C17"/><result column="D17" property="D17"/><result column="C18" property="C18"/><result column="D18" property="D18"/><result column="C19" property="C19"/><result column="D19" property="D19"/><result column="C20" property="C20"/><result column="D20" property="D20"/><result column="C21" property="C21"/><result column="D21" property="D21"/><result column="C22" property="C22"/><result column="D22" property="D22"/><result column="C23" property="C23"/><result column="D23" property="D23"/><result column="C24" property="C24"/><result column="D24" property="D24"/><result column="C25" property="C25"/><result column="D25" property="D25"/><result column="C26" property="C26"/><result column="D26" property="D26"/><result column="C27" property="C27"/><result column="D27" property="D27"/><result column="C28" property="C28"/><result column="D28" property="D28"/><result column="C29" property="C29"/><result column="D29" property="D29"/><result column="C30" property="C30"/><result column="D30" property="D30"/><result column="C31" property="C31"/><result column="D31" property="D31"/><result column="C32" property="C32"/><result column="D32" property="D32"/><result column="C33" property="C33"/><result column="D33" property="D33"/><result column="C34" property="C34"/><result column="D34" property="D34"/><result column="C35" property="C35"/><result column="D35" property="D35"/><result column="E11" property="E11"/><result column="E27" property="E27"/><result column="E34" property="E34"/><result column="A3" property="A3"/><result column="A3" property="A3"/><result column="A3" property="A3"/></resultMap><select id="SheetTwo" parameterType="pd" resultType="com.sinosoft.utils.PageData" resultMap="sheetTwoResultMap" statementType="PREPARED">
select'1' C2,'2' D2,'3' E2,'4' C3,'5' D3,'6' C4,'7' D4,'8' C5,'9' D5,'10' C6,'11' D6,'12' C7,'13' D7,'14' C8,'15' D8,'16' C9,'17' D9,'18' C10,'19' D10,'20' C11,'21' D11,'22' C12,'23' D12,'24' C13,'25' D13,'26' C14,'27' D14,'28' C15,'29' D15,'30' C16,'31' D16,'32' C17,'33' D17,'34' C18,'35' D18,'36' C19,'37' D19,'38' C20,'39' D20,'40' C21,'41' D21,'42' C22,'43' D22,'44' C23,'45' D23,'46' C24,'47' D24,'48' C25,'49' D25,'50' C26,'51' D26,'52' C27,'53' D27,'54' C28,'55' D28,'56' C29,'57' D29,'58' C30,'59' D30,'60' C31,'61' D31,'62' C32,'63' D32,'64' C33,'65' D33,'66' C34,'67' D34,'68' C35,'69' D35,'70' E11,'71' E27,'72' E34from dual</select><!-- 3计划管理费用 --><resultMap id="sheetThreeResultMap" type="com.sinosoft.utils.PageData"><result column="B2" property="B2"/><result column="C2" property="C2"/><result column="B3" property="B3"/><result column="C3" property="C3"/><result column="B4" property="B4"/><result column="C4" property="C4"/></resultMap><select id="SheetThree" parameterType="pd" resultType="com.sinosoft.utils.PageData" resultMap="sheetThreeResultMap" statementType="PREPARED">select '1.00' B2,'2.00' C2,'3.00' B3,'4.00' C3,'5.00' B4,'6.00' C4from dual</select><!-- 4计划管理费用明细 --><resultMap id="sheetFourResultMap" type="com.sinosoft.utils.PageData"><result column="B1" property="B1"/><result column="B4" property="B4"/><result column="B5" property="B5"/><result column="B6" property="B6"/><result column="B7" property="B7"/><result column="B8" property="B8"/><result column="B9" property="B9"/><result column="B12" property="B12"/><result column="B10" property="B10"/><result column="B11" property="B11"/><result column="C5" property="C5"/><result column="C6" property="C6"/><result column="C7" property="C7"/></resultMap><select id="SheetFour" parameterType="pd" resultType="com.sinosoft.utils.PageData" resultMap="sheetFourResultMap" statementType="PREPARED">select'1.00' B1,'2.00' B4,'3.00' B5,'4.00' B6,'5.00' B7,'6.00' B8,'7.00' B9,'8.00' B10,'9.00' B11,'10.00' B12,'11.00' C5,'12.00' C6,'13.00' C7from dual</select><!-- 5资产负债表 --><resultMap id="sheetFiveResultMap" type="com.sinosoft.utils.PageData"><result column="B5" property="B5"/><result column="B6" property="B6"/><result column="B7" property="B7"/><result column="B8" property="B8"/><result column="B9" property="B9"/><result column="B10" property="B10"/><result column="B11" property="B11"/><result column="B12" property="B12"/><result column="B13" property="B13"/><result column="B14" property="B14"/><result column="B15" property="B15"/><result column="B16" property="B16"/><result column="B17" property="B17"/><result column="B18" property="B18"/><result column="B19" property="B19"/><result column="B20" property="B20"/><result column="B21" property="B21"/><result column="B22" property="B22"/><result column="B23" property="B23"/><result column="B24" property="B24"/><result column="B25" property="B25"/><result column="B26" property="B26"/><result column="C5" property="C5"/><result column="C6" property="C6"/><result column="C7" property="C7"/><result column="C8" property="C8"/><result column="C9" property="C9"/><result column="C10" property="C10"/><result column="C11" property="C11"/><result column="C12" property="C12"/><result column="C13" property="C13"/><result column="C14" property="C14"/><result column="C15" property="C15"/><result column="C16" property="C16"/><result column="C17" property="C17"/><result column="C18" property="C18"/><result column="C19" property="C19"/><result column="C20" property="C20"/><result column="C21" property="C21"/><result column="C22" property="C22"/><result column="C23" property="C23"/><result column="C24" property="C24"/><result column="C25" property="C25"/><result column="C26" property="C26"/><result column="E5" property="E5"/><result column="E6" property="E6"/><result column="E7" property="E7"/><result column="E8" property="E8"/><result column="E9" property="E9"/><result column="E10" property="E10"/><result column="E11" property="E11"/><result column="E12" property="E12"/><result column="E13" property="E13"/><result column="E14" property="E14"/><result column="E15" property="E15"/><result column="E16" property="E16"/><result column="E17" property="E17"/><result column="E18" property="E18"/><result column="E19" property="E19"/><result column="E21" property="E21"/><result column="E22" property="E22"/><result column="E23" property="E23"/><result column="E24" property="E24"/><result column="E26" property="E26"/><result column="F5" property="F5"/><result column="F6" property="F6"/><result column="F7" property="F7"/><result column="F8" property="F8"/><result column="F9" property="F9"/><result column="F10" property="F10"/><result column="F11" property="F11"/><result column="F12" property="F12"/><result column="F13" property="F13"/><result column="F14" property="F14"/><result column="F15" property="F15"/><result column="F16" property="F16"/><result column="F17" property="F17"/><result column="F18" property="F18"/><result column="F19" property="F19"/><result column="F21" property="F21"/><result column="F22" property="F22"/><result column="F23" property="F23"/><result column="F24" property="F24"/><result column="F26" property="F26"/></resultMap><select id="SheetFive" parameterType="pd" resultType="com.sinosoft.utils.PageData" resultMap="sheetFiveResultMap" statementType="PREPARED">SELECT'1' B5,'2' B6,'3' B7,'4' B8,'5' B9,'6' B10,'7' B11,'8' B12,'9' B13,'10' B14,'11' B15,'12' B16,'13' B17,'14' B18,'15' B19,'16' B20,'17' B21,'18' B22,'19' B23,'20' B24,'21' B25,'22' B26,'23' C5,'24' C6,'25' C7,'26' C8,'27' C9,'28' C10,'29' C11,'30' C12,'31' C13,'32' C14,'33' C15,'34' C16,'35' C17,'36' C18,'37' C19,'38' C20,'39' C21,'40' C22,'41' C23,'42' C24,'43' C25,'44' C26,'45' E5,'46' E6,'47' E7,'48' E8,'49' E9,'50' E10,'51' E11,'52' E12,'53' E13,'54' E14,'55' E15,'56' E16,'57' E17,'58' E18,'59' E19,'60' E21,'61' E22,'62' E23,'63' E24,'64' E26,'65' F5,'66' F6,'67' F7,'68' F8,'69' F9,'70' F10,'71' F11,'72' F12,'73' F13,'74' F14,'75' F15,'76' F16,'77' F17,'78' F18,'79' F19,'80' F21,'81' F22,'82' F23,'83' F24,'84' F26FROM dual</select><!-- 6净资产变动表 --><resultMap id="sheetSixResultMap" type="com.sinosoft.utils.PageData"><result column="B2" property="B2"/><result column="B4" property="B4"/><result column="B5" property="B5"/><result column="B6" property="B6"/><result column="B7" property="B7"/><result column="B8" property="B8"/><result column="B9" property="B9"/><result column="B10" property="B10"/><result column="B11" property="B11"/><result column="B12" property="B12"/><result column="B13" property="B13"/><result column="B14" property="B14"/><result column="B15" property="B15"/><result column="B16" property="B16"/><result column="B17" property="B17"/><result column="B18" property="B18"/><result column="B19" property="B19"/><result column="B20" property="B20"/><result column="B21" property="B21"/><result column="C4" property="C4"/><result column="C5" property="C5"/><result column="C6" property="C6"/><result column="C7" property="C7"/><result column="C8" property="C8"/><result column="C9" property="C9"/><result column="C10" property="C10"/><result column="C11" property="C11"/><result column="C12" property="C12"/><result column="C13" property="C13"/><result column="C14" property="C14"/><result column="C15" property="C15"/><result column="C16" property="C16"/><result column="C17" property="C17"/><result column="C18" property="C18"/><result column="C19" property="C19"/><result column="C20" property="C20"/><result column="C21" property="C21"/></resultMap><select id="SheetSix" parameterType="pd" resultType="com.sinosoft.utils.PageData" resultMap="sheetSixResultMap" statementType="PREPARED">select '1' B2,'2' B4,'3' B5,'4' B6,'5' B7,'6' B8,'7' B9,'8' B10,'9' B11,'10' B12,'11' B13,'12' B14,'13' B15,'14' B16,'15' B17,'16' B18,'17' B19,'18' B20,'19' B21,'20' C4,'21' C5,'22' C6,'23' C7,'24' C8,'25' C9,'26' C10,'27' C11,'28' C12,'29' C13,'30' C14,'31' C15,'32' C16,'33' C17,'34' C18,'35' C19,'36' C20,'37' C21from dual</select><!-- 7养老金产品分布 --><resultMap id="sheetSevenResultMap" type="com.sinosoft.utils.PageData"><result column="A0" property="A0"/><result column="A1" property="A1"/><result column="B2" property="B2"/><result column="C3" property="C3"/><result column="D4" property="D4"/><result column="E5" property="E5"/><result column="F6" property="F6"/><result column="G7" property="G7"/><result column="H8" property="H8"/><result column="I9" property="I9"/><result column="J10" property="J10"/><result column="K11" property="K11"/></resultMap><select id="SheetSeven" parameterType="pd" resultType="com.sinosoft.utils.PageData" resultMap="sheetSevenResultMap" statementType="PREPARED">SELECTto_char(row_number() over (order by opc.BEFOREMONEY))  A0, case when (to_char(opc.BEFOREMONEY,'fm9999990.0099'))is null then '-'else  to_char(opc.BEFOREMONEY,'fm9999990.0099') end A1,case when (to_char(opc.payredeemmoney,'fm9999990.0099'))is null then '-'else  to_char(opc.payredeemmoney,'fm9999990.0099') end B2,case when (to_char(opc.aftermoney,'fm9999990.0099'))is null then '-'else  to_char(opc.aftermoney,'fm9999990.0099') end C3,case when (to_char(opc.payredeemmoney,'fm9999990.0099'))is null then '-'else  to_char(opc.payredeemmoney,'fm9999990.0099') end D4,case when (to_char(opc.invconversionmoney,'fm9999990.0099'))is null then '-'else  to_char(opc.invconversionmoney,'fm9999990.0099') end E5,case when (to_char(opc.otherbuyamount,'fm9999990.0099'))is null then '-'else  to_char(opc.otherbuyamount,'fm9999990.0099') end F6,case when (to_char(opc.aftermoney,'fm9999990.0099'))is null then '-'else  to_char(opc.aftermoney,'fm9999990.0099') end G7,case when (to_char(opc.aftermoney,'fm9999990.0099'))is null then '-'else  to_char(opc.aftermoney,'fm9999990.0099') end H8,case when (to_char(opc.payredeemmoney,'fm9999990.0099'))is null then '-'else  to_char(opc.payredeemmoney,'fm9999990.0099') end I9,case when (to_char(opc.invconversionmoney,'fm9999990.0099'))is null then '-'else  to_char(opc.invconversionmoney,'fm9999990.0099') end J10,case when (to_char(opc.otherbuyamount,'fm9999990.0099'))is null then '-'else  to_char(opc.otherbuyamount,'fm9999990.0099') end K11FROM OP_P_CollectDetail opc--where opc.COLLECTSN ='00000000000000000152'WHERE opc.COLLECTSN in ('00000000000000000152','00000000000000000149')UNION ALL SELECT '合计'  A0,'-' A1,'-' B2,'-' C3,'-' D4,' ' E5,case when (to_char(17950878.06,'fm9999999999990.0099'))is null then '-'else  to_char(17950878.06,'fm9999999999990.0099') end F6,'-' G7,'-' H8,' ' I9,case when (to_char(17950878.06,'fm99999999999990.0099'))is null then '-'else  to_char(17950878.06,'fm99999999999990.0099') end J10,case when (to_char(78.06,'fm999990.0099'))is null then '-'else  to_char(78.06,'fm999990.0099') end K11FROM OP_P_CollectDetail opWHERE op.COLLECTSN = '00000000000000000152'</select>
</mapper>

js页面
需要把以下两个参数传到控制器,具体方式这里就不说了,有很多种

modeName:"tuoguanhuizong.xlsx",    //表格模板名
filename:"createLate"             //填充完数据生成一个新的文件名

通过以上代码就能完成读取一个空的模板,然后把数据填充上,使用数据为了演示效果而做,效果如下:


author:su1573

poi读取excel模板,并填充数据相关推荐

  1. 使用POI读取EXCEL模板并填充数据,上传至腾讯云储存桶

    读取EXCEL模板,并填充数据生成文件 前言 一.POI导入 二.具体实现 1.制作我们的模板 2.读取模板来生成新的EXCEL 3.查看生成结果 三,传到腾讯云储存桶里 1.导入COS依赖 2.写个 ...

  2. POI读取Excel模板并导出大量数据

    POI读取Excel模板并导出大量数据 我在使用XSSFWorkbook读取Excel模板并导出大量数据(百万级)时,发现很长时间没有响应,debugger模式发现在读取第三四十万条数据时,程序直接停 ...

  3. poiexcel 读取引用列_java用poi读取Excel表格中的数据

    Java读写Excel的包是Apache POI(项目地址:http://poi.apache.org/),因此需要先获取POI的jar包,本实验使用的是POI 3.9稳定版. Apache POI ...

  4. org.apache.poi往word模板中填充数据(word2003)

    Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能.通过字面意思,我们大概知道这个API是可以用来做 j ...

  5. 若依系统下载固定excel模板并填充数据

    将固定模板放啊都项目路径中 模板样式: 导出方法: @Log(title = "作业底稿", businessType = BusinessType.EXPORT)@PostMap ...

  6. POI读取Excle模板中的数据(增强版)

    修改了Excle兼容性问题,增加了 2007+版的支持 单元格中含有公式,读取公式计算后的值 package com.im.common.utils;import java.io.File; impo ...

  7. poi读取Excel文件中的数据

    代码是不完整的,只为自己留个备份 ,属于传入文件型 <!-- 需要用到的 Jar   -->         <dependency>             <grou ...

  8. Java 读取 Excel 模板,将数据填入Excel表格,后转换为PDF文件(实用)

    持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第12天,点击查看活动详情 昨天写了篇较为粗糙的文章,

  9. python读取excel表格-python读取excel表格中的数据

    使用python语言实现Excel 表格中的数据读取,需要用到xlrd.py模块,实现程序如下: import xlrd #导入xlrd模块 class ExcelData(): def __init ...

最新文章

  1. 【PCL】的五大依赖库及作用
  2. 后台工具screen
  3. Flutter 插件url_launcher简介及使用,打开外部浏览器,拨打电话,发送短信,打开微信,支付宝,qq等
  4. 高通8155车载芯片_WEY来“摩卡”云首秀,搭载高通8155芯片
  5. oralcle中的性能统计基本用法statpack
  6. linux 添加链接与删除链接(ln命令的用法)
  7. matlab+sfm+样例,基于SFM的三维重建MATLAB程序
  8. Java——用户激活邮件工具类
  9. 基于Java的企业新闻管理系统的设计与实现
  10. unity下载官网地址
  11. java扫描器创建,老司机帮您Java 创建条形码扫描器
  12. 大数据技术架构_大数据架构流程图
  13. Java-Mail Java程序发送Email
  14. ORA-00937:不是单组分组函数
  15. 尝遍裸辞各种苦,再也不敢任性裸辞了!
  16. TikTok怎么运营带货
  17. 漫威系列-《复联4》
  18. 起码数学常识凸显中学数学的重大错误0
  19. 家乐福中国独立上市,是苏宁的一颗“定心丸”吗?
  20. 29岁了还一事无成是人生的常态?

热门文章

  1. 好人卡:别让需要你的人觉得你太好
  2. rpg服务器怎么修改重生点,DOTA2重生游戏设置 如何玩自定义RPG游戏
  3. 修改我的文档和临时文件夹temp的位置及系统优化知识
  4. [CF643F]Bears and Juice
  5. Unity 支持的模型格式及详细介绍
  6. 项目管理——产品开发各角色职能及技能要求
  7. Java 盖伦大战贾克斯~我的第一个java程序
  8. java 生成 二维码
  9. Android平台下二维码漏洞攻击杂谈
  10. 苏州网站优化小技巧分享-关键词@运营猫工具箱