精华内容
下载资源
问答
  • poi导入excel

    2017-06-30 15:56:25
    poi导入excel2003,2007通用
  • 这篇文章主要介绍了Java 中POI 导入EXCEL2003 和EXCEL2007的实现方法的相关资料,希望通过本文大家能掌握理解这种方法,需要的朋友可以参考下Java 中POI 导入EXCEL2003 和EXCEL2007的实现方法实现代码:import java....

    这篇文章主要介绍了Java 中POI 导入EXCEL2003 和EXCEL2007的实现方法的相关资料,希望通过本文大家能掌握理解这种方法,需要的朋友可以参考下

    Java 中POI 导入EXCEL2003 和EXCEL2007的实现方法

    实现代码:

    import java.io.FileInputStream;

    import java.io.IOException;

    import java.math.BigDecimal;

    import java.text.SimpleDateFormat;

    import java.util.ArrayList;

    import java.util.List;

    import org.apache.poi.POIXMLException;

    import org.apache.poi.hssf.usermodel.HSSFCell;

    import org.apache.poi.hssf.usermodel.HSSFDateUtil;

    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.poifs.filesystem.OfficeXmlFileException;

    import org.apache.poi.ss.usermodel.Cell;

    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;

    /**

    * excel 导入功能

    * @author lyq 20150312

    * @version 1.0

    */

    public class ExcelUtils {

    public List importExcel(String filePath) throws Exception{

    List list=new ArrayList();

    String fileType=filePath.substring(filePath.lastIndexOf(".")+1);

    try {

    if("xls".equalsIgnoreCase(fileType)){

    list= importExcel03(filePath);

    }else{

    list= importExcel07(filePath);

    }

    } catch(OfficeXmlFileException e){//通过手动修改文件名 引起的异常 比如 3.xlsx 重命名 3.xls 其实际文件类型为xlsx

    list=importExcel07(filePath);

    } catch(POIXMLException e){//通过手动修改文件名 引起的异常 比如 3.xls 重命名 3.xlsx 其实际文件类型为xls

    list=importExcel03(filePath);

    }

    return list;

    }

    public List importExcel03(String filePath) throws IOException{

    FileInputStream in=new FileInputStream(filePath);

    List list=new ArrayList();

    HSSFWorkbook wb=new HSSFWorkbook(in);

    HSSFSheet sheet = wb.getSheetAt(0);

    int rows = sheet.getPhysicalNumberOfRows();

    HSSFRow row=sheet.getRow(0);

    int cells=row.getLastCellNum();

    Object[] csr=null;

    for(int i=1;i

    row=sheet.getRow(i);

    csr=new String[cells];

    for(int j=0;j

    HSSFCell cell=row.getCell(j);

    Object obj=null;

    if(cell!=null){

    obj=getValue(cell);

    }

    csr[j]=obj;

    }

    list.add(csr);

    }

    if(in!=null)in.close();

    return list;

    }

    public List importExcel07(String filePath) throws IOException{

    List list=new ArrayList();

    FileInputStream in=new FileInputStream(filePath);

    XSSFWorkbook wb=new XSSFWorkbook(in);

    XSSFSheet sheet = wb.getSheetAt(0);

    int rows = sheet.getPhysicalNumberOfRows();

    XSSFRow row=sheet.getRow(0);

    int cells=row.getLastCellNum();

    Object[] csr=null;

    for(int i=1;i

    row=sheet.getRow(i);

    csr=new String[cells];

    for(int j=0;j

    XSSFCell cell=row.getCell(j);

    Object obj=null;

    if(cell!=null){

    obj=getValue(cell);

    }

    csr[j]=obj;

    }

    list.add(csr);

    }

    if(in!=null)in.close();

    return list;

    }

    @SuppressWarnings("static-access")

    public String getValue(Cell cell){

    int type=cell.getCellType();

    String s="";

    if(type==cell.CELL_TYPE_NUMERIC){

    if(HSSFDateUtil.isCellDateFormatted(cell)){

    SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

    s=sdf.format(cell.getDateCellValue());

    }else {

    BigDecimal db = new BigDecimal(cell.getNumericCellValue());

    s=String.valueOf(db);

    }

    }else if(type==cell.CELL_TYPE_STRING){

    s=cell.getStringCellValue();

    }else if(type==cell.CELL_TYPE_BOOLEAN){

    s=cell.getBooleanCellValue()+"";

    }else if(type==cell.CELL_TYPE_FORMULA){

    s=cell.getCellFormula();

    }else if(type==cell.CELL_TYPE_BLANK){

    s=" ";

    }else if(type==cell.CELL_TYPE_ERROR){

    s=" ";

    }else{

    }

    return s.trim();

    }

    /**

    * @param args

    */

    public static void main(String[] args) {

    ExcelUtils ex=new ExcelUtils();

    try {

    List list=ex.importExcel("D:\\3.xls");

    for(Object[] ss:list){

    for(Object s:ss){

    System.out.print(s+"\t");

    }

    System.out.println();

    }

    } catch (Exception e) {

    e.printStackTrace();

    }

    }

    }

    注意:

    jdk使用版本(影响excel07)

    所使用的核心jar如下poi-3.8-20120326.jar

    poi-ooxml-3.8-20120326.jar

    poi-ooxml-schemas-3.8-20120326.jar

    xmlbeans-2.3.0.jar

    展开全文
  • POI导入excel

    2019-03-26 15:22:08
    1.官方下载:...或者导入pom <!-- https://mvnrepository.com/artifact/org.apache.poi/poi --> <dependency> <groupId>org.apache.poi</groupId> <artifactId&...

    1.官方下载:http://poi.apache.org/download.html 或者导入pom

    <!-- https://mvnrepository.com/artifact/org.apache.poi/poi -->
    <dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>3.6</version>
    </dependency>
    <dependency>
    	<groupId>org.apache.poi</groupId>
    	<artifactId>poi-ooxml</artifactId>
    	<version>3.14</version>
    </dependency>
    

    maven所使用jar包,没有使用maven的话,就用poi-3.9.jar和poi-ooxml-3.9.jar(这个主要是用于Excel2007以后的版本)
    批量导出学生信息
    我前端用easyui的datagrid
    dg为表格的id
    在这里插入图片描述

    //导出
    	@RequestMapping("/inputStudentExecl") 
    	public void inputStudentExecl(String ids,HttpServletRequest request,HttpServletResponse response) {
    		List<Student> list=null;
    		if (!ids.equals("")) {
    			String[] id = ids.split(",");
    			List<Integer> list_ids = new ArrayList<Integer>();
    			for (int i = 0; i < id.length; i++) {
    				list_ids.add(Integer.parseInt(id[i]));
    			}
    			list = studentService.findStudentByIds(list_ids);
    		} else {
    			/*StudentWhere studentWhere2=new StudentWhere();
    			studentWhere2.setStuName(studentWhere.getStuName());*/
    			//list=studentService.findAllStdent(new StudentWhere(studentWhere.getStuName(), studentWhere.getPhone(), studentWhere.getQq(), studentWhere.getIsPay(), studentWhere.getIsEffective(), studentWhere.getIsReturn(), studentWhere.getTime(), studentWhere.getStartTime(), studentWhere.getFinishTime()));
    			list=studentService.findStudent();
    		}
    		//获取数据
            //excel标题
    		String[] title = {"卡号","姓名","性别","状态","备注","学生学号","系","专业","学历"};
    		//excel文件名
    		String fileName = "学生信息表"+System.currentTimeMillis()+".xls";
    		//sheet名
    		String sheetName = "学生信息表";
    		//从数据库获得的数据
    		String[][] content = new String[list.size()][title.length];
    		for (int i = 0; i < list.size(); i++) {
    		//每条数据依此取出
                Student obj = list.get(i);
                Memberships memberships = list.get(i).getMemberships();
                //三元表达式判断数据是否为null
                content[i][0] =obj.getCardNo()!=null?obj.getCardNo():null;
                content[i][1] = obj.getName()!=null?obj.getName().toString():null;
                content[i][2] = obj.getSex()!=null?obj.getSex().toString():null;
                content[i][3] = obj.getStatus()!=null?obj.getStatus().toString():null;
                content[i][4] = obj.getRemark()!=null?obj.getRemark().toString():null;
                content[i][5] = obj.getStuNo()!=null?obj.getStuNo().toString():null;
                content[i][6] = memberships.getDepartment()!=null?memberships.getDepartment().toString():null;
                content[i][7] = memberships.getSpecialty()!=null?memberships.getSpecialty().toString():null;
                content[i][8] = memberships.getDegree()!=null?memberships.getDegree().toString():null;
        	  }
    
        	   //创建HSSFWorkbook 
        	   HSSFWorkbook wb = ExcelUtil.getHSSFWorkbook(sheetName, title, content, null);
    
        	   //响应到客户端
        	   try {
    				this.setResponseHeader(response, fileName);//response响应//fileName文件名
    				OutputStream os = response.getOutputStream();//FileOutputStream的形式进行整行的写入
    				wb.write(os);//向缓冲流中写入数据
    				os.flush();//关闭缓冲流
    				os.close();
        	   } catch (Exception e) {
        		   e.printStackTrace();
        	   }
    	}
    	// 发送响应流方法
    		public void setResponseHeader(HttpServletResponse response, String fileName) {
    			try {
    				try {
    					fileName = new String(fileName.getBytes(), "ISO8859-1");//解决了传输过程的中文乱码问题
    				} catch (UnsupportedEncodingException e) {
    					e.printStackTrace();
    				}
    				//该实体头的作用是让服务器告诉浏览器它发送的数据属于什么文件类型
    				response.setContentType("application/octet-stream;charset=ISO8859-1");
    				//Content-Type 的类型为要下载的类型时 , 这个信息头会告诉浏览器这个文件的名字和类型
    				response.setHeader("Content-Disposition", "attachment;filename="
    						+ fileName);
    				//客户端不缓存
    				response.addHeader("Pargam", "no-cache");
    				response.addHeader("Cache-Control", "no-cache");
    			} catch (Exception ex) {
    				ex.printStackTrace();
    			}
    		}
    }
    

    封装Util类
    package com.ysd.util;

    import org.apache.poi.hssf.usermodel.HSSFCell;
    import org.apache.poi.hssf.usermodel.HSSFCellStyle;
    import org.apache.poi.hssf.usermodel.HSSFRow;
    import org.apache.poi.hssf.usermodel.HSSFSheet;
    import org.apache.poi.hssf.usermodel.HSSFWorkbook;

    public class ExcelUtil {

    /**
     * 导出Excel
     * @param sheetName sheet名称
     * @param title 标题
     * @param values 内容
     * @param wb HSSFWorkbook对象
     * @return
     */
    public static HSSFWorkbook getHSSFWorkbook(String sheetName,String []title,String [][]values, HSSFWorkbook wb){
    
        // 第一步,创建一个HSSFWorkbook,对应一个Excel文件
        if(wb == null){
            wb = new HSSFWorkbook();
        }
    
        // 第二步,在workbook中添加一个sheet,对应Excel文件中的sheet
        HSSFSheet sheet = wb.createSheet(sheetName);
    
        // 第三步,在sheet中添加表头第0行,注意老版本poi对Excel的行数列数有限制
        HSSFRow row = sheet.createRow(0);
    
        // 第四步,创建单元格,并设置值表头 设置表头居中
        HSSFCellStyle style = wb.createCellStyle();
       /* style.setAlignment(HSSFCellStyle.ALIGN_CENTER); */// 创建一个居中格式
    
        //声明列对象
        HSSFCell cell = null;
    
        //创建标题
        for(int i=0;i<title.length;i++){
            cell = row.createCell(i);
            cell.setCellValue(title[i]);
            cell.setCellStyle(style);
        }
    
        //创建内容
        for(int i=0;i<values.length;i++){
            row = sheet.createRow(i + 1);
            for(int j=0;j<values[i].length;j++){
                //将内容按顺序赋给对应的列对象
                row.createCell(j).setCellValue(values[i][j]);
            }
        }
        return wb;
    }
    

    }

    mapper

    /**
    	 * 根据ids查询学生信息
    	 * @param ids id集合
    	 * @return 
    	 */
    	List<Student> getStudentByIds(List<Integer> ids);
    

    mapper.xml

    <!--批量导出学生信息  -->
    	<select id="getStudentByIds" resultMap="studentMapping">
    		SELECT s.*,m.Department,m.Specialty,m.Degree from  student s LEFT JOIN memberships m ON m.Id=s.MembershipId where s.Id in
    		<foreach collection="list" open="(" separator="," close=")" index="index" item="item">
    			#{item}
    		</foreach>
    	</select>
    
    展开全文
  • POI导入Excel、JAVA根据POI封装Excel的导入说明代码 说明 使用前需要明白导入参数的含义。 代码 代码从接口调用开始说明 poi版本

    POI导入Excel、JAVA根据POI封装Excel的导入

    说明

    使用前需要明白导入参数的含义。

    代码

    代码从接口调用开始说明
    poi版本

            <dependency>
                <groupId>cn.afterturn</groupId>
                <artifactId>easypoi-base</artifactId>
                <version>3.1.0</version>
            </dependency>
            <dependency>
                <groupId>cn.afterturn</groupId>
                <artifactId>easypoi-web</artifactId>
                <version>3.1.0</version>
            </dependency>
            <dependency>
                <groupId>cn.afterturn</groupId>
                <artifactId>easypoi-annotation</artifactId>
                <version>3.1.0</version>
            </dependency>
            <dependency>
                <groupId>org.apache.commons</groupId>
                <artifactId>commons-math3</artifactId>
                <version>3.6.1</version>
            </dependency>
    在这里插入代码片
    
     @PostMapping("/load")
        @ResponseBody
        public Map importTemplate(@RequestParam(value = "file") MultipartFile file) throws Exception {
        	//参数说明看工具类说明
            List<ImportExcelDTO> importExcelDTOS = ExcelUtils.importExcel(file, ImportExcelDTO.class, 2, 0, 1, 1);
           
        }
    

    这个是业务相关的实体类:实体类的字段顺序一定要和Excel的字段顺序一样

    
    @Data
    public class ImportExcelDTO {
        /**
         * 地区
         */
        private String area;
    
        /**
         * 货币名称
         */
        private String name;
    
        /**
         * 货币编码
         */
        private String code;
    
        /**
         * 货币编号
         */
        private Integer num;
        
    }
    
    

    以下为封装需要的代码

    
    public class ExcleVO {
        /**
         * 字段名称
         */
        private List<String> colums;
    
        /**
         * 表名
         */
        private String name;
    
        /**
         * 记录在excle中的列数
         */
        private Map<String, Integer> position;
    
        public List<String> getColums() {
            return colums;
        }
    
        public void setColums(List<String> colums) {
            this.colums = colums;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public Map<String, Integer> getPosition() {
            return position;
        }
    
        public void setPosition(Map<String, Integer> position) {
            this.position = position;
        }
    }
    

    封装好的ExcelUtils 导出工具类

    
    package com.owinfo.mpw.cash.util;
    
    import com.alibaba.druid.util.StringUtils;
    
    import com.owinfo.mpw.cash.service.entity.vo.ExcleVO;
    import org.apache.poi.hssf.usermodel.HSSFWorkbook;
    import org.apache.poi.ss.usermodel.*;
    import org.apache.poi.xssf.usermodel.*;
    import org.apache.poi.xssf.usermodel.extensions.XSSFCellBorder;
    import org.springframework.web.bind.annotation.RequestBody;
    import org.springframework.web.multipart.MultipartFile;
    
    import javax.servlet.http.HttpServletResponse;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.lang.annotation.*;
    import java.lang.reflect.Field;
    import java.lang.reflect.Method;
    import java.math.BigDecimal;
    import java.net.URLEncoder;
    import java.text.DateFormat;
    import java.text.SimpleDateFormat;
    import java.util.*;
    
    
    public class ExcelUtils {
    
    
        /**
         * 导入Excel
         * 样例:List<DeclarationElementExcelParam> params = ExcelUtils.importExcel(file, DeclarationElementExcelParam.class, NumberConstant.THREE);
         *
         * @param file       文件;文件格式要求,“第一行”为表头,从“第二行”为正式数据,并且“第一列”必须是序号
         * @param clazz      接收解析Excel内容的实体;实体要求,实体的“字段顺序”必须和Excel“表头的顺序”一样;
         *                   实体的字段类型,只支持String,Integer,Double,Date
         * @param index      表示到实体的第几个字段结束。例:Excel表中,除去序号那一列,真实的表头有10个,那么在实体中
         *                   就有10个字段来接收,但是实体中还会有常用字段之类的,所以要指定字段的数量,这里index就传10。
         * @param sheetIndex 表示获取第几个sheet的数据
         * @param rowIndex   表示从第几行开始读数据
         * @param cell       表示从第几列读
         * @return 返回Excel中的数据
         */
        public static <T> List<T> importExcel(MultipartFile file, Class<T> clazz, int index, int sheetIndex, int rowIndex, int cell) throws Exception {
            List<T> params = new ArrayList<>();
            String fileName = file.getOriginalFilename();
            if (ExcelUtils.checkExcel(file)) {
                throw new Exception("请上传Excel格式");
            }
            boolean isExcel2003 = true;
            String match = "^.+\\.(?i)(xlsx)$";
            if (fileName.matches(match)) {
                isExcel2003 = false;
            }
            InputStream is = file.getInputStream();
            Workbook wb;
            if (isExcel2003) {
                wb = new HSSFWorkbook(is);
            } else {
                wb = new XSSFWorkbook(is);
            }
            Sheet sheet = wb.getSheetAt(sheetIndex);
            if (sheet == null) {
                throw new Exception("文件为空");
            }
            for (int r = rowIndex; r <= sheet.getLastRowNum(); r++) {
                Row row = sheet.getRow(r);
    
                if (isRowEmpty(row)) {
                    continue;
                }
                //接收参数对象
                T t = clazz.newInstance();
                //NumberConstant.TWENTY_FOUR 表示循环到对象里面的第几个参数
                ExcelUtils.getRowValue(t, row, index, cell);
                params.add(t);
            }
            return params;
        }
    
    
        /**
         * 判断行是否为空
         *
         * @param row 行对象
         * @return 判断结果
         */
        private static boolean isRowEmpty(Row row) {
            for (int c = row.getFirstCellNum(); c < row.getLastCellNum(); c++) {
                Cell cell = row.getCell(c);
                if (cell != null && cell.getCellType() != Cell.CELL_TYPE_BLANK) {
                    return false;
                }
            }
            return true;
        }
    
        /**
         * 导出Excel
         * 
         * @param datas     导出的数据
         * @param selColumns  动态字段集合,不需要动态字段传null
         * @param clazz    封装导出数据的实体,就是T是什么,这里就传他的class对象
         * @param response 下载响应
         */
        public static <T> void downExcel(List<T> datas, Class<?> clazz, List<String> selColumns, HttpServletResponse response) throws Exception {
            XSSFWorkbook wb = new XSSFWorkbook();
            ExcleVO excleVO = getNameAndColumn(clazz, selColumns);
            SimpleDateFormat formatter1 = new SimpleDateFormat("yyyyMMddHHmmss");
            try {
                // 告诉浏览器用什么软件可以打开此文件
                response.setHeader("content-Type", "application/vnd.ms-excel");
                // 下载文件的默认名称
                response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(excleVO.getName() + formatter1.format(new Date()) + ".xlsx", "utf-8"));
                //======第一个sheet=========
                //表格1的名称
                String sheetName1 = excleVO.getName();
                XSSFSheet sheet1 = wb.createSheet(sheetName1);
                XSSFDrawing patriarch = sheet1.createDrawingPatriarch();
                sheet1.setDefaultColumnWidth(20);
                sheet1.setDefaultRowHeight((short) (45 * 10));
    
                String[] titles = excleVO.getColums().toArray(new String[excleVO.getColums().size()]);
                //定义表头
                //返回写到第几行了
                int rowIndex2 = ExcelUtils.writeTitlesToExcel1(wb, sheet1, titles);
                //写正式内容
                writeRowsToExcel1(wb, sheet1, datas, rowIndex2, excleVO.getPosition(), patriarch);
                //设置宽度
                ExcelUtils.autoSizeColumns(sheet1, titles.length + 1);
                OutputStream out = response.getOutputStream();
                wb.write(out);
                out.flush();
                out.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        /**
         * 获取单元格内容
         *
         * @param obj   生成的对象
         * @param row   航对象
         * @param index 表示赋值到第几个字段结束
         */
        public static <T> void getRowValue(T obj, Row row, int index, int cell) throws Exception {
            Class<?> clazz = obj.getClass();
            Field[] fields = clazz.getDeclaredFields();
            for (int i = 0; i < index; i++) {
                Field field = fields[i];
                field.setAccessible(true);
                Class<?> type = field.getType();
                Method m = clazz.getMethod("set" + BaseUtils.upperCase(field.getName()), type);
                //给该方法设置值
                if (type == Date.class) {
                    //处理日期
                    Cell cell1 = row.getCell(i + cell);
                    Date d = null;
                    if (cell1 != null && !StringUtils.isEmpty(cell1.toString())) {
                        d = cell1.getDateCellValue();
                    }
                    if (d != null) {
                        DateFormat formater = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                        String res = formater.format(d);
                        m.invoke(obj, formater.parse(res));
                    }
                } else if (type == Integer.class) {
                    String s = setFiled(row, i + cell);
                    if (!StringUtils.isEmpty(s)) {
                        m.invoke(obj, Integer.valueOf(s));
                    }
                } else if (type == Double.class) {
                    String s = setFiled(row, i + cell);
                    if (!StringUtils.isEmpty(s)) {
                        m.invoke(obj, Double.valueOf(s));
                    }
                } else if (type == BigDecimal.class) {
                    String s = setFiled(row, i + cell);
                    if (!StringUtils.isEmpty(s)) {
                        m.invoke(obj, new BigDecimal(s));
                    }
                } else {
                    String s = setFiled(row, i + cell);
                    m.invoke(obj, s);
                }
            }
        }
    
        /**
         * 获取单元格内容
         *
         * @param i   第几列
         * @param row 航对象
         * @return 获取结果
         */
        private static String setFiled(Row row, int i) throws Exception {
            if (row.getCell(i) != null) {
                row.getCell(i).setCellType(Cell.CELL_TYPE_STRING);
                return row.getCell(i).getStringCellValue().trim();
            }
            return "";
        }
    
        /**
         * 讲对象写入单元格
         *
         * @param g       填入的数据
         * @param dataRow 航对象
         */
        private static <T> void createExcel(Row dataRow, T g, XSSFCellStyle dataStyle, XSSFCellStyle dataStyle1, Map<String, Integer> position, XSSFWorkbook wb, XSSFDrawing patriarch) throws Exception {
            Class<?> clazz = g.getClass();
            Field[] fields = clazz.getDeclaredFields();
            for (Field field : fields) {
                //设置是否允许访问,不是修改原来的访问权限修饰词。
                if (position.containsKey(field.getName())) {
                    field.setAccessible(true);
                    Cell cell1 = dataRow.createCell(1 + position.get(field.getName()));
                    cell1.setCellValue("" + (field.get(g) == null ? "" : "" + field.get(g)));
                    if (field.getType() == String.class && !field.getName().equals("filePath")) {
                        cell1.setCellStyle(dataStyle1);
                    } else {
                        cell1.setCellStyle(dataStyle);
                    }
                }
            }
        }
    
        /**
         * 判断是否是excel
         *
         * @param file 文件
         * @return 获取结果
         */
        public static boolean checkExcel(@RequestBody MultipartFile file) {
            String fileName = file.getOriginalFilename();
            String match1 = "^.+\\.(?i)(xls)$";
            String match2 = "^.+\\.(?i)(xlsx)$";
            return !fileName.matches(match1) && !fileName.matches(match2);
        }
    
        /**
         * sheet1写正式数据
         *
         * @param wb 表信息
         */
        private static XSSFCellStyle getDataStyle(XSSFWorkbook wb) {
            Font dataFont = wb.createFont();
            dataFont.setFontName("宋体");
            dataFont.setColor(IndexedColors.BLACK.index);
            dataFont.setFontHeightInPoints((short) 16);
            XSSFCellStyle dataStyle = wb.createCellStyle();
            dataStyle.setAlignment(XSSFCellStyle.ALIGN_CENTER);
            dataStyle.setVerticalAlignment(XSSFCellStyle.VERTICAL_CENTER);
            dataStyle.setFont(dataFont);
            dataStyle.setWrapText(true);
            setBorder(dataStyle, BorderStyle.THIN, new XSSFColor(new java.awt.Color(0, 0, 0)));
            //设置标题单元格类型
            //下边框
            dataStyle.setBorderBottom(CellStyle.BORDER_THIN);
            //左边框
            dataStyle.setBorderLeft(CellStyle.BORDER_THIN);
            //上边框
            dataStyle.setBorderTop(CellStyle.BORDER_THIN);
            //右边框
            dataStyle.setBorderRight(CellStyle.BORDER_THIN);
    
            return dataStyle;
        }
    
        /**
         * sheet1 设置表头,包括格式和背景颜色
         *
         * @param wb    表信息
         * @param sheet 表信息
         * @param heads 表头信息
         * @return 返回到第几行
         */
        private static int writeTitlesToExcel1(XSSFWorkbook wb, Sheet sheet, String[] heads) {
            //字体样式
            Font dataFont = wb.createFont();
            dataFont.setFontName("simsun");
            dataFont.setColor(IndexedColors.BLACK.index);
            XSSFCellStyle dataStyle = wb.createCellStyle();
            dataStyle.setAlignment(XSSFCellStyle.ALIGN_CENTER);
            dataStyle.setVerticalAlignment(XSSFCellStyle.VERTICAL_CENTER);
            dataStyle.setFont(dataFont);
            dataStyle.setWrapText(true);
            setBorder(dataStyle, BorderStyle.THIN, new XSSFColor(new java.awt.Color(0, 0, 0)));
    
            XSSFCellStyle black = getBlack(wb);
            //创建第一行
            Row titleRow = sheet.createRow(0);
            for (int i = 0; i < heads.length; i++) {
                Cell cell = titleRow.createCell(i);
                cell.setCellValue(heads[i]);
                cell.setCellStyle(black);
            }
            //返回用了几行
            return 1;
        }
    
        /**
         * sheet1 设置表头,包括格式和背景颜色
         *
         * @param style  表信息
         * @param border 表信息
         * @param color  颜色
         */
        public static void setBorder(XSSFCellStyle style, BorderStyle border, XSSFColor color) {
            style.setBorderTop(border);
            style.setBorderLeft(border);
            style.setBorderRight(border);
            style.setBorderBottom(border);
            style.setBorderColor(XSSFCellBorder.BorderSide.TOP, color);
            style.setBorderColor(XSSFCellBorder.BorderSide.LEFT, color);
            style.setBorderColor(XSSFCellBorder.BorderSide.RIGHT, color);
            style.setBorderColor(XSSFCellBorder.BorderSide.BOTTOM, color);
        }
    
        /**
         * sheet1 设置颜色
         *
         * @param wb 表信息
         * @return XSSFCellStyle
         */
        public static XSSFCellStyle getBlack(XSSFWorkbook wb) {
            //字体样式
            Font titleFont = wb.createFont();
            titleFont.setFontName("宋体");
            titleFont.setItalic(false);
            titleFont.setFontHeightInPoints((short) 16);
            titleFont.setColor(IndexedColors.BLACK.index);
            //表头样式
            XSSFCellStyle titleStyle = wb.createCellStyle();
            titleStyle.setAlignment(XSSFCellStyle.ALIGN_CENTER);
            titleStyle.setVerticalAlignment(XSSFCellStyle.VERTICAL_CENTER);
            titleStyle.setFillForegroundColor(new XSSFColor(new java.awt.Color(255, 255, 255)));
            titleStyle.setFillPattern(XSSFCellStyle.SOLID_FOREGROUND);
            titleStyle.setFont(titleFont);
            setBorder(titleStyle, BorderStyle.THIN, new XSSFColor(new java.awt.Color(133, 5, 11)));
            return titleStyle;
        }
    
        /**
         * sheet1 标题居中
         *
         * @param wb 表信息
         * @return XSSFCellStyle
         */
        public static XSSFCellStyle getBlackTitle(XSSFWorkbook wb) {
            //字体样式
            Font titleFont = wb.createFont();
            titleFont.setFontName("宋体");
            titleFont.setItalic(false);
            titleFont.setFontHeightInPoints((short) 22);
            titleFont.setColor(IndexedColors.BLACK.index);
            //表头样式
            XSSFCellStyle titleStyle = wb.createCellStyle();
            titleStyle.setAlignment(XSSFCellStyle.ALIGN_CENTER);
            titleStyle.setVerticalAlignment(XSSFCellStyle.VERTICAL_CENTER);
            titleStyle.setFillForegroundColor(new XSSFColor(new java.awt.Color(255, 255, 255)));
            titleStyle.setFillPattern(XSSFCellStyle.SOLID_FOREGROUND);
            titleStyle.setFont(titleFont);
            return titleStyle;
        }
    
    
        /**
         * sheet1 标题下面的信息格式
         *
         * @param wb 表信息
         * @return XSSFCellStyle
         */
        public static XSSFCellStyle getBlack2(XSSFWorkbook wb) {
            //字体样式
            Font titleFont = wb.createFont();
            titleFont.setFontName("宋体");
            titleFont.setItalic(false);
            titleFont.setFontHeightInPoints((short) 16);
            titleFont.setColor(IndexedColors.BLACK.index);
            //表头样式
            XSSFCellStyle titleStyle = wb.createCellStyle();
            titleStyle.setVerticalAlignment(XSSFCellStyle.VERTICAL_CENTER);
            titleStyle.setFillForegroundColor(new XSSFColor(new java.awt.Color(255, 255, 255)));
            titleStyle.setFillPattern(XSSFCellStyle.SOLID_FOREGROUND);
            titleStyle.setFont(titleFont);
            return titleStyle;
        }
    
        /**
         * sheet1 设置表头,包括格式和背景颜色
         *
         * @param sheet        表信息
         * @param columnNumber 颜色号
         */
        public static void autoSizeColumns(Sheet sheet, int columnNumber) {
            for (int i = 0; i < columnNumber; i++) {
                int orgWidth = sheet.getColumnWidth(i);
                sheet.autoSizeColumn(i, true);
                int newWidth = (sheet.getColumnWidth(i) + 100);
                if (newWidth > orgWidth) {
                    sheet.setColumnWidth(i, newWidth);
                } else {
                    sheet.setColumnWidth(i, orgWidth);
                }
            }
        }
    
        @Target({ElementType.FIELD})
        @Retention(RetentionPolicy.RUNTIME)
        @Documented
        public @interface Column {
            String name() default "";
        }
    
        @Target({ElementType.TYPE})
        @Retention(RetentionPolicy.RUNTIME)
        @Documented
        public @interface ExcelName {
            String name() default "";
        }
    
        public static ExcleVO getNameAndColumn(Class<?> clazz, List<String> selColumns) {
            ExcleVO excleVO = new ExcleVO();
            List<String> heads = new ArrayList<>();
            heads.add("序号");
            Map<String, Integer> position = new HashMap<>(16);
            excleVO.setColums(heads);
            excleVO.setPosition(position);
            Class<ExcelName> excelNameClass = ExcelName.class;
            Class<Column> columnClass = Column.class;
            if (clazz.isAnnotationPresent(excelNameClass)) {
                //获取类上的名称
                ExcelName annotation = clazz.getAnnotation(excelNameClass);
                excleVO.setName(annotation.name());
            }
            Field[] declaredFields = clazz.getDeclaredFields();
            int i = 0;
            for (Field field : declaredFields) {
                //((selColumns==null || selColumns.size() == 0)?true:selColumns.contains(field.getName()))  这个判断意思是,如果selColumns为空时,就表示不是动态字段,不需要再做后续判断
                if (field.isAnnotationPresent(columnClass) && ((selColumns==null || selColumns.size() == 0)?true:selColumns.contains(field.getName()))) {
                    Column annotation = field.getAnnotation(columnClass);
                    heads.add(annotation.name());
                    position.put(field.getName(), i);
                    i++;
                }
            }
            return excleVO;
        }
    
        /**
         * sheet1写正式数据
         *
         * @param wb       表信息
         * @param sheet    表信息
         * @param datas     写入的数据
         * @param rowIndex 从第几行开始
         */
        public static <T> void writeRowsToExcel1(XSSFWorkbook wb, Sheet sheet, List<T> datas, int rowIndex, Map<String, Integer> position, XSSFDrawing patriarch) throws Exception {
            XSSFCellStyle dataStyle = ExcelUtils.getDataStyle(wb);
            XSSFCellStyle dataStyle1 = ExcelUtils.getDataStyle(wb);
            XSSFDataFormat dataFormat = wb.createDataFormat();
            dataStyle1.setDataFormat(dataFormat.getFormat("@"));
            for (int i = 0; i < datas.size(); i++) {
                T g = datas.get(i);
                Row dataRow = sheet.createRow(i + rowIndex);
                Cell cell0 = dataRow.createCell(0);
                cell0.setCellValue(i + 1);
                cell0.setCellStyle(dataStyle);
                ExcelUtils.createExcel(dataRow, g, dataStyle, dataStyle1, position, wb, patriarch);
            }
        }
    }
    
    
    展开全文
  • poi 导入 Excel

    2015-05-05 12:46:17
     Excel导入之后,将文件放入输入流(InputStream),然后放入XSSFWorkbook就可以对导入Excel文件执行相应操作,使用XSSFSheet找到数据所在的工作表,然后使用XSSFRow遍历每一行数据,用XSSFCell指定到对应的单元格...

    思想:
            Excel导入之后,将文件放入输入流(InputStream),然后放入XSSFWorkbook就可以对导入的Excel文件执行相应操作,使用XSSFSheet找到数据所在的工作表,然后使用XSSFRow遍历每一行数据,用XSSFCell指定到对应的单元格,这样就可以对应到每一个单元格数据(行和列均从0开始计算),取出数据之后就可以做相应的业务操作了。

     poi 依赖的 jar 包:
           poi-3.9-20121203.jar
           poi-ooxml-3.9-20121203.jar
           poi-ooxml-schemas-3.9-20121203.jar
           xmlbeans-2.3.0.jar

    导入Excel后的解析过程(源码):

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    public static void read(InputStream inputStream) throws IOException{
        //初始整个Excel
        XSSFWorkbook workbook = new XSSFWorkbook(inputStream);
        //获取第一个Sheet表
        XSSFSheet sheet = workbook.getSheetAt(0);//或者 HSSFSheet sheet = workbook.getSheet("Sheet1");
        for(int rowIndex = 1; rowIndex <= sheet.getLastRowNum(); rowIndex++){
            XSSFRow row = sheet.getRow(rowIndex);
            if(row == null){
                continue;
            }
            int end = 0;
            //循环该行的每一个单元格
            for(int cellnum = 0; cellnum < row.getLastCellNum(); cellnum++){
                XSSFCell cell = row.getCell(cellnum);
                if (cellnum == 0) {
                    end = getCellValue(cell,rowlndex,0)
                }
                //打印出Excel中内容
                System.out.prinln(getCellValue(cell, rowIndex, cellnum));
            }
        }
        if ("end".qeuald(end)) {
            //end为在Excel中最后一行数据后面的结束标志,执行到结束标记可结束循环
            break;
        }
    }
     
    龙睿学长封装好的解析类型数据方法(源码):
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    /**
     * 得到某个单元格的值
     * @param cell  需要传入的单元格
     * @param rowIndex  传入的单元格所在的行数,默认从0开始
     * @param cellnum   传入的单元格所在的列数,默认从0开始
     * @return  String类型的值,数字也将转换成字符串。
     */
    public static String getCellValue(XSSFCell cell, int rowIndex, int cellnum) {
        String cellValue = "";
        if(cell == null){
            return " ";
        } else if (cell.getCellType() == XSSFCell.CELL_TYPE_BLANK) {
            cellValue = " ";
        } else if (cell.getCellType() == XSSFCell.CELL_TYPE_STRING) {
            cellValue = cell.getRichStringCellValue().getString().trim();
        } else if (cell.getCellType() == XSSFCell.CELL_TYPE_NUMERIC) {
            cellValue = Double.toString(cell.getNumericCellValue());
        } else if (cell.getCellType() == XSSFCell.CELL_TYPE_BOOLEAN) {
            cellValue = Boolean.toString(cell.getBooleanCellValue());
        } else if (cell.getCellType() == XSSFCell.CELL_TYPE_FORMULA) {
            cellValue = Double.toString(cell.getNumericCellValue());
        }
        return cellValue;
    }
     
    结束语:
                本以为解析Excel很难,迟迟不肯动手,事实上也不是很难,只要肯动手操作,遇到问题努力去解决,什么问题终将不是问题,所有问题的存在的同时答案亦存在,只要肯去寻找。这次解决解析Excel也使用了不到一天的时间,虽然遇到了许多问题,但是最终还是圆满的完成了任务,同时收获良多,下次继续努力。
    展开全文
  • POI导入Excel,详细内容查看博客 POI导入Excel文件--form表单提交 内容
  • POI导入excel数据时,日期格式(如2018/7/7)数据默认会被解析成double格式,解决方法如下:[code]package com.test.util;import java.text.DateFormat;import java.text.SimpleDateFormat;import java.util.Date;...
  • SpringMvc+POI 导入Excel

    2015-11-18 10:17:32
    SpringMvc+POI 导入Excel文件,采用简单的form表单提交方式和Jquery.form.js插件提供的异步表单方式导入Excel数据
  • poi导入excel 兼容2003-2007兼容版本,测试可以成功;poi导入excel 兼容2003-2007兼容版本,测试可以成功;
  • java 读取excel数据 poi导入excel 数据 java实现导入excel数据 一、说明 1、在实际开发中,可能有需求需要将excel导入到业务系统中,具体实现可以使用Apache poi 来实现。 2、依赖pom如下: <dependency>...
  • 主要介绍了Java 中POI 导入EXCEL2003 和EXCEL2007的实现方法的相关资料,希望通过本文大家能掌握理解这种方法,需要的朋友可以参考下
  • poi导入excel示例文件.xlsx
  • poi就是批量的操作文件或数据的导入以及导出。,poi导入excel表需要的jar
  • poi导入excel的demo

    2018-08-20 15:50:46
    poi导入导出excel,支持xls和xlsx。poi导入导出excel,支持xls和xlsx。
  • poi导入excel示例文件.xlsx
  • POI 导入Excel 提醒LeftoverDataException求帮助
  • 通用的POI导入excel解决方法,方便,简易,内附jar包
  • 主要给大家介绍了关于在java poi导入Excel通用工具类的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
  • Java POI导入Excel

    2017-08-28 16:17:36
    Java POI导入Excel注意点记住导入的jar包需要版本一致,否则会抛异常高版本的workbook没有了close方法解析2000-2007的xls文件使用HSSFWorkbook类解析2010的xlsx文件使用XSSFWorkbook类精确获取内容格cell只有一个方法...
  • 使用poi导入excel详细代码

    千次阅读 2020-08-18 18:21:34
    使用poi导入excel详细代码 1.导入依赖 <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-scratchpad</artifactId> <version>3.10.1</version> <...
  • java 用POI导入Excel的时候会遇到一个问题:区分时间数值和数值 获取单元格数据类型的时候,数值和时间是统一用 的 NUMERIC 枚举来区分的, 常规时间类型和数值可以用DateUtil.isCellDateFormatted(cell)来区分; ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,448
精华内容 2,979
关键字:

poi导入excel