1、ExportUtil导出工具类(根据模板导出),支持2003/2007不同excel格式文件
- package org.nercita.bcp.util;
- import java.io.FileInputStream;
- import java.io.IOException;
- import java.io.InputStream;
- import java.net.URLEncoder;
- import java.util.Iterator;
- import java.util.List;
- import java.util.Map;
- import java.util.Properties;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import net.sf.jxls.transformer.XLSTransformer;
- import org.apache.commons.io.IOUtils;
- import org.apache.commons.lang.StringUtils;
- import org.apache.poi.hssf.usermodel.HSSFCellStyle;
- import org.apache.poi.hssf.usermodel.HSSFFont;
- import org.apache.poi.hssf.usermodel.HSSFWorkbook;
- import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
- import org.apache.poi.ss.usermodel.Cell;
- import org.apache.poi.ss.usermodel.Row;
- import org.apache.poi.ss.usermodel.Sheet;
- import org.apache.poi.ss.usermodel.Workbook;
- import org.apache.poi.ss.util.CellRangeAddress;
- import org.apache.poi.xssf.usermodel.XSSFCellStyle;
- import org.apache.poi.xssf.usermodel.XSSFFont;
- import org.apache.poi.xssf.usermodel.XSSFWorkbook;
- import org.springframework.core.io.ClassPathResource;
- import org.springframework.util.Assert;
- /**
- * 导出工具类
- */
- public class ExportUtil {
- public static String EXCEL_2007 = “Excel2007”;
- public static String EXCEL_2003 = “Excel2003”;
- private volatile Properties props = new Properties();
- private boolean inited = false;
- private volatile static ExportUtil util = new ExportUtil();
- private ExportUtil() {
- init();
- }
- public Properties getProps() {
- if (!inited)
- init();
- return props;
- }
- public String getProp(String key) {
- if (!inited)
- init();
- return props.getProperty(key);
- }
- public String getProp(String key, String defaultValue) {
- if (!inited)
- init();
- return props.getProperty(key, defaultValue);
- }
- private void init() {
- try {
- InputStream is = new ClassPathResource(“export.properties”).getInputStream();
- props.load(is);
- is.close();
- inited = true;
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- public static ExportUtil getUtil() {
- if (util == null)
- util = new ExportUtil();
- return util;
- }
- /**
- * 设置下载文件中文件的名称
- *
- * @param pFileName
- * @param request
- * @return
- */
- public static String encodeFilename(String pFileName, HttpServletRequest request){
- String filename = null;
- String agent = request.getHeader(“USER-AGENT”);
- try {
- if (null != agent){
- if (-1 != agent.indexOf(“Firefox”)) {//Firefox
- filename = “=?UTF-8?B?” + (new String(org.apache.commons.codec.binary.Base64.encodeBase64(pFileName.getBytes(“UTF-8”))))+ ”?=”;
- }else if (-1 != agent.indexOf(“Chrome”)) {//Chrome
- filename = new String(pFileName.getBytes(), “ISO8859-1”);
- } else {//IE7+
- filename = URLEncoder.encode(pFileName, “UTF-8”);
- filename = StringUtils.replace(filename, ”+”, ”%20”);//替换空格
- }
- } else {
- filename = pFileName;
- }
- } catch (Exception ex) {
- }
- return filename;
- }
- //导出
- public static void writeResponse(String fileName, HttpServletRequest request, HttpServletResponse response,
- String version, String templatePath, Map<String, Object> beanParams,Map<Integer,List<CellFill>> mapFill) {
- writeResponse(fileName, request, response, version, templatePath, beanParams, false, null, null, mapFill);
- }
- public static void writeResponse(String fileName, HttpServletRequest request, HttpServletResponse response,
- String version, String templatePath, Map<String, Object> beanParams) {
- writeResponse(fileName, request, response, version, templatePath, beanParams, false, null, null, null);
- }
- public static void writeResponse(String fileName, HttpServletRequest request, HttpServletResponse response, String version, String templatePath, Map<String, Object> beanParams,
- boolean innerCollectionAccess) {
- writeResponse(fileName, request, response, version, templatePath, beanParams, innerCollectionAccess, null, null, null);
- }
- public static void writeResponse(String fileName, HttpServletRequest request, HttpServletResponse response, String version, String templatePath, Map<String, Object> beanParams,
- boolean innerCollectionAccess, Map<Integer, List<CellRangeAddress>> rangeMap) {
- writeResponse(fileName, request, response, version, templatePath, beanParams, innerCollectionAccess, rangeMap, null, null);
- }
- public static void writeResponse(String fileName, HttpServletRequest request, HttpServletResponse response, String version, String templatePath, Map<String, Object> beanParams,
- Map<Integer, List<CellRangeAddress>> rangeMap, XLSTransformer transformer) {
- writeResponse(fileName, request, response, version, templatePath, beanParams, false, rangeMap, transformer, null);
- }
- //
- public static void writeResponse(String fileName, HttpServletRequest request, HttpServletResponse response,
- String version, String templatePath, Map<String, Object> beanParams,
- boolean innerCollectionAccess, Map<Integer, List<CellRangeAddress>> rangeMap, XLSTransformer trans,
- Map<Integer,List<CellFill>> mapFill) {
- Assert.isTrue(StringUtils.isNotBlank(templatePath), “templatePath不可以为空字符串”);
- XLSTransformer transformer = null;
- if (trans != null) {
- transformer = trans;
- } else {
- transformer = new XLSTransformer();
- }
- transformer.setJexlInnerCollectionsAccess(innerCollectionAccess);
- response.setCharacterEncoding(“utf-8”);
- if (EXCEL_2007.equals(version)) {
- fileName = encodeFilename(fileName + ”.xlsx”, request);
- response.setContentType(“application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8”);
- } else {
- fileName = encodeFilename(fileName + ”.xls”, request);
- response.setContentType(“application/vnd.ms-excel;charset=UTF-8”);
- }
- response.setHeader(“Content-Disposition”, “attachment;fileName=” + fileName);
- InputStream is = null;
- try {
- if(“linux”.equals(System.getProperty(“os.name”).toLowerCase())){
- if(!templatePath.startsWith(“/”)){
- templatePath=“/”+templatePath;
- }
- }
- is = new FileInputStream(templatePath);
- Workbook book = transformer.transformXLS(is, beanParams);
- if (rangeMap != null) {
- Iterator<Integer> index = rangeMap.keySet().iterator();
- while (index.hasNext()) {
- Integer i = index.next();
- Sheet sheet = book.getSheetAt(i);
- Iterator<CellRangeAddress> cra = rangeMap.get(i).iterator();
- while (cra.hasNext()) {
- sheet.addMergedRegion(cra.next());
- }
- }
- }
- //==========填充颜色,add by psh
- if(mapFill!=null) {
- if (EXCEL_2003.equals(version)) {
- HSSFWorkbook workbook=(HSSFWorkbook)book;
- Iterator<Integer> sheetIndex = mapFill.keySet().iterator();
- while (sheetIndex.hasNext()) {
- Integer index = sheetIndex.next();
- Sheet sheet = workbook.getSheetAt(index);
- List<CellFill> list = mapFill.get(index);
- CellFill cellFill= null;
- for(int i=0;i<list.size();i++){
- cellFill= list.get(i);
- Row row = (Row)sheet.getRow(cellFill.getRow());
- if(row==null){
- continue;
- }
- Cell cell = row.getCell(cellFill.getCol());
- if(cell==null){
- continue;
- }
- HSSFCellStyle sheetStyle = workbook.createCellStyle(); //Sheet样式
- sheetStyle.setFillPattern(XSSFCellStyle.SOLID_FOREGROUND); //填充模式
- sheetStyle.setFillForegroundColor(cellFill.getBgColor()); //前景色(单元格)的设定。HSSFColor.YELLOW.index——黄色
- HSSFFont font=workbook.createFont();
- font.setColor(cellFill.getFontColor());
- sheetStyle.setFont(font);
- cell.setCellStyle(sheetStyle);
- }
- }//end while
- }else {
- XSSFWorkbook workbook=(XSSFWorkbook)book;
- Iterator<Integer> sheetIndex = mapFill.keySet().iterator();
- while (sheetIndex.hasNext()) {
- Integer index = sheetIndex.next();
- Sheet sheet = workbook.getSheetAt(index);
- List<CellFill> list = mapFill.get(index);
- CellFill cellFill= null;
- for(int i=0;i<list.size();i++){
- cellFill= list.get(i);
- Row row = (Row)sheet.getRow(cellFill.getRow());
- if(row==null){
- continue;
- }
- Cell cell = row.getCell(cellFill.getCol());
- if(cell==null){
- continue;
- }
- XSSFCellStyle sheetStyle = workbook.createCellStyle(); //Sheet样式
- sheetStyle.setFillPattern(XSSFCellStyle.SOLID_FOREGROUND); //填充模式
- sheetStyle.setFillForegroundColor(cellFill.getBgColor()); //前景色(单元格)的设定。HSSFColor.YELLOW.index——黄色
- XSSFFont font=workbook.createFont();
- font.setColor(cellFill.getFontColor());
- sheetStyle.setFont(font);
- cell.setCellStyle(sheetStyle);
- }
- }//end while
- } //end 2007
- }
- //=====end 颜色===========
- book.write(response.getOutputStream());
- } catch (IOException e) {
- e.printStackTrace();
- } catch (InvalidFormatException e) {
- e.printStackTrace();
- } finally {
- IOUtils.closeQuietly(is);
- }
- }
- public static String getProperty(String property) {
- return getUtil().getProp(property);
- }
- }
package org.nercita.bcp.util; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.net.URLEncoder; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Properties; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import net.sf.jxls.transformer.XLSTransformer; import org.apache.commons.io.IOUtils; import org.apache.commons.lang.StringUtils; import org.apache.poi.hssf.usermodel.HSSFCellStyle; import org.apache.poi.hssf.usermodel.HSSFFont; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.openxml4j.exceptions.InvalidFormatException; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.ss.util.CellRangeAddress; import org.apache.poi.xssf.usermodel.XSSFCellStyle; import org.apache.poi.xssf.usermodel.XSSFFont; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.springframework.core.io.ClassPathResource; import org.springframework.util.Assert; /** * 导出工具类 */ public class ExportUtil { public static String EXCEL_2007 = "Excel2007"; public static String EXCEL_2003 = "Excel2003"; private volatile Properties props = new Properties(); private boolean inited = false; private volatile static ExportUtil util = new ExportUtil(); private ExportUtil() { init(); } public Properties getProps() { if (!inited) init(); return props; } public String getProp(String key) { if (!inited) init(); return props.getProperty(key); } public String getProp(String key, String defaultValue) { if (!inited) init(); return props.getProperty(key, defaultValue); } private void init() { try { InputStream is = new ClassPathResource("export.properties").getInputStream(); props.load(is); is.close(); inited = true; } catch (IOException e) { e.printStackTrace(); } } public static ExportUtil getUtil() { if (util == null) util = new ExportUtil(); return util; } /** * 设置下载文件中文件的名称 * * @param pFileName * @param request * @return */ public static String encodeFilename(String pFileName, HttpServletRequest request){ String filename = null; String agent = request.getHeader("USER-AGENT"); try { if (null != agent){ if (-1 != agent.indexOf("Firefox")) {//Firefox filename = "=?UTF-8?B?" + (new String(org.apache.commons.codec.binary.Base64.encodeBase64(pFileName.getBytes("UTF-8"))))+ "?="; }else if (-1 != agent.indexOf("Chrome")) {//Chrome filename = new String(pFileName.getBytes(), "ISO8859-1"); } else {//IE7+ filename = URLEncoder.encode(pFileName, "UTF-8"); filename = StringUtils.replace(filename, "+", "%20");//替换空格 } } else { filename = pFileName; } } catch (Exception ex) { } return filename; } //导出 public static void writeResponse(String fileName, HttpServletRequest request, HttpServletResponse response, String version, String templatePath, Map<String, Object> beanParams,Map<Integer,List<CellFill>> mapFill) { writeResponse(fileName, request, response, version, templatePath, beanParams, false, null, null, mapFill); } public static void writeResponse(String fileName, HttpServletRequest request, HttpServletResponse response, String version, String templatePath, Map<String, Object> beanParams) { writeResponse(fileName, request, response, version, templatePath, beanParams, false, null, null, null); } public static void writeResponse(String fileName, HttpServletRequest request, HttpServletResponse response, String version, String templatePath, Map<String, Object> beanParams, boolean innerCollectionAccess) { writeResponse(fileName, request, response, version, templatePath, beanParams, innerCollectionAccess, null, null, null); } public static void writeResponse(String fileName, HttpServletRequest request, HttpServletResponse response, String version, String templatePath, Map<String, Object> beanParams, boolean innerCollectionAccess, Map<Integer, List<CellRangeAddress>> rangeMap) { writeResponse(fileName, request, response, version, templatePath, beanParams, innerCollectionAccess, rangeMap, null, null); } public static void writeResponse(String fileName, HttpServletRequest request, HttpServletResponse response, String version, String templatePath, Map<String, Object> beanParams, Map<Integer, List<CellRangeAddress>> rangeMap, XLSTransformer transformer) { writeResponse(fileName, request, response, version, templatePath, beanParams, false, rangeMap, transformer, null); } // public static void writeResponse(String fileName, HttpServletRequest request, HttpServletResponse response, String version, String templatePath, Map<String, Object> beanParams, boolean innerCollectionAccess, Map<Integer, List<CellRangeAddress>> rangeMap, XLSTransformer trans, Map<Integer,List<CellFill>> mapFill) { Assert.isTrue(StringUtils.isNotBlank(templatePath), "templatePath不可以为空字符串"); XLSTransformer transformer = null; if (trans != null) { transformer = trans; } else { transformer = new XLSTransformer(); } transformer.setJexlInnerCollectionsAccess(innerCollectionAccess); response.setCharacterEncoding("utf-8"); if (EXCEL_2007.equals(version)) { fileName = encodeFilename(fileName + ".xlsx", request); response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8"); } else { fileName = encodeFilename(fileName + ".xls", request); response.setContentType("application/vnd.ms-excel;charset=UTF-8"); } response.setHeader("Content-Disposition", "attachment;fileName=" + fileName); InputStream is = null; try { if("linux".equals(System.getProperty("os.name").toLowerCase())){ if(!templatePath.startsWith("/")){ templatePath="/"+templatePath; } } is = new FileInputStream(templatePath); Workbook book = transformer.transformXLS(is, beanParams); if (rangeMap != null) { Iterator<Integer> index = rangeMap.keySet().iterator(); while (index.hasNext()) { Integer i = index.next(); Sheet sheet = book.getSheetAt(i); Iterator<CellRangeAddress> cra = rangeMap.get(i).iterator(); while (cra.hasNext()) { sheet.addMergedRegion(cra.next()); } } } //==========填充颜色,add by psh if(mapFill!=null) { if (EXCEL_2003.equals(version)) { HSSFWorkbook workbook=(HSSFWorkbook)book; Iterator<Integer> sheetIndex = mapFill.keySet().iterator(); while (sheetIndex.hasNext()) { Integer index = sheetIndex.next(); Sheet sheet = workbook.getSheetAt(index); List<CellFill> list = mapFill.get(index); CellFill cellFill= null; for(int i=0;i<list.size();i++){ cellFill= list.get(i); Row row = (Row)sheet.getRow(cellFill.getRow()); if(row==null){ continue; } Cell cell = row.getCell(cellFill.getCol()); if(cell==null){ continue; } HSSFCellStyle sheetStyle = workbook.createCellStyle(); //Sheet样式 sheetStyle.setFillPattern(XSSFCellStyle.SOLID_FOREGROUND); //填充模式 sheetStyle.setFillForegroundColor(cellFill.getBgColor()); //前景色(单元格)的设定。HSSFColor.YELLOW.index——黄色 HSSFFont font=workbook.createFont(); font.setColor(cellFill.getFontColor()); sheetStyle.setFont(font); cell.setCellStyle(sheetStyle); } }//end while }else { XSSFWorkbook workbook=(XSSFWorkbook)book; Iterator<Integer> sheetIndex = mapFill.keySet().iterator(); while (sheetIndex.hasNext()) { Integer index = sheetIndex.next(); Sheet sheet = workbook.getSheetAt(index); List<CellFill> list = mapFill.get(index); CellFill cellFill= null; for(int i=0;i<list.size();i++){ cellFill= list.get(i); Row row = (Row)sheet.getRow(cellFill.getRow()); if(row==null){ continue; } Cell cell = row.getCell(cellFill.getCol()); if(cell==null){ continue; } XSSFCellStyle sheetStyle = workbook.createCellStyle(); //Sheet样式 sheetStyle.setFillPattern(XSSFCellStyle.SOLID_FOREGROUND); //填充模式 sheetStyle.setFillForegroundColor(cellFill.getBgColor()); //前景色(单元格)的设定。HSSFColor.YELLOW.index——黄色 XSSFFont font=workbook.createFont(); font.setColor(cellFill.getFontColor()); sheetStyle.setFont(font); cell.setCellStyle(sheetStyle); } }//end while } //end 2007 } //=====end 颜色=========== book.write(response.getOutputStream()); } catch (IOException e) { e.printStackTrace(); } catch (InvalidFormatException e) { e.printStackTrace(); } finally { IOUtils.closeQuietly(is); } } public static String getProperty(String property) { return getUtil().getProp(property); } }
2、ImportUtil.java工具类,支持2003和2007不同格式excel文件。
- package org.nercita.bcp.util;
- import java.io.FileNotFoundException;
- import java.io.IOException;
- import java.io.InputStream;
- import java.text.DecimalFormat;
- import java.text.SimpleDateFormat;
- import java.util.ArrayList;
- import java.util.Arrays;
- import java.util.Date;
- import java.util.List;
- import org.apache.poi.hssf.usermodel.HSSFCell;
- import org.apache.poi.hssf.usermodel.HSSFDateUtil;
- import org.apache.poi.hssf.usermodel.HSSFWorkbook;
- import org.apache.poi.ss.usermodel.Cell;
- import org.apache.poi.ss.usermodel.Row;
- import org.apache.poi.ss.usermodel.Sheet;
- import org.apache.poi.ss.usermodel.Workbook;
- import org.apache.poi.xssf.usermodel.XSSFWorkbook;
- import org.springframework.web.multipart.MultipartFile;
- /**
- * excel文件导入工具类
- */
- public class ImportUtil {
- public static String EXCEL_2007_ContentType = “application/vnd.openxmlformats-officedocument.spreadsheetml.sheet”;
- public static String EXCEL_2003_ContentType = “application/vnd.ms-excel”;
- /**
- * excel文件导入
- * @param file
- * @param ignoreRows 需要忽略掉的行数
- * @return
- * @throws FileNotFoundException
- * @throws IOException
- */
- public static String[][] importFile(MultipartFile file, int ignoreRows) throws FileNotFoundException, IOException {
- List<String[]> result = new ArrayList<String[]>();
- String contentType = file.getContentType(); //内容类型
- InputStream stream = file.getInputStream(); //输入流
- Workbook wb=null;
- //根据inputStream建立一个Excel对象
- if (EXCEL_2003_ContentType.equals(contentType)){
- wb =(Workbook) new HSSFWorkbook(stream); //2003
- }else if(EXCEL_2007_ContentType.equals(contentType)) {
- wb =(Workbook) new XSSFWorkbook(stream); //2007
- }
- int rowSize = 0;
- Cell cell = null;
- for (int sheetIndex = 0; sheetIndex < wb.getNumberOfSheets(); sheetIndex++) {
- Sheet st = wb.getSheetAt(sheetIndex);
- for (int rowIndex = ignoreRows; rowIndex <= st.getLastRowNum(); rowIndex++) {
- Row row = st.getRow(rowIndex);
- if (null == row) {
- continue;
- }
- int tempRowSize = row.getLastCellNum() + 1;
- if (tempRowSize > rowSize) {
- rowSize = tempRowSize;
- }
- String[] values = new String[rowSize];
- Arrays.fill(values, ”“);
- boolean hasValue = false;
- for (short columnIndex = 0; columnIndex <= row.getLastCellNum(); columnIndex++) {
- String value = “”;
- cell = row.getCell(columnIndex);
- if (null != cell) {
- switch (cell.getCellType()) {
- case HSSFCell.CELL_TYPE_STRING:
- value = cell.getStringCellValue();
- break;
- case HSSFCell.CELL_TYPE_NUMERIC:
- if (HSSFDateUtil.isCellDateFormatted(cell)) {
- Date date = cell.getDateCellValue();
- if (null != date) {
- value = new SimpleDateFormat(“yyyy-MM-dd”).format(date);
- } else {
- value = “”;
- }
- } else {
- DecimalFormat df = new DecimalFormat(“0.#######”);
- //value = df.format(cell.getNumericCellValue());
- value = String.valueOf(df.format(cell.getNumericCellValue()));
- }
- break;
- case HSSFCell.CELL_TYPE_FORMULA:
- // 公式生成的数据
- if (!”“.equals(cell.getStringCellValue())) {
- value = cell.getStringCellValue();
- } else {
- value = cell.getNumericCellValue() + ”“;
- }
- break;
- case HSSFCell.CELL_TYPE_BLANK:
- break;
- case HSSFCell.CELL_TYPE_ERROR:
- value = “”;
- break;
- case HSSFCell.CELL_TYPE_BOOLEAN:
- value = (cell.getBooleanCellValue() == true ? “Y” : “N”);
- break;
- default:
- value = “”;
- }
- }
- if (columnIndex == 0 && value.trim().equals(“”)) {
- break;
- }
- values[columnIndex] = rightTrim(value);
- hasValue = true;
- }
- if (hasValue) {
- result.add(values);
- }
- }
- }
- stream.close();
- String[][] returnArray = new String[result.size()][rowSize];
- for (int i = 0; i < returnArray.length; i++) {
- returnArray[i] = (String[]) result.get(i);
- }
- return returnArray;
- }
- /**
- * excel文件导入
- * @param file
- * @param ignoreRows 需要忽略掉的行数
- * @return
- * @throws FileNotFoundException
- * @throws IOException
- */
- public static String[][] importFile(MultipartFile file,int sheetIndex, int ignoreRows,Integer colCnt) throws FileNotFoundException, IOException {
- List<String[]> result = new ArrayList<String[]>();
- String contentType = file.getContentType(); //内容类型
- InputStream stream = file.getInputStream(); //输入流
- Workbook wb=null;
- //根据inputStream建立一个Excel对象
- if (EXCEL_2003_ContentType.equals(contentType)){
- wb =(Workbook) new HSSFWorkbook(stream); //2003
- }else if(EXCEL_2007_ContentType.equals(contentType)) {
- wb =(Workbook) new XSSFWorkbook(stream); //2007
- }
- int rowSize = 0;
- Cell cell = null;
- Sheet st = wb.getSheetAt(sheetIndex);
- for (int rowIndex = ignoreRows; rowIndex <= st.getLastRowNum(); rowIndex++) {
- Row row = st.getRow(rowIndex);
- if (null == row) {
- continue;
- }
- // int tempRowSize = row.getLastCellNum() + 1;
- int tempRowSize = row.getPhysicalNumberOfCells();
- if(colCnt==null){
- if (tempRowSize > rowSize) {
- rowSize = tempRowSize;
- }
- colCnt=rowSize;
- }
- String[] values = new String[colCnt];
- Arrays.fill(values, ”“);
- boolean hasValue = false;
- for (short columnIndex = 0; columnIndex < colCnt; columnIndex++) {
- String value = “”;
- cell = row.getCell(columnIndex);
- if (null != cell) {
- switch (cell.getCellType()) {
- case HSSFCell.CELL_TYPE_STRING:
- value = cell.getStringCellValue();
- break;
- case HSSFCell.CELL_TYPE_NUMERIC:
- if (HSSFDateUtil.isCellDateFormatted(cell)) {
- Date date = cell.getDateCellValue();
- if (null != date) {
- value = new SimpleDateFormat(“yyyy-MM-dd”).format(date);
- } else {
- value = “”;
- }
- } else {
- DecimalFormat df = new DecimalFormat(“0.#######”);
- //value = df.format(cell.getNumericCellValue());
- value = String.valueOf(df.format(cell.getNumericCellValue()));
- }
- break;
- case HSSFCell.CELL_TYPE_FORMULA:
- // 公式生成的数据
- if (!”“.equals(cell.getStringCellValue())) {
- value = cell.getStringCellValue();
- } else {
- value = cell.getNumericCellValue() + ”“;
- }
- break;
- case HSSFCell.CELL_TYPE_BLANK:
- break;
- case HSSFCell.CELL_TYPE_ERROR:
- value = “”;
- break;
- case HSSFCell.CELL_TYPE_BOOLEAN:
- value = (cell.getBooleanCellValue() == true ? “Y” : “N”);
- break;
- default:
- value = “”;
- }
- }
- if (columnIndex == 0 && value.trim().equals(“”)) {
- break;
- }
- values[columnIndex] = rightTrim(value);
- hasValue = true;
- }
- if (hasValue) {
- result.add(values);
- }
- }
- stream.close();
- String[][] returnArray = new String[result.size()][colCnt];
- for (int i = 0; i < returnArray.length; i++) {
- returnArray[i] = (String[]) result.get(i);
- }
- return returnArray;
- }
- /**
- * 去除字符串右侧空格(直接使用trim()将不能支持中间存在空格的单元格)
- * @param str
- * @return
- */
- public static String rightTrim(String str) {
- if (str == null) {
- return ”“;
- }
- int length = str.length();
- for (int i = length - 1; i >= 0; i–) {
- if (0x20 != str.charAt(i)) {
- break;
- }
- length–;
- }
- return str.substring(0, length);
- }
- }
package org.nercita.bcp.util; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.text.DecimalFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Arrays; import java.util.Date; import java.util.List; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFDateUtil; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.springframework.web.multipart.MultipartFile; /** * excel文件导入工具类 */ public class ImportUtil { public static String EXCEL_2007_ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; public static String EXCEL_2003_ContentType = "application/vnd.ms-excel"; /** * excel文件导入 * @param file * @param ignoreRows 需要忽略掉的行数 * @return * @throws FileNotFoundException * @throws IOException */ public static String[][] importFile(MultipartFile file, int ignoreRows) throws FileNotFoundException, IOException { List<String[]> result = new ArrayList<String[]>(); String contentType = file.getContentType(); //内容类型 InputStream stream = file.getInputStream(); //输入流 Workbook wb=null; //根据inputStream建立一个Excel对象 if (EXCEL_2003_ContentType.equals(contentType)){ wb =(Workbook) new HSSFWorkbook(stream); //2003 }else if(EXCEL_2007_ContentType.equals(contentType)) { wb =(Workbook) new XSSFWorkbook(stream); //2007 } int rowSize = 0; Cell cell = null; for (int sheetIndex = 0; sheetIndex < wb.getNumberOfSheets(); sheetIndex++) { Sheet st = wb.getSheetAt(sheetIndex); for (int rowIndex = ignoreRows; rowIndex <= st.getLastRowNum(); rowIndex++) { Row row = st.getRow(rowIndex); if (null == row) { continue; } int tempRowSize = row.getLastCellNum() + 1; if (tempRowSize > rowSize) { rowSize = tempRowSize; } String[] values = new String[rowSize]; Arrays.fill(values, ""); boolean hasValue = false; for (short columnIndex = 0; columnIndex <= row.getLastCellNum(); columnIndex++) { String value = ""; cell = row.getCell(columnIndex); if (null != cell) { switch (cell.getCellType()) { case HSSFCell.CELL_TYPE_STRING: value = cell.getStringCellValue(); break; case HSSFCell.CELL_TYPE_NUMERIC: if (HSSFDateUtil.isCellDateFormatted(cell)) { Date date = cell.getDateCellValue(); if (null != date) { value = new SimpleDateFormat("yyyy-MM-dd").format(date); } else { value = ""; } } else { DecimalFormat df = new DecimalFormat("0.#######"); //value = df.format(cell.getNumericCellValue()); value = String.valueOf(df.format(cell.getNumericCellValue())); } break; case HSSFCell.CELL_TYPE_FORMULA: // 公式生成的数据 if (!"".equals(cell.getStringCellValue())) { value = cell.getStringCellValue(); } else { value = cell.getNumericCellValue() + ""; } break; case HSSFCell.CELL_TYPE_BLANK: break; case HSSFCell.CELL_TYPE_ERROR: value = ""; break; case HSSFCell.CELL_TYPE_BOOLEAN: value = (cell.getBooleanCellValue() == true ? "Y" : "N"); break; default: value = ""; } } if (columnIndex == 0 && value.trim().equals("")) { break; } values[columnIndex] = rightTrim(value); hasValue = true; } if (hasValue) { result.add(values); } } } stream.close(); String[][] returnArray = new String[result.size()][rowSize]; for (int i = 0; i < returnArray.length; i++) { returnArray[i] = (String[]) result.get(i); } return returnArray; } /** * excel文件导入 * @param file * @param ignoreRows 需要忽略掉的行数 * @return * @throws FileNotFoundException * @throws IOException */ public static String[][] importFile(MultipartFile file,int sheetIndex, int ignoreRows,Integer colCnt) throws FileNotFoundException, IOException { List<String[]> result = new ArrayList<String[]>(); String contentType = file.getContentType(); //内容类型 InputStream stream = file.getInputStream(); //输入流 Workbook wb=null; //根据inputStream建立一个Excel对象 if (EXCEL_2003_ContentType.equals(contentType)){ wb =(Workbook) new HSSFWorkbook(stream); //2003 }else if(EXCEL_2007_ContentType.equals(contentType)) { wb =(Workbook) new XSSFWorkbook(stream); //2007 } int rowSize = 0; Cell cell = null; Sheet st = wb.getSheetAt(sheetIndex); for (int rowIndex = ignoreRows; rowIndex <= st.getLastRowNum(); rowIndex++) { Row row = st.getRow(rowIndex); if (null == row) { continue; } // int tempRowSize = row.getLastCellNum() + 1; int tempRowSize = row.getPhysicalNumberOfCells(); if(colCnt==null){ if (tempRowSize > rowSize) { rowSize = tempRowSize; } colCnt=rowSize; } String[] values = new String[colCnt]; Arrays.fill(values, ""); boolean hasValue = false; for (short columnIndex = 0; columnIndex < colCnt; columnIndex++) { String value = ""; cell = row.getCell(columnIndex); if (null != cell) { switch (cell.getCellType()) { case HSSFCell.CELL_TYPE_STRING: value = cell.getStringCellValue(); break; case HSSFCell.CELL_TYPE_NUMERIC: if (HSSFDateUtil.isCellDateFormatted(cell)) { Date date = cell.getDateCellValue(); if (null != date) { value = new SimpleDateFormat("yyyy-MM-dd").format(date); } else { value = ""; } } else { DecimalFormat df = new DecimalFormat("0.#######"); //value = df.format(cell.getNumericCellValue()); value = String.valueOf(df.format(cell.getNumericCellValue())); } break; case HSSFCell.CELL_TYPE_FORMULA: // 公式生成的数据 if (!"".equals(cell.getStringCellValue())) { value = cell.getStringCellValue(); } else { value = cell.getNumericCellValue() + ""; } break; case HSSFCell.CELL_TYPE_BLANK: break; case HSSFCell.CELL_TYPE_ERROR: value = ""; break; case HSSFCell.CELL_TYPE_BOOLEAN: value = (cell.getBooleanCellValue() == true ? "Y" : "N"); break; default: value = ""; } } if (columnIndex == 0 && value.trim().equals("")) { break; } values[columnIndex] = rightTrim(value); hasValue = true; } if (hasValue) { result.add(values); } } stream.close(); String[][] returnArray = new String[result.size()][colCnt]; for (int i = 0; i < returnArray.length; i++) { returnArray[i] = (String[]) result.get(i); } return returnArray; } /** * 去除字符串右侧空格(直接使用trim()将不能支持中间存在空格的单元格) * @param str * @return */ public static String rightTrim(String str) { if (str == null) { return ""; } int length = str.length(); for (int i = length - 1; i >= 0; i--) { if (0x20 != str.charAt(i)) { break; } length--; } return str.substring(0, length); } }
1、ExportUtil导出工具类(根据模板导出),支持2003/2007不同excel格式文件
- package org.nercita.bcp.util;
- import java.io.FileInputStream;
- import java.io.IOException;
- import java.io.InputStream;
- import java.net.URLEncoder;
- import java.util.Iterator;
- import java.util.List;
- import java.util.Map;
- import java.util.Properties;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import net.sf.jxls.transformer.XLSTransformer;
- import org.apache.commons.io.IOUtils;
- import org.apache.commons.lang.StringUtils;
- import org.apache.poi.hssf.usermodel.HSSFCellStyle;
- import org.apache.poi.hssf.usermodel.HSSFFont;
- import org.apache.poi.hssf.usermodel.HSSFWorkbook;
- import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
- import org.apache.poi.ss.usermodel.Cell;
- import org.apache.poi.ss.usermodel.Row;
- import org.apache.poi.ss.usermodel.Sheet;
- import org.apache.poi.ss.usermodel.Workbook;
- import org.apache.poi.ss.util.CellRangeAddress;
- import org.apache.poi.xssf.usermodel.XSSFCellStyle;
- import org.apache.poi.xssf.usermodel.XSSFFont;
- import org.apache.poi.xssf.usermodel.XSSFWorkbook;
- import org.springframework.core.io.ClassPathResource;
- import org.springframework.util.Assert;
- /**
- * 导出工具类
- */
- public class ExportUtil {
- public static String EXCEL_2007 = “Excel2007”;
- public static String EXCEL_2003 = “Excel2003”;
- private volatile Properties props = new Properties();
- private boolean inited = false;
- private volatile static ExportUtil util = new ExportUtil();
- private ExportUtil() {
- init();
- }
- public Properties getProps() {
- if (!inited)
- init();
- return props;
- }
- public String getProp(String key) {
- if (!inited)
- init();
- return props.getProperty(key);
- }
- public String getProp(String key, String defaultValue) {
- if (!inited)
- init();
- return props.getProperty(key, defaultValue);
- }
- private void init() {
- try {
- InputStream is = new ClassPathResource(“export.properties”).getInputStream();
- props.load(is);
- is.close();
- inited = true;
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- public static ExportUtil getUtil() {
- if (util == null)
- util = new ExportUtil();
- return util;
- }
- /**
- * 设置下载文件中文件的名称
- *
- * @param pFileName
- * @param request
- * @return
- */
- public static String encodeFilename(String pFileName, HttpServletRequest request){
- String filename = null;
- String agent = request.getHeader(“USER-AGENT”);
- try {
- if (null != agent){
- if (-1 != agent.indexOf(“Firefox”)) {//Firefox
- filename = “=?UTF-8?B?” + (new String(org.apache.commons.codec.binary.Base64.encodeBase64(pFileName.getBytes(“UTF-8”))))+ ”?=”;
- }else if (-1 != agent.indexOf(“Chrome”)) {//Chrome
- filename = new String(pFileName.getBytes(), “ISO8859-1”);
- } else {//IE7+
- filename = URLEncoder.encode(pFileName, “UTF-8”);
- filename = StringUtils.replace(filename, ”+”, ”%20”);//替换空格
- }
- } else {
- filename = pFileName;
- }
- } catch (Exception ex) {
- }
- return filename;
- }
- //导出
- public static void writeResponse(String fileName, HttpServletRequest request, HttpServletResponse response,
- String version, String templatePath, Map<String, Object> beanParams,Map<Integer,List<CellFill>> mapFill) {
- writeResponse(fileName, request, response, version, templatePath, beanParams, false, null, null, mapFill);
- }
- public static void writeResponse(String fileName, HttpServletRequest request, HttpServletResponse response,
- String version, String templatePath, Map<String, Object> beanParams) {
- writeResponse(fileName, request, response, version, templatePath, beanParams, false, null, null, null);
- }
- public static void writeResponse(String fileName, HttpServletRequest request, HttpServletResponse response, String version, String templatePath, Map<String, Object> beanParams,
- boolean innerCollectionAccess) {
- writeResponse(fileName, request, response, version, templatePath, beanParams, innerCollectionAccess, null, null, null);
- }
- public static void writeResponse(String fileName, HttpServletRequest request, HttpServletResponse response, String version, String templatePath, Map<String, Object> beanParams,
- boolean innerCollectionAccess, Map<Integer, List<CellRangeAddress>> rangeMap) {
- writeResponse(fileName, request, response, version, templatePath, beanParams, innerCollectionAccess, rangeMap, null, null);
- }
- public static void writeResponse(String fileName, HttpServletRequest request, HttpServletResponse response, String version, String templatePath, Map<String, Object> beanParams,
- Map<Integer, List<CellRangeAddress>> rangeMap, XLSTransformer transformer) {
- writeResponse(fileName, request, response, version, templatePath, beanParams, false, rangeMap, transformer, null);
- }
- //
- public static void writeResponse(String fileName, HttpServletRequest request, HttpServletResponse response,
- String version, String templatePath, Map<String, Object> beanParams,
- boolean innerCollectionAccess, Map<Integer, List<CellRangeAddress>> rangeMap, XLSTransformer trans,
- Map<Integer,List<CellFill>> mapFill) {
- Assert.isTrue(StringUtils.isNotBlank(templatePath), “templatePath不可以为空字符串”);
- XLSTransformer transformer = null;
- if (trans != null) {
- transformer = trans;
- } else {
- transformer = new XLSTransformer();
- }
- transformer.setJexlInnerCollectionsAccess(innerCollectionAccess);
- response.setCharacterEncoding(“utf-8”);
- if (EXCEL_2007.equals(version)) {
- fileName = encodeFilename(fileName + ”.xlsx”, request);
- response.setContentType(“application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8”);
- } else {
- fileName = encodeFilename(fileName + ”.xls”, request);
- response.setContentType(“application/vnd.ms-excel;charset=UTF-8”);
- }
- response.setHeader(“Content-Disposition”, “attachment;fileName=” + fileName);
- InputStream is = null;
- try {
- if(“linux”.equals(System.getProperty(“os.name”).toLowerCase())){
- if(!templatePath.startsWith(“/”)){
- templatePath=“/”+templatePath;
- }
- }
- is = new FileInputStream(templatePath);
- Workbook book = transformer.transformXLS(is, beanParams);
- if (rangeMap != null) {
- Iterator<Integer> index = rangeMap.keySet().iterator();
- while (index.hasNext()) {
- Integer i = index.next();
- Sheet sheet = book.getSheetAt(i);
- Iterator<CellRangeAddress> cra = rangeMap.get(i).iterator();
- while (cra.hasNext()) {
- sheet.addMergedRegion(cra.next());
- }
- }
- }
- //==========填充颜色,add by psh
- if(mapFill!=null) {
- if (EXCEL_2003.equals(version)) {
- HSSFWorkbook workbook=(HSSFWorkbook)book;
- Iterator<Integer> sheetIndex = mapFill.keySet().iterator();
- while (sheetIndex.hasNext()) {
- Integer index = sheetIndex.next();
- Sheet sheet = workbook.getSheetAt(index);
- List<CellFill> list = mapFill.get(index);
- CellFill cellFill= null;
- for(int i=0;i<list.size();i++){
- cellFill= list.get(i);
- Row row = (Row)sheet.getRow(cellFill.getRow());
- if(row==null){
- continue;
- }
- Cell cell = row.getCell(cellFill.getCol());
- if(cell==null){
- continue;
- }
- HSSFCellStyle sheetStyle = workbook.createCellStyle(); //Sheet样式
- sheetStyle.setFillPattern(XSSFCellStyle.SOLID_FOREGROUND); //填充模式
- sheetStyle.setFillForegroundColor(cellFill.getBgColor()); //前景色(单元格)的设定。HSSFColor.YELLOW.index——黄色
- HSSFFont font=workbook.createFont();
- font.setColor(cellFill.getFontColor());
- sheetStyle.setFont(font);
- cell.setCellStyle(sheetStyle);
- }
- }//end while
- }else {
- XSSFWorkbook workbook=(XSSFWorkbook)book;
- Iterator<Integer> sheetIndex = mapFill.keySet().iterator();
- while (sheetIndex.hasNext()) {
- Integer index = sheetIndex.next();
- Sheet sheet = workbook.getSheetAt(index);
- List<CellFill> list = mapFill.get(index);
- CellFill cellFill= null;
- for(int i=0;i<list.size();i++){
- cellFill= list.get(i);
- Row row = (Row)sheet.getRow(cellFill.getRow());
- if(row==null){
- continue;
- }
- Cell cell = row.getCell(cellFill.getCol());
- if(cell==null){
- continue;
- }
- XSSFCellStyle sheetStyle = workbook.createCellStyle(); //Sheet样式
- sheetStyle.setFillPattern(XSSFCellStyle.SOLID_FOREGROUND); //填充模式
- sheetStyle.setFillForegroundColor(cellFill.getBgColor()); //前景色(单元格)的设定。HSSFColor.YELLOW.index——黄色
- XSSFFont font=workbook.createFont();
- font.setColor(cellFill.getFontColor());
- sheetStyle.setFont(font);
- cell.setCellStyle(sheetStyle);
- }
- }//end while
- } //end 2007
- }
- //=====end 颜色===========
- book.write(response.getOutputStream());
- } catch (IOException e) {
- e.printStackTrace();
- } catch (InvalidFormatException e) {
- e.printStackTrace();
- } finally {
- IOUtils.closeQuietly(is);
- }
- }
- public static String getProperty(String property) {
- return getUtil().getProp(property);
- }
- }
package org.nercita.bcp.util; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.net.URLEncoder; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Properties; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import net.sf.jxls.transformer.XLSTransformer; import org.apache.commons.io.IOUtils; import org.apache.commons.lang.StringUtils; import org.apache.poi.hssf.usermodel.HSSFCellStyle; import org.apache.poi.hssf.usermodel.HSSFFont; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.openxml4j.exceptions.InvalidFormatException; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.ss.util.CellRangeAddress; import org.apache.poi.xssf.usermodel.XSSFCellStyle; import org.apache.poi.xssf.usermodel.XSSFFont; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.springframework.core.io.ClassPathResource; import org.springframework.util.Assert; /** * 导出工具类 */ public class ExportUtil { public static String EXCEL_2007 = "Excel2007"; public static String EXCEL_2003 = "Excel2003"; private volatile Properties props = new Properties(); private boolean inited = false; private volatile static ExportUtil util = new ExportUtil(); private ExportUtil() { init(); } public Properties getProps() { if (!inited) init(); return props; } public String getProp(String key) { if (!inited) init(); return props.getProperty(key); } public String getProp(String key, String defaultValue) { if (!inited) init(); return props.getProperty(key, defaultValue); } private void init() { try { InputStream is = new ClassPathResource("export.properties").getInputStream(); props.load(is); is.close(); inited = true; } catch (IOException e) { e.printStackTrace(); } } public static ExportUtil getUtil() { if (util == null) util = new ExportUtil(); return util; } /** * 设置下载文件中文件的名称 * * @param pFileName * @param request * @return */ public static String encodeFilename(String pFileName, HttpServletRequest request){ String filename = null; String agent = request.getHeader("USER-AGENT"); try { if (null != agent){ if (-1 != agent.indexOf("Firefox")) {//Firefox filename = "=?UTF-8?B?" + (new String(org.apache.commons.codec.binary.Base64.encodeBase64(pFileName.getBytes("UTF-8"))))+ "?="; }else if (-1 != agent.indexOf("Chrome")) {//Chrome filename = new String(pFileName.getBytes(), "ISO8859-1"); } else {//IE7+ filename = URLEncoder.encode(pFileName, "UTF-8"); filename = StringUtils.replace(filename, "+", "%20");//替换空格 } } else { filename = pFileName; } } catch (Exception ex) { } return filename; } //导出 public static void writeResponse(String fileName, HttpServletRequest request, HttpServletResponse response, String version, String templatePath, Map<String, Object> beanParams,Map<Integer,List<CellFill>> mapFill) { writeResponse(fileName, request, response, version, templatePath, beanParams, false, null, null, mapFill); } public static void writeResponse(String fileName, HttpServletRequest request, HttpServletResponse response, String version, String templatePath, Map<String, Object> beanParams) { writeResponse(fileName, request, response, version, templatePath, beanParams, false, null, null, null); } public static void writeResponse(String fileName, HttpServletRequest request, HttpServletResponse response, String version, String templatePath, Map<String, Object> beanParams, boolean innerCollectionAccess) { writeResponse(fileName, request, response, version, templatePath, beanParams, innerCollectionAccess, null, null, null); } public static void writeResponse(String fileName, HttpServletRequest request, HttpServletResponse response, String version, String templatePath, Map<String, Object> beanParams, boolean innerCollectionAccess, Map<Integer, List<CellRangeAddress>> rangeMap) { writeResponse(fileName, request, response, version, templatePath, beanParams, innerCollectionAccess, rangeMap, null, null); } public static void writeResponse(String fileName, HttpServletRequest request, HttpServletResponse response, String version, String templatePath, Map<String, Object> beanParams, Map<Integer, List<CellRangeAddress>> rangeMap, XLSTransformer transformer) { writeResponse(fileName, request, response, version, templatePath, beanParams, false, rangeMap, transformer, null); } // public static void writeResponse(String fileName, HttpServletRequest request, HttpServletResponse response, String version, String templatePath, Map<String, Object> beanParams, boolean innerCollectionAccess, Map<Integer, List<CellRangeAddress>> rangeMap, XLSTransformer trans, Map<Integer,List<CellFill>> mapFill) { Assert.isTrue(StringUtils.isNotBlank(templatePath), "templatePath不可以为空字符串"); XLSTransformer transformer = null; if (trans != null) { transformer = trans; } else { transformer = new XLSTransformer(); } transformer.setJexlInnerCollectionsAccess(innerCollectionAccess); response.setCharacterEncoding("utf-8"); if (EXCEL_2007.equals(version)) { fileName = encodeFilename(fileName + ".xlsx", request); response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=UTF-8"); } else { fileName = encodeFilename(fileName + ".xls", request); response.setContentType("application/vnd.ms-excel;charset=UTF-8"); } response.setHeader("Content-Disposition", "attachment;fileName=" + fileName); InputStream is = null; try { if("linux".equals(System.getProperty("os.name").toLowerCase())){ if(!templatePath.startsWith("/")){ templatePath="/"+templatePath; } } is = new FileInputStream(templatePath); Workbook book = transformer.transformXLS(is, beanParams); if (rangeMap != null) { Iterator<Integer> index = rangeMap.keySet().iterator(); while (index.hasNext()) { Integer i = index.next(); Sheet sheet = book.getSheetAt(i); Iterator<CellRangeAddress> cra = rangeMap.get(i).iterator(); while (cra.hasNext()) { sheet.addMergedRegion(cra.next()); } } } //==========填充颜色,add by psh if(mapFill!=null) { if (EXCEL_2003.equals(version)) { HSSFWorkbook workbook=(HSSFWorkbook)book; Iterator<Integer> sheetIndex = mapFill.keySet().iterator(); while (sheetIndex.hasNext()) { Integer index = sheetIndex.next(); Sheet sheet = workbook.getSheetAt(index); List<CellFill> list = mapFill.get(index); CellFill cellFill= null; for(int i=0;i<list.size();i++){ cellFill= list.get(i); Row row = (Row)sheet.getRow(cellFill.getRow()); if(row==null){ continue; } Cell cell = row.getCell(cellFill.getCol()); if(cell==null){ continue; } HSSFCellStyle sheetStyle = workbook.createCellStyle(); //Sheet样式 sheetStyle.setFillPattern(XSSFCellStyle.SOLID_FOREGROUND); //填充模式 sheetStyle.setFillForegroundColor(cellFill.getBgColor()); //前景色(单元格)的设定。HSSFColor.YELLOW.index——黄色 HSSFFont font=workbook.createFont(); font.setColor(cellFill.getFontColor()); sheetStyle.setFont(font); cell.setCellStyle(sheetStyle); } }//end while }else { XSSFWorkbook workbook=(XSSFWorkbook)book; Iterator<Integer> sheetIndex = mapFill.keySet().iterator(); while (sheetIndex.hasNext()) { Integer index = sheetIndex.next(); Sheet sheet = workbook.getSheetAt(index); List<CellFill> list = mapFill.get(index); CellFill cellFill= null; for(int i=0;i<list.size();i++){ cellFill= list.get(i); Row row = (Row)sheet.getRow(cellFill.getRow()); if(row==null){ continue; } Cell cell = row.getCell(cellFill.getCol()); if(cell==null){ continue; } XSSFCellStyle sheetStyle = workbook.createCellStyle(); //Sheet样式 sheetStyle.setFillPattern(XSSFCellStyle.SOLID_FOREGROUND); //填充模式 sheetStyle.setFillForegroundColor(cellFill.getBgColor()); //前景色(单元格)的设定。HSSFColor.YELLOW.index——黄色 XSSFFont font=workbook.createFont(); font.setColor(cellFill.getFontColor()); sheetStyle.setFont(font); cell.setCellStyle(sheetStyle); } }//end while } //end 2007 } //=====end 颜色=========== book.write(response.getOutputStream()); } catch (IOException e) { e.printStackTrace(); } catch (InvalidFormatException e) { e.printStackTrace(); } finally { IOUtils.closeQuietly(is); } } public static String getProperty(String property) { return getUtil().getProp(property); } }
2、ImportUtil.java工具类,支持2003和2007不同格式excel文件。
- package org.nercita.bcp.util;
- import java.io.FileNotFoundException;
- import java.io.IOException;
- import java.io.InputStream;
- import java.text.DecimalFormat;
- import java.text.SimpleDateFormat;
- import java.util.ArrayList;
- import java.util.Arrays;
- import java.util.Date;
- import java.util.List;
- import org.apache.poi.hssf.usermodel.HSSFCell;
- import org.apache.poi.hssf.usermodel.HSSFDateUtil;
- import org.apache.poi.hssf.usermodel.HSSFWorkbook;
- import org.apache.poi.ss.usermodel.Cell;
- import org.apache.poi.ss.usermodel.Row;
- import org.apache.poi.ss.usermodel.Sheet;
- import org.apache.poi.ss.usermodel.Workbook;
- import org.apache.poi.xssf.usermodel.XSSFWorkbook;
- import org.springframework.web.multipart.MultipartFile;
- /**
- * excel文件导入工具类
- */
- public class ImportUtil {
- public static String EXCEL_2007_ContentType = “application/vnd.openxmlformats-officedocument.spreadsheetml.sheet”;
- public static String EXCEL_2003_ContentType = “application/vnd.ms-excel”;
- /**
- * excel文件导入
- * @param file
- * @param ignoreRows 需要忽略掉的行数
- * @return
- * @throws FileNotFoundException
- * @throws IOException
- */
- public static String[][] importFile(MultipartFile file, int ignoreRows) throws FileNotFoundException, IOException {
- List<String[]> result = new ArrayList<String[]>();
- String contentType = file.getContentType(); //内容类型
- InputStream stream = file.getInputStream(); //输入流
- Workbook wb=null;
- //根据inputStream建立一个Excel对象
- if (EXCEL_2003_ContentType.equals(contentType)){
- wb =(Workbook) new HSSFWorkbook(stream); //2003
- }else if(EXCEL_2007_ContentType.equals(contentType)) {
- wb =(Workbook) new XSSFWorkbook(stream); //2007
- }
- int rowSize = 0;
- Cell cell = null;
- for (int sheetIndex = 0; sheetIndex < wb.getNumberOfSheets(); sheetIndex++) {
- Sheet st = wb.getSheetAt(sheetIndex);
- for (int rowIndex = ignoreRows; rowIndex <= st.getLastRowNum(); rowIndex++) {
- Row row = st.getRow(rowIndex);
- if (null == row) {
- continue;
- }
- int tempRowSize = row.getLastCellNum() + 1;
- if (tempRowSize > rowSize) {
- rowSize = tempRowSize;
- }
- String[] values = new String[rowSize];
- Arrays.fill(values, ”“);
- boolean hasValue = false;
- for (short columnIndex = 0; columnIndex <= row.getLastCellNum(); columnIndex++) {
- String value = “”;
- cell = row.getCell(columnIndex);
- if (null != cell) {
- switch (cell.getCellType()) {
- case HSSFCell.CELL_TYPE_STRING:
- value = cell.getStringCellValue();
- break;
- case HSSFCell.CELL_TYPE_NUMERIC:
- if (HSSFDateUtil.isCellDateFormatted(cell)) {
- Date date = cell.getDateCellValue();
- if (null != date) {
- value = new SimpleDateFormat(“yyyy-MM-dd”).format(date);
- } else {
- value = “”;
- }
- } else {
- DecimalFormat df = new DecimalFormat(“0.#######”);
- //value = df.format(cell.getNumericCellValue());
- value = String.valueOf(df.format(cell.getNumericCellValue()));
- }
- break;
- case HSSFCell.CELL_TYPE_FORMULA:
- // 公式生成的数据
- if (!”“.equals(cell.getStringCellValue())) {
- value = cell.getStringCellValue();
- } else {
- value = cell.getNumericCellValue() + ”“;
- }
- break;
- case HSSFCell.CELL_TYPE_BLANK:
- break;
- case HSSFCell.CELL_TYPE_ERROR:
- value = “”;
- break;
- case HSSFCell.CELL_TYPE_BOOLEAN:
- value = (cell.getBooleanCellValue() == true ? “Y” : “N”);
- break;
- default:
- value = “”;
- }
- }
- if (columnIndex == 0 && value.trim().equals(“”)) {
- break;
- }
- values[columnIndex] = rightTrim(value);
- hasValue = true;
- }
- if (hasValue) {
- result.add(values);
- }
- }
- }
- stream.close();
- String[][] returnArray = new String[result.size()][rowSize];
- for (int i = 0; i < returnArray.length; i++) {
- returnArray[i] = (String[]) result.get(i);
- }
- return returnArray;
- }
- /**
- * excel文件导入
- * @param file
- * @param ignoreRows 需要忽略掉的行数
- * @return
- * @throws FileNotFoundException
- * @throws IOException
- */
- public static String[][] importFile(MultipartFile file,int sheetIndex, int ignoreRows,Integer colCnt) throws FileNotFoundException, IOException {
- List<String[]> result = new ArrayList<String[]>();
- String contentType = file.getContentType(); //内容类型
- InputStream stream = file.getInputStream(); //输入流
- Workbook wb=null;
- //根据inputStream建立一个Excel对象
- if (EXCEL_2003_ContentType.equals(contentType)){
- wb =(Workbook) new HSSFWorkbook(stream); //2003
- }else if(EXCEL_2007_ContentType.equals(contentType)) {
- wb =(Workbook) new XSSFWorkbook(stream); //2007
- }
- int rowSize = 0;
- Cell cell = null;
- Sheet st = wb.getSheetAt(sheetIndex);
- for (int rowIndex = ignoreRows; rowIndex <= st.getLastRowNum(); rowIndex++) {
- Row row = st.getRow(rowIndex);
- if (null == row) {
- continue;
- }
- // int tempRowSize = row.getLastCellNum() + 1;
- int tempRowSize = row.getPhysicalNumberOfCells();
- if(colCnt==null){
- if (tempRowSize > rowSize) {
- rowSize = tempRowSize;
- }
- colCnt=rowSize;
- }
- String[] values = new String[colCnt];
- Arrays.fill(values, ”“);
- boolean hasValue = false;
- for (short columnIndex = 0; columnIndex < colCnt; columnIndex++) {
- String value = “”;
- cell = row.getCell(columnIndex);
- if (null != cell) {
- switch (cell.getCellType()) {
- case HSSFCell.CELL_TYPE_STRING:
- value = cell.getStringCellValue();
- break;
- case HSSFCell.CELL_TYPE_NUMERIC:
- if (HSSFDateUtil.isCellDateFormatted(cell)) {
- Date date = cell.getDateCellValue();
- if (null != date) {
- value = new SimpleDateFormat(“yyyy-MM-dd”).format(date);
- } else {
- value = “”;
- }
- } else {
- DecimalFormat df = new DecimalFormat(“0.#######”);
- //value = df.format(cell.getNumericCellValue());
- value = String.valueOf(df.format(cell.getNumericCellValue()));
- }
- break;
- case HSSFCell.CELL_TYPE_FORMULA:
- // 公式生成的数据
- if (!”“.equals(cell.getStringCellValue())) {
- value = cell.getStringCellValue();
- } else {
- value = cell.getNumericCellValue() + ”“;
- }
- break;
- case HSSFCell.CELL_TYPE_BLANK:
- break;
- case HSSFCell.CELL_TYPE_ERROR:
- value = “”;
- break;
- case HSSFCell.CELL_TYPE_BOOLEAN:
- value = (cell.getBooleanCellValue() == true ? “Y” : “N”);
- break;
- default:
- value = “”;
- }
- }
- if (columnIndex == 0 && value.trim().equals(“”)) {
- break;
- }
- values[columnIndex] = rightTrim(value);
- hasValue = true;
- }
- if (hasValue) {
- result.add(values);
- }
- }
- stream.close();
- String[][] returnArray = new String[result.size()][colCnt];
- for (int i = 0; i < returnArray.length; i++) {
- returnArray[i] = (String[]) result.get(i);
- }
- return returnArray;
- }
- /**
- * 去除字符串右侧空格(直接使用trim()将不能支持中间存在空格的单元格)
- * @param str
- * @return
- */
- public static String rightTrim(String str) {
- if (str == null) {
- return ”“;
- }
- int length = str.length();
- for (int i = length - 1; i >= 0; i–) {
- if (0x20 != str.charAt(i)) {
- break;
- }
- length–;
- }
- return str.substring(0, length);
- }
- }
package org.nercita.bcp.util; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.text.DecimalFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Arrays; import java.util.Date; import java.util.List; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFDateUtil; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.springframework.web.multipart.MultipartFile; /** * excel文件导入工具类 */ public class ImportUtil { public static String EXCEL_2007_ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; public static String EXCEL_2003_ContentType = "application/vnd.ms-excel"; /** * excel文件导入 * @param file * @param ignoreRows 需要忽略掉的行数 * @return * @throws FileNotFoundException * @throws IOException */ public static String[][] importFile(MultipartFile file, int ignoreRows) throws FileNotFoundException, IOException { List<String[]> result = new ArrayList<String[]>(); String contentType = file.getContentType(); //内容类型 InputStream stream = file.getInputStream(); //输入流 Workbook wb=null; //根据inputStream建立一个Excel对象 if (EXCEL_2003_ContentType.equals(contentType)){ wb =(Workbook) new HSSFWorkbook(stream); //2003 }else if(EXCEL_2007_ContentType.equals(contentType)) { wb =(Workbook) new XSSFWorkbook(stream); //2007 } int rowSize = 0; Cell cell = null; for (int sheetIndex = 0; sheetIndex < wb.getNumberOfSheets(); sheetIndex++) { Sheet st = wb.getSheetAt(sheetIndex); for (int rowIndex = ignoreRows; rowIndex <= st.getLastRowNum(); rowIndex++) { Row row = st.getRow(rowIndex); if (null == row) { continue; } int tempRowSize = row.getLastCellNum() + 1; if (tempRowSize > rowSize) { rowSize = tempRowSize; } String[] values = new String[rowSize]; Arrays.fill(values, ""); boolean hasValue = false; for (short columnIndex = 0; columnIndex <= row.getLastCellNum(); columnIndex++) { String value = ""; cell = row.getCell(columnIndex); if (null != cell) { switch (cell.getCellType()) { case HSSFCell.CELL_TYPE_STRING: value = cell.getStringCellValue(); break; case HSSFCell.CELL_TYPE_NUMERIC: if (HSSFDateUtil.isCellDateFormatted(cell)) { Date date = cell.getDateCellValue(); if (null != date) { value = new SimpleDateFormat("yyyy-MM-dd").format(date); } else { value = ""; } } else { DecimalFormat df = new DecimalFormat("0.#######"); //value = df.format(cell.getNumericCellValue()); value = String.valueOf(df.format(cell.getNumericCellValue())); } break; case HSSFCell.CELL_TYPE_FORMULA: // 公式生成的数据 if (!"".equals(cell.getStringCellValue())) { value = cell.getStringCellValue(); } else { value = cell.getNumericCellValue() + ""; } break; case HSSFCell.CELL_TYPE_BLANK: break; case HSSFCell.CELL_TYPE_ERROR: value = ""; break; case HSSFCell.CELL_TYPE_BOOLEAN: value = (cell.getBooleanCellValue() == true ? "Y" : "N"); break; default: value = ""; } } if (columnIndex == 0 && value.trim().equals("")) { break; } values[columnIndex] = rightTrim(value); hasValue = true; } if (hasValue) { result.add(values); } } } stream.close(); String[][] returnArray = new String[result.size()][rowSize]; for (int i = 0; i < returnArray.length; i++) { returnArray[i] = (String[]) result.get(i); } return returnArray; } /** * excel文件导入 * @param file * @param ignoreRows 需要忽略掉的行数 * @return * @throws FileNotFoundException * @throws IOException */ public static String[][] importFile(MultipartFile file,int sheetIndex, int ignoreRows,Integer colCnt) throws FileNotFoundException, IOException { List<String[]> result = new ArrayList<String[]>(); String contentType = file.getContentType(); //内容类型 InputStream stream = file.getInputStream(); //输入流 Workbook wb=null; //根据inputStream建立一个Excel对象 if (EXCEL_2003_ContentType.equals(contentType)){ wb =(Workbook) new HSSFWorkbook(stream); //2003 }else if(EXCEL_2007_ContentType.equals(contentType)) { wb =(Workbook) new XSSFWorkbook(stream); //2007 } int rowSize = 0; Cell cell = null; Sheet st = wb.getSheetAt(sheetIndex); for (int rowIndex = ignoreRows; rowIndex <= st.getLastRowNum(); rowIndex++) { Row row = st.getRow(rowIndex); if (null == row) { continue; } // int tempRowSize = row.getLastCellNum() + 1; int tempRowSize = row.getPhysicalNumberOfCells(); if(colCnt==null){ if (tempRowSize > rowSize) { rowSize = tempRowSize; } colCnt=rowSize; } String[] values = new String[colCnt]; Arrays.fill(values, ""); boolean hasValue = false; for (short columnIndex = 0; columnIndex < colCnt; columnIndex++) { String value = ""; cell = row.getCell(columnIndex); if (null != cell) { switch (cell.getCellType()) { case HSSFCell.CELL_TYPE_STRING: value = cell.getStringCellValue(); break; case HSSFCell.CELL_TYPE_NUMERIC: if (HSSFDateUtil.isCellDateFormatted(cell)) { Date date = cell.getDateCellValue(); if (null != date) { value = new SimpleDateFormat("yyyy-MM-dd").format(date); } else { value = ""; } } else { DecimalFormat df = new DecimalFormat("0.#######"); //value = df.format(cell.getNumericCellValue()); value = String.valueOf(df.format(cell.getNumericCellValue())); } break; case HSSFCell.CELL_TYPE_FORMULA: // 公式生成的数据 if (!"".equals(cell.getStringCellValue())) { value = cell.getStringCellValue(); } else { value = cell.getNumericCellValue() + ""; } break; case HSSFCell.CELL_TYPE_BLANK: break; case HSSFCell.CELL_TYPE_ERROR: value = ""; break; case HSSFCell.CELL_TYPE_BOOLEAN: value = (cell.getBooleanCellValue() == true ? "Y" : "N"); break; default: value = ""; } } if (columnIndex == 0 && value.trim().equals("")) { break; } values[columnIndex] = rightTrim(value); hasValue = true; } if (hasValue) { result.add(values); } } stream.close(); String[][] returnArray = new String[result.size()][colCnt]; for (int i = 0; i < returnArray.length; i++) { returnArray[i] = (String[]) result.get(i); } return returnArray; } /** * 去除字符串右侧空格(直接使用trim()将不能支持中间存在空格的单元格) * @param str * @return */ public static String rightTrim(String str) { if (str == null) { return ""; } int length = str.length(); for (int i = length - 1; i >= 0; i--) { if (0x20 != str.charAt(i)) { break; } length--; } return str.substring(0, length); } }