zoukankan      html  css  js  c++  java
  • excel的常用工具类

    package poi.excel;

    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.lang.reflect.Field;
    import java.lang.reflect.Method;
    import java.util.ArrayList;
    import java.util.List;

    import javax.servlet.http.HttpServletRequest;

    import org.apache.log4j.Logger;
    import org.apache.poi.hssf.usermodel.HSSFCell;
    import org.apache.poi.hssf.usermodel.HSSFCellStyle;
    import org.apache.poi.hssf.usermodel.HSSFFont;
    import org.apache.poi.hssf.usermodel.HSSFRichTextString;
    import org.apache.poi.hssf.usermodel.HSSFRow;
    import org.apache.poi.hssf.usermodel.HSSFSheet;
    import org.apache.poi.hssf.usermodel.HSSFWorkbook;
    import org.apache.poi.hssf.util.HSSFColor;
    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;

    /**
    * @ClassName: ExcelUtil
    * @Description: Excel导入导出工具类
    * @author 周宣
    * @date 2016-11-8 下午7:16:11
    *
    */
    public class ExcelUtil {
    private static final Logger logger = Logger.getLogger(ExcelUtil.class);

    /**
    * @Title: createWorkbook
    * @Description: 判断excel文件后缀名,生成不同的workbook
    * @param @param is
    * @param @param excelFileName
    * @param @return
    * @param @throws IOException
    * @return Workbook
    * @throws
    */
    public Workbook createWorkbook(InputStream is,String excelFileName) throws IOException{
    if (excelFileName.endsWith(".xls")) {
    return new HSSFWorkbook(is);
    }else if (excelFileName.endsWith(".xlsx")) {
    return new XSSFWorkbook(is);
    }
    return null;
    }

    /**
    * @Title: getSheet
    * @Description: 根据sheet索引号获取对应的sheet
    * @param @param workbook
    * @param @param sheetIndex
    * @param @return
    * @return Sheet
    * @throws
    */
    public Sheet getSheet(Workbook workbook,int sheetIndex){
    return workbook.getSheetAt(0);
    }

    /**
    * @Title: importDataFromExcel
    * @Description: 将sheet中的数据保存到list中,
    * 1、调用此方法时,vo的属性个数必须和excel文件每行数据的列数相同且一一对应,vo的所有属性都为String
    * 2、在action调用此方法时,需声明
    * private File excelFile;上传的文件
    * private String excelFileName;原始文件的文件名
    * 3、页面的file控件name需对应File的文件名
    * @param @param vo javaBean
    * @param @param is 输入流
    * @param @param excelFileName
    * @param @return
    * @return List<Object>
    * @throws
    */
    public List<Object> importDataFromExcel(Object vo,InputStream is,String excelFileName){
    List<Object> list = new ArrayList<Object>();
    try {
    //创建工作簿
    Workbook workbook = this.createWorkbook(is, excelFileName);
    //创建工作表sheet
    Sheet sheet = this.getSheet(workbook, 0);
    //获取sheet中数据的行数
    int rows = sheet.getPhysicalNumberOfRows();
    //获取表头单元格个数
    int cells = sheet.getRow(0).getPhysicalNumberOfCells();
    //利用反射,给JavaBean的属性进行赋值
    Field[] fields = vo.getClass().getDeclaredFields();
    for (int i = 1; i < rows; i++) {//第一行为标题栏,从第二行开始取数据
    Row row = sheet.getRow(i);
    int index = 0;
    while (index < cells) {
    Cell cell = row.getCell(index);
    if (null == cell) {
    cell = row.createCell(index);
    }
    cell.setCellType(Cell.CELL_TYPE_STRING);
    String value = null == cell.getStringCellValue()?"":cell.getStringCellValue();

    Field field = fields[index];
    String fieldName = field.getName();
    String methodName = "set"+fieldName.substring(0,1).toUpperCase()+fieldName.substring(1);
    Method setMethod = vo.getClass().getMethod(methodName, new Class[]{String.class});
    setMethod.invoke(vo, new Object[]{value});
    index++;
    }
    if (isHasValues(vo)) {//判断对象属性是否有值
    list.add(vo);
    vo.getClass().getConstructor(new Class[]{}).newInstance(new Object[]{});//重新创建一个vo对象
    }

    }
    } catch (Exception e) {
    logger.error(e);
    }finally{
    try {
    is.close();//关闭流
    } catch (Exception e2) {
    logger.error(e2);
    }
    }
    return list;

    }

    /**
    * @Title: isHasValues
    * @Description: 判断一个对象所有属性是否有值,如果一个属性有值(分空),则返回true
    * @param @param object
    * @param @return
    * @return boolean
    * @throws
    */
    public boolean isHasValues(Object object){
    Field[] fields = object.getClass().getDeclaredFields();
    boolean flag = false;
    for (int i = 0; i < fields.length; i++) {
    String fieldName = fields[i].getName();
    String methodName = "get"+fieldName.substring(0, 1).toUpperCase()+fieldName.substring(1);
    Method getMethod;
    try {
    getMethod = object.getClass().getMethod(methodName);
    Object obj = getMethod.invoke(object);
    if (null != obj && "".equals(obj)) {
    flag = true;
    break;
    }
    } catch (Exception e) {
    logger.error(e);
    }

    }
    return flag;

    }

    public <T> void exportDataToExcel(List<T> list,String[] headers,String title,OutputStream os){
    HSSFWorkbook workbook = new HSSFWorkbook();
    //生成一个表格
    HSSFSheet sheet = workbook.createSheet(title);
    //设置表格默认列宽15个字节
    sheet.setDefaultColumnWidth(15);
    //生成一个样式
    HSSFCellStyle style = this.getCellStyle(workbook);
    //生成一个字体
    HSSFFont font = this.getFont(workbook);
    //把字体应用到当前样式
    style.setFont(font);

    //生成表格标题
    HSSFRow row = sheet.createRow(0);
    row.setHeight((short)300);
    HSSFCell cell = null;

    for (int i = 0; i < headers.length; i++) {
    cell = row.createCell(i);
    cell.setCellStyle(style);
    HSSFRichTextString text = new HSSFRichTextString(headers[i]);
    cell.setCellValue(text);
    }

    //将数据放入sheet中
    for (int i = 0; i < list.size(); i++) {
    row = sheet.createRow(i+1);
    T t = list.get(i);
    //利用反射,根据JavaBean属性的先后顺序,动态调用get方法得到属性的值
    Field[] fields = t.getClass().getFields();
    try {
    for (int j = 0; j < fields.length; j++) {
    cell = row.createCell(j);
    Field field = fields[j];
    String fieldName = field.getName();
    String methodName = "get"+fieldName.substring(0, 1).toUpperCase()+fieldName.substring(1);
    Method getMethod = t.getClass().getMethod(methodName,new Class[]{});
    Object value = getMethod.invoke(t, new Object[]{});

    if(null == value)
    value ="";
    cell.setCellValue(value.toString());

    }
    } catch (Exception e) {
    logger.error(e);
    }
    }

    try {
    workbook.write(os);
    } catch (Exception e) {
    logger.error(e);
    }finally{
    try {
    os.flush();
    os.close();
    } catch (IOException e) {
    logger.error(e);
    }
    }

    }

    /**
    * @Title: getCellStyle
    * @Description: 获取单元格格式
    * @param @param workbook
    * @param @return
    * @return HSSFCellStyle
    * @throws
    */
    public HSSFCellStyle getCellStyle(HSSFWorkbook workbook){
    HSSFCellStyle style = workbook.createCellStyle();
    style.setFillForegroundColor(HSSFColor.GREY_25_PERCENT.index);
    style.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
    style.setBorderBottom(HSSFCellStyle.BORDER_THIN);
    style.setBorderTop(HSSFCellStyle.BORDER_THIN);
    style.setLeftBorderColor(HSSFCellStyle.BORDER_THIN);
    style.setRightBorderColor(HSSFCellStyle.BORDER_THIN);
    style.setAlignment(HSSFCellStyle.ALIGN_CENTER);

    return style;
    }

    /**
    * @Title: getFont
    * @Description: 生成字体样式
    * @param @param workbook
    * @param @return
    * @return HSSFFont
    * @throws
    */
    public HSSFFont getFont(HSSFWorkbook workbook){
    HSSFFont font = workbook.createFont();
    font.setColor(HSSFColor.WHITE.index);
    font.setFontHeightInPoints((short)12);
    font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
    return font;
    }

    public boolean isIE(HttpServletRequest request){
    return request.getHeader("USER-AGENT").toLowerCase().indexOf("msie")>0?true:false;
    }
    }

  • 相关阅读:
    s3fs 挂载minio为本地文件系统
    P5787 线段树分治
    P5494 线段树分裂
    P1552 [APIO2012]派遣
    CF600E Lomsat gelral(线段树合并)
    P5283 异或粽子
    P4735 最大异或和(可持久化 trie)
    P3960 列队
    bzoj4316 小C的独立集
    P5021 赛道修建
  • 原文地址:https://www.cnblogs.com/persistence360/p/8024945.html
Copyright © 2011-2022 走看看