org.apache.poi3.1.7 升级,需要修改设置方式:

1、org.apache.poi3.1.4 的设置单元格:

XSSFCellStyle cellStyle = wb.createCellStyle();   
cellStyle.setAlignment(XSSFCellStyle.ALIGN_CENTER); // 居中  
cellStyle.setVerticalAlignment(XSSFCellStyle.VERTICAL_CENTER);//垂直 

org.apache.poi3.1.7的设置单元格,格式为:

XSSFCellStyle cellStyle = wb.createCellStyle();   
cellStylestyle.setAlignment(HorizontalAlignment.CENTER);// 居中  
cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);;//垂直 

2、同时在设置边框时候,也有相应的同样问题,HSSFCellStyle 中同样报错没有其中的值

cellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); //下边框    
cellStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);//左边框    
cellStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);//上边框    
cellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);//右边框    

需要升级一下方式:

cellStyle.setBorderBottom(BorderStyle.THIN); //下边框    
cellStyle.setBorderLeft(BorderStyle.THIN);//左边框    
cellStyle.setBorderTop(BorderStyle.THIN);//上边框    
cellStyle.setBorderRight(BorderStyle.THIN);//右边框    

3、代码分享:EXCLE导入导出,二话不说直接上代码:

import com.fasterxml.jackson.annotation.JsonIgnore;
import com.ppdai.wechat.contract.model.CoverBuildingInfo;
import com.ppdai.wechat.contract.request.BatchInsertBuildingRequest;
import com.ppdai.wechat.spring.entity.OutputResult;
import com.ppdai.wechat.spring.service.CoverBuildingMService;
import com.ppdai.wechat.spring.util.CommonUtil;
import com.ppdai.wechat.spring.util.StringUtil;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.streaming.SXSSFCell;
import org.apache.poi.xssf.streaming.SXSSFRow;
import org.apache.poi.xssf.streaming.SXSSFSheet;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import java.beans.PropertyDescriptor;
import java.io.IOException;
import java.io.OutputStream;
import java.lang.reflect.Field;
import java.util.*;
import java.util.concurrent.*;


/**
 * Description:Excel解析
 * Created by xiaoyongyong on 2017/11/15.
 * Version: 1.0
 */
@Service
public class AwardExcelReader {

    @Autowired
    private CoverBuildingMService coverBuildingMService;
    private Logger logger = LoggerFactory.getLogger(AwardExcelReader.class);
    private static CountDownLatch latch = new CountDownLatch(10);
    private static ExecutorService executorService = Executors.newFixedThreadPool(5);
    private int pageIndex = 0;

    /**
     * Excel的导出数据和格式设定
     * Excel 2003及以下的版本。一张表最大支持65536行数据,256列。也就是说excel2003完全不可能满足百万数据导出的需求。
     * Excel 2007-2010版本。一张表最大支持1048576行,16384列;
     *
     * @param data     title对应的属性
     * @param titles   导出Excle的列头
     * @param list     查询的list集合
     * @param response HttpServletResponse
     * @param fileName 文件名
     * @throws Exception Exception
     */
    public static <T> void excelData(String[] data, String[] titles, List<T> list, HttpServletResponse response, String fileName) throws Exception {
        // 生成提示信息,
        response.setContentType("application/vnd.ms-excel");
        try (OutputStream os = response.getOutputStream()) {
            // 进行转码,使其支持中文件名
            String codeFileName = java.net.URLEncoder.encode(fileName, "UTF-8");
            response.setHeader("content-disposition", "attachment;filename=" + codeFileName + ".xlsx");
            // 生成工作簿对象
            SXSSFWorkbook workbook = new SXSSFWorkbook();
            //产生工作表对象
            SXSSFSheet sheet = workbook.createSheet();
            //循环表头
            for (int i = 0; i < titles.length; i++) {
                //设置表列宽
                sheet.setColumnWidth((short) i, 25 * 256);
            }
            //设置统一单元格的高度
            sheet.setDefaultRowHeight((short) 300);
            //样式1
            CellStyle style = workbook.createCellStyle();               // 样式对象
            style.setVerticalAlignment(VerticalAlignment.CENTER);  // 垂直
            style.setAlignment(HorizontalAlignment.CENTER);                          // 水平
            style.setWrapText(true);                   //设置是否能够换行,能够换行为true
            style.setBorderBottom(BorderStyle.THIN);   //设置下划线,参数是黑线的宽度
            style.setBorderLeft(BorderStyle.THIN);     //设置左边框
            style.setBorderRight(BorderStyle.THIN);    //设置有边框
            style.setBorderTop(BorderStyle.THIN);      //设置上边框
            //设置标题字体格式
            Font font = workbook.createFont();
            //设置字体样式
            font.setFontHeightInPoints((short) 20);   //设置字体大小
            font.setFontName("Courier New");          //设置字体,例如:宋体

            List<Field> fieldList = new ArrayList<>();
            //支持子类父类两级
            fieldList.addAll(Arrays.asList(list.get(0).getClass().getDeclaredFields()));
            fieldList.addAll(Arrays.asList(list.get(0).getClass().getSuperclass().getDeclaredFields()));
            Map<String, Field> fieldMap = new HashMap<>();
            for (Field field : fieldList) {
                if ("serialVersionUID".equals(field.getName()))
                    continue;
                field.setAccessible(true);
                fieldMap.put(field.getName(), field);
            }

            //创建第一行
            SXSSFRow row = sheet.createRow(0);
            //为第一行的所有列赋值
            for (int i = 0; i < titles.length; i++) {
                SXSSFCell cell = row.createCell(i);
                cell.setCellValue(titles[i]);
            }
            //循环list集合,把数据写到Excel
            if (!list.isEmpty()) {
                int i = 1;
                for (T tt : list) {
                    // 创建除第一行的一下data行
                    SXSSFRow sxssfRow = sheet.createRow(i++);
                    String val = "";
                    // 创建一行的所有列并为其赋值
                    for (int v = 0; v < data.length; v++) {
                        Field field = fieldMap.get(data[v]);
                        if (!field.isAnnotationPresent(JsonIgnore.class)) {
                            Object fieldValue = new PropertyDescriptor(field.getName(), tt.getClass()).getReadMethod().invoke(tt);
                            if (fieldValue == null) {
                                val = "";
                            } else {
                                val = fieldValue.toString();
                            }
                        }
                        sxssfRow.createCell(v).setCellValue(val);
                    }
                }
            }
            workbook.write(os);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 批量读取Excle
     * @param uploadFile 上传的Excle文件
     * @param pageSize 多线程解析excle的行数
     * @throws Exception
     */
    public void importExcel(MultipartFile uploadFile, Integer pageSize) throws Exception {
        //解析excel 2007 版本文件
        String awardName = uploadFile.getOriginalFilename().substring(0, uploadFile.getOriginalFilename().indexOf("."));
        XSSFWorkbook workbook = new XSSFWorkbook(uploadFile.getInputStream());//
        XSSFSheet sheet = workbook.getSheetAt(0);
        int totalRows = sheet.getLastRowNum() + 1;//一共有多少行
        if (totalRows == 0) {
            throw new Exception("请填写数据!");
        }
        try {
            List<Future> futures = new ArrayList<>

org.apache.poi3.1.7 升级,需要修改设置方式:

1、org.apache.poi3.1.4 的设置单元格:

XSSFCellStyle cellStyle = wb.createCellStyle();   
cellStyle.setAlignment(XSSFCellStyle.ALIGN_CENTER); // 居中  
cellStyle.setVerticalAlignment(XSSFCellStyle.VERTICAL_CENTER);//垂直 

org.apache.poi3.1.7的设置单元格,格式为:

XSSFCellStyle cellStyle = wb.createCellStyle();   
cellStylestyle.setAlignment(HorizontalAlignment.CENTER);// 居中  
cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);;//垂直 

2、同时在设置边框时候,也有相应的同样问题,HSSFCellStyle 中同样报错没有其中的值

cellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); //下边框    
cellStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);//左边框    
cellStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);//上边框    
cellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);//右边框    

需要升级一下方式:

cellStyle.setBorderBottom(BorderStyle.THIN); //下边框    
cellStyle.setBorderLeft(BorderStyle.THIN);//左边框    
cellStyle.setBorderTop(BorderStyle.THIN);//上边框    
cellStyle.setBorderRight(BorderStyle.THIN);//右边框    

3、代码分享:EXCLE导入导出,二话不说直接上代码:

import com.fasterxml.jackson.annotation.JsonIgnore;
import com.ppdai.wechat.contract.model.CoverBuildingInfo;
import com.ppdai.wechat.contract.request.BatchInsertBuildingRequest;
import com.ppdai.wechat.spring.entity.OutputResult;
import com.ppdai.wechat.spring.service.CoverBuildingMService;
import com.ppdai.wechat.spring.util.CommonUtil;
import com.ppdai.wechat.spring.util.StringUtil;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.streaming.SXSSFCell;
import org.apache.poi.xssf.streaming.SXSSFRow;
import org.apache.poi.xssf.streaming.SXSSFSheet;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import java.beans.PropertyDescriptor;
import java.io.IOException;
import java.io.OutputStream;
import java.lang.reflect.Field;
import java.util.*;
import java.util.concurrent.*;


/**
 * Description:Excel解析
 * Created by xiaoyongyong on 2017/11/15.
 * Version: 1.0
 */
@Service
public class AwardExcelReader {

    @Autowired
    private CoverBuildingMService coverBuildingMService;
    private Logger logger = LoggerFactory.getLogger(AwardExcelReader.class);
    private static CountDownLatch latch = new CountDownLatch(10);
    private static ExecutorService executorService = Executors.newFixedThreadPool(5);
    private int pageIndex = 0;

    /**
     * Excel的导出数据和格式设定
     * Excel 2003及以下的版本。一张表最大支持65536行数据,256列。也就是说excel2003完全不可能满足百万数据导出的需求。
     * Excel 2007-2010版本。一张表最大支持1048576行,16384列;
     *
     * @param data     title对应的属性
     * @param titles   导出Excle的列头
     * @param list     查询的list集合
     * @param response HttpServletResponse
     * @param fileName 文件名
     * @throws Exception Exception
     */
    public static <T> void excelData(String[] data, String[] titles, List<T> list, HttpServletResponse response, String fileName) throws Exception {
        // 生成提示信息,
        response.setContentType("application/vnd.ms-excel");
        try (OutputStream os = response.getOutputStream()) {
            // 进行转码,使其支持中文件名
            String codeFileName = java.net.URLEncoder.encode(fileName, "UTF-8");
            response.setHeader("content-disposition", "attachment;filename=" + codeFileName + ".xlsx");
            // 生成工作簿对象
            SXSSFWorkbook workbook = new SXSSFWorkbook();
            //产生工作表对象
            SXSSFSheet sheet = workbook.createSheet();
            //循环表头
            for (int i = 0; i < titles.length; i++) {
                //设置表列宽
                sheet.setColumnWidth((short) i, 25 * 256);
            }
            //设置统一单元格的高度
            sheet.setDefaultRowHeight((short) 300);
            //样式1
            CellStyle style = workbook.createCellStyle();               // 样式对象
            style.setVerticalAlignment(VerticalAlignment.CENTER);  // 垂直
            style.setAlignment(HorizontalAlignment.CENTER);                          // 水平
            style.setWrapText(true);                   //设置是否能够换行,能够换行为true
            style.setBorderBottom(BorderStyle.THIN);   //设置下划线,参数是黑线的宽度
            style.setBorderLeft(BorderStyle.THIN);     //设置左边框
            style.setBorderRight(BorderStyle.THIN);    //设置有边框
            style.setBorderTop(BorderStyle.THIN);      //设置上边框
            //设置标题字体格式
            Font font = workbook.createFont();
            //设置字体样式
            font.setFontHeightInPoints((short) 20);   //设置字体大小
            font.setFontName("Courier New");          //设置字体,例如:宋体

            List<Field> fieldList = new ArrayList<>();
            //支持子类父类两级
            fieldList.addAll(Arrays.asList(list.get(0).getClass().getDeclaredFields()));
            fieldList.addAll(Arrays.asList(list.get(0).getClass().getSuperclass().getDeclaredFields()));
            Map<String, Field> fieldMap = new HashMap<>();
            for (Field field : fieldList) {
                if ("serialVersionUID".equals(field.getName()))
                    continue;
                field.setAccessible(true);
                fieldMap.put(field.getName(), field);
            }

            //创建第一行
            SXSSFRow row = sheet.createRow(0);
            //为第一行的所有列赋值
            for (int i = 0; i < titles.length; i++) {
                SXSSFCell cell = row.createCell(i);
                cell.setCellValue(titles[i]);
            }
            //循环list集合,把数据写到Excel
            if (!list.isEmpty()) {
                int i = 1;
                for (T tt : list) {
                    // 创建除第一行的一下data行
                    SXSSFRow sxssfRow = sheet.createRow(i++);
                    String val = "";
                    // 创建一行的所有列并为其赋值
                    for (int v = 0; v < data.length; v++) {
                        Field field = fieldMap.get(data[v]);
                        if (!field.isAnnotationPresent(JsonIgnore.class)) {
                            Object fieldValue = new PropertyDescriptor(field.getName(), tt.getClass()).getReadMethod().invoke(tt);
                            if (fieldValue == null) {
                                val = "";
                            } else {
                                val = fieldValue.toString();
                            }
                        }
                        sxssfRow.createCell(v).setCellValue(val);
                    }
                }
            }
            workbook.write(os);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 批量读取Excle
     * @param uploadFile 上传的Excle文件
     * @param pageSize 多线程解析excle的行数
     * @throws Exception
     */
    public void importExcel(MultipartFile uploadFile, Integer pageSize) throws Exception {
        //解析excel 2007 版本文件
        String awardName = uploadFile.getOriginalFilename().substring(0, uploadFile.getOriginalFilename().indexOf("."));
        XSSFWorkbook workbook = new XSSFWorkbook(uploadFile.getInputStream());//
        XSSFSheet sheet = workbook.getSheetAt(0);
        int totalRows = sheet.getLastRowNum() + 1;//一共有多少行
        if (totalRows == 0) {
            throw new Exception("请填写数据!");
        }
        try {
            List<Future> futures = new ArrayList<>

相关文章:

  • 2021-05-17
  • 2022-03-01
  • 2022-12-23
  • 2022-12-23
  • 2022-01-01
  • 2021-10-03
  • 2022-12-23
  • 2021-11-27
猜你喜欢
  • 2022-12-23
  • 2021-12-12
  • 2021-12-26
  • 2021-08-13
  • 2021-07-08
  • 2022-12-23
相关资源
相似解决方案