精华内容
下载资源
问答
  • POI解析Excel表格

    2020-03-02 15:45:05
    POI解析Excel表格食谱准备食材第一道菜第二道菜下锅炸至两面金黄吃一口嘎嘣脆 Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能。 这里实现poi解析Excel...

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

    这里实现poi解析Excel表格的例子,导入Excel

    准备食材

    第一道菜

    在这里插入图片描述

    第二道菜

    在这里插入图片描述

    下锅炸至两面金黄

    package com.ftx.poi;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.text.DecimalFormat;
    import java.text.SimpleDateFormat;
    import java.util.ArrayList;
    import java.util.Date;
    import java.util.List;
    
    import org.apache.poi.hssf.usermodel.HSSFDataFormat;
    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;
    
    public class ParseExcel {
    /**
     * 解析文件的方法
     *@param inputStream文件输入流 ,要解析的Excel文件输入流
     *@param suffix 后缀名,xls或xlsx,代码决定使用什么方式解析Excel
     *@param startRow 从第几行开始读取数据
     *@return List<String[]> 集合中的一个元素对应一行解析的数据
     * 		元素为字符串数组类型,数组中的每一个元素对应一列数据
     * @throws IOException 
     */
    	
    	public List<String[]> parseExcel(InputStream inputStream,String suffix,int startRow) throws IOException{
    		//定义Excel对象变量
    		Workbook workbook=null;
    		//判断后缀 决定使用的解析方式,决定如何创建具体的对象
    		if("xls".equals(suffix)) {
    			//2003版的解析方式
    			workbook=new HSSFWorkbook(inputStream);
    		}else if("xlsx".equals(suffix)) {
    			//2007
    			workbook=new XSSFWorkbook(inputStream);
    		}else {
    			//未知内容
    			return null;
    		}
    		//获取工作表,Excel分为若干个表,sheet
    		Sheet sheet = workbook.getSheetAt(0);//得到第一个表格sheet
    		if(sheet==null) {
    			return null;
    		}
    		//获取表格中最后一行的行号
    		int lastRowNum = sheet.getLastRowNum();
    		//最后一行的行号大于startRow
    		if(lastRowNum<=startRow) {
    			return null;
    		}
    		List<String[]> result=new ArrayList<String[]>();
    		
    		//定义行变量和单元格变量
    		Row row=null;
    		Cell cell=null;
    		//循环读取
    		for (int rowNum = startRow; rowNum <= lastRowNum; rowNum++) {
    			row=sheet.getRow(rowNum);
    			//获取当前行的第一列和最后一列的标记
    			short firstCellNum = row.getFirstCellNum();
    			short lastCellNum = row.getLastCellNum();
    			if(lastCellNum!=0) {
    				String[] rowArray=new String[lastCellNum];
    				for(int cellNum=firstCellNum;cellNum<lastCellNum;cellNum++) {
    					//拿到单元格的值
    					cell=row.getCell(cellNum);
    					//判断单元格是否有数据
    					if(cell==null) {
    						rowArray[cellNum]=null;
    					}else {
    						rowArray[cellNum]=parseCell(cell);
    					}
    				}
    				result.add(rowArray);
    			}
    		}
    		
    		
    		
    		return result;
    	}
    	/**
    	 * 解析单元格数据(返回字符串)
    	 */
    
    private String parseCell(Cell cell) {
    	String cellStr=null;
    	//判断单元格的类型
    	switch (cell.getCellType()) {
    	case STRING :
    		//字符串类型单元格
    		cellStr=cell.getRichStringCellValue().toString();
    		break;
    	case BLANK :
    		//空数据
    		cellStr="";
    		break;
    	case NUMERIC :
    		//数字类型  包含日期、时间、数字
    		//判断日期【年月日2016-12-20  | 时分10:20】类型
    		if(HSSFDateUtil.isCellDateFormatted(cell)) {
    			//判断具体类型,是日期还是时间
    			SimpleDateFormat sdf=null;
    			if(cell.getCellStyle().getDataFormat()==HSSFDataFormat.getBuiltinFormat("h:mm")) {
    				//时间
    				sdf=new SimpleDateFormat("HH:mm");
    			}else {
    				//日期
    				sdf=new SimpleDateFormat("yyyy-MM-dd");
    			}
    			Date temp = cell.getDateCellValue();
    			cellStr=sdf.format(temp);
    		}else {
    			//数字
    			double temp=cell.getNumericCellValue();
    			//数字格式化工具
    			DecimalFormat format=new DecimalFormat();
    			//查看单元格中的具体样式类型
    			String formatStr=cell.getCellStyle().getDataFormatString();
    			if(formatStr.equals("General")) {
    				/**
    				 * 定义格式化正则
    				 * 保留一位小数 #.#
    				 * 保留两位小数#.##
    				 */
    				format.applyPattern("#");
    			}
    			
    			cellStr=format.format(temp);
    		}
    		break;
    	default:
    		cellStr="";
    		
    	}
    	return cellStr;
    }
    	
    }
    
    

    吃一口嘎嘣脆

    public class Test {
    
    	public static void main(String[] args) throws IOException {
    		ParseExcel parser=new ParseExcel();
    		InputStream inputStream=new FileInputStream("D:\\工作内容\\poiTestTwo.xls");
    		String suffix="xls";
    		int startRow=1;
    		List<String[]> result = parser.parseExcel(inputStream, suffix, startRow);
    		for(String[] i:result) {
    			//Arrays.toString("字符串数组")  打印字符串数组,直接打印字符串数组会打印出数组的地址
    			System.out.println(Arrays.toString(i));
    		}
    	}
    
    }
    

    运行测试类,解析出了Excel表格的内容。
    在这里插入图片描述
    说明:上面的poi只能是解析03和07版本的Excel,如果不是这个版本的Excel的话需要另存为03或07版本然后再进行解析,否则会报错找不到对应的jar包。
    在这里插入图片描述
    现在只是把Excel表格的内容解析成了字符串数组的形式,如果导入到数据库的话还需要再对其字符串数组进行处理。

    思路提示:实现在页面点击按钮导入Excel表格进行导入的功能,使用<input type="file" />表单提交,在controller中接收到的就是File对象,就不用像上面的测试类中写死的样子了。
    根据suffix判断表格文件的版本(获取后缀参考图片上传)

     public String upload(@RequestParam(value = "pic") MultipartFile pic,@RequestParam Map param,Model model) throws ParseException {
        String fileName=pic.getOriginalFilename();//得到文件名
        String suffixName=fileName.substring(fileName.lastIndexOf("."));//得到后缀名
    
    展开全文
  • Excel表格是常用的数据存储工具,项目中经常会遇到导入Excel和导出Excel的功能。 常见的Excel格式有xls和xlsx。07版本以后主要以基于XML的压缩格式作为默认文件格式xlsx。新格式主要是使用了OpenXML标准,结合了XML...

    概述

    Excel表格是常用的数据存储工具,项目中经常会遇到导入Excel和导出Excel的功能。
    常见的Excel格式有xls和xlsx。07版本以后主要以基于XML的压缩格式作为默认文件格式xlsx。新格式主要是使用了OpenXML标准,结合了XML与Zip压缩技术。在这里就不细说,感兴趣的读者可以自行去查找相关知识。本文将重点以这两种文件格式的解析来展开。
    Excel主要有以下部分组成:
    一个Excel相当于一个工作簿(WorkBook);
    每个sheet相当于一张表格;
    sheet里面又由单元格Cell组成;

    操作Excel的方式

    Java提供了操作Excel的api JXL(Java Excel API),但是JXL只支持07版本以前,也就是xls后缀的Excel。因此使用中通常使用apache的POI

    maven中的POI依赖

    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi</artifactId>
        <version>4.0.1</version>
    </dependency>
    <!-- 07版本以后的格式 -->
    <dependency>
        <groupId>org.apache.poi</groupId>
        <artifactId>poi-ooxml</artifactId>
        <version>4.0.1</version>
    </dependency>
    

    其中最顶层接口Workbook;主要有三个实现类XSSFWorkbook、HSSFWorkbook、SXSSFWorkbook。

    XSSFWorkbook

    XSSFWorkbook主要用于解析xlsx。

    @Test
    public void testXlsx(){
            File file = new File("C:\\Users\\Administrator\\Desktop\\pdf\\test.xlsx");
            if(!file.exists()){
                System.out.println("文件不存在");
                return ;
            }
            FileInputStream fis = null;
            Workbook workBook = null;
            try {
                fis = new FileInputStream(file);
                workBook = new XSSFWorkbook(fis); // 使用XSSFWorkbook
                dealWorkBook(workBook); // 将代码封装复用,见下一个方法
    
            } catch (Exception e) {
                e.printStackTrace();
            } finally{ //关流
                if(fis != null) {
                    try {
                        fis.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
                if(workBook != null){
                    try {
                        workBook.close();
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                }
            }
    
        }
    
    public void dealWorkBook(Workbook workBook){
            Sheet sheet = workBook.getSheetAt(0); // 获取第一个sheet
            Map<Integer, List<String>> map = new HashMap<Integer, List<String>>(); //第一个参数表示行数 第二个List保存该行的cell数据
            int i = 0;
            for(Row row : sheet){
                map.put(i, new ArrayList<String>());
                for(Cell cell : row){ // 遍历当前行的所有cell
                    switch(cell.getCellType()) {
                        case STRING:
                            map.get(i).add(cell.getRichStringCellValue().getString()); // 如果是字符串则保存
                            break;
                        case _NONE:
                            break;
                        case NUMERIC:
                            map.get(i).add(cell.getNumericCellValue()+""); //将数值转换为字符串
                            break;
                        case BOOLEAN:
                            break;
                        case FORMULA:
                            break;
                        case BLANK:
                            break;
                        case ERROR:
                            break;
                    }
                }
                i++;
            }
            Set<Integer> keys = map.keySet(); // 以下为遍历 Map看解析结果
            Iterator<Integer> it = keys.iterator();
            while(it.hasNext()){
                List<String> list = map.get(it.next());
                for(String s : list){
                    System.out.print(s+"      ");
                }
                System.out.println();
            }
        }
    

    运行结果如下

    1.0      2.0      3.0      4.0      
    a      b      c      d      
    7.0      8.0      9.0      10.0      
    e      f      g      h      
    

    HSSFWorkbook

    HSSFWorkbook主要用于解析xls
    代码如下

        @Test
        public void testXls() throws Exception{
            File file = new File("D:\\excelTest\\test2.xls");
            if(!file.exists()){
                System.out.println("文件不存在");
                return ;
            }
            FileInputStream fis = new FileInputStream(file);
            Workbook workBook = new HSSFWorkbook(fis, true); // 使用HSSFWorkbook 构造函数略有不同 true表示转化成为Nodes
            dealWorkBook(workBook); // 复用上面的方法
            workBook.close();
            fis.close();
        }
    

    解析结果如下

    1.0      2.0      3.0      4.0      
    a      b      c      d      
    7.0      8.0      9.0      10.0      
    e      f      g      h      
    11.0      12.0      13.0      14.0  
    

    本文参考了https://blog.csdn.net/holmofy/article/details/82532311

    展开全文
  • Java poi解析excel

    2021-09-03 14:30:23
    Java poi解析excel 首先先添加依赖 <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>3.17</version> </...

    Java poi解析excel

    首先先添加依赖

            <dependency>
                <groupId>org.apache.poi</groupId>
                <artifactId>poi-ooxml</artifactId>
                <version>3.17</version>
            </dependency>
    

    代码解析excel,这里借鉴了以为博主的源码请看这里https://blog.csdn.net/weixin_44001965/article/details/102501772

    package com.wrq.testexcel;
    
    import org.apache.poi.hssf.usermodel.HSSFDataFormat;
    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 java.io.IOException;
    import java.io.InputStream;
    import java.text.DecimalFormat;
    import java.text.SimpleDateFormat;
    import java.util.ArrayList;
    import java.util.Date;
    import java.util.List;
    
    public class ParseExcel {
    
    
    
    
        /**
             * 解析文件的方法
             *@param inputStream 文件输入流,要解析的Excel文件输入流
             *@param suffix 后缀名,xls或xlsx,代码决定使用什么方式解析Excel
             *@param startRow 从第几行开始读取数据
             *@return List<String[]> 集合中的一个元素对应一行解析的数据
             * 		元素为字符串数组类型,数组中的每一个元素对应一列数据
             * @throws IOException
             */
    
            public static List<String[]> parseExcel(InputStream inputStream, String suffix, int startRow) throws IOException {
                //定义Excel对象变量
                Workbook workbook=null;
                //判断后缀 决定使用的解析方式,决定如何创建具体的对象
                if("xls".equals(suffix)) {
                    //2003版的解析方式
                    workbook=new HSSFWorkbook(inputStream);
                }else if("xlsx".equals(suffix)) {
                    //2007
                    workbook=new XSSFWorkbook(inputStream);
                }else {
                    //未知内容
                    return null;
                }
                //获取工作表,Excel分为若干个表,sheet
                Sheet sheet = workbook.getSheetAt(0);//得到第一个表格sheet
                if(sheet==null) {
                    return null;
                }
                //获取表格中最后一行的行号
                int lastRowNum = sheet.getLastRowNum();
                //最后一行的行号大于startRow
                if(lastRowNum<=startRow) {
                    return null;
                }
                List<String[]> result=new ArrayList<String[]>();
    
                //定义行变量和单元格变量
                Row row=null;
                Cell cell=null;
                //循环读取
                for (int rowNum = startRow; rowNum <= lastRowNum; rowNum++) {
                    row=sheet.getRow(rowNum);
                    //获取当前行的第一列和最后一列的标记
                    short firstCellNum = row.getFirstCellNum();
                    short lastCellNum = row.getLastCellNum();
                    if(lastCellNum!=0) {
                        String[] rowArray=new String[lastCellNum];
                        for(int cellNum=firstCellNum;cellNum<lastCellNum;cellNum++) {
                            //拿到单元格的值
                            cell=row.getCell(cellNum);
                            //判断单元格是否有数据
                            if(cell==null) {
                                rowArray[cellNum]=null;
                            }else {
                                rowArray[cellNum]=parseCell(cell);
                            }
                        }
                        result.add(rowArray);
                    }
                }
    
    
    
                return result;
            }
            /**
             * 解析单元格数据(返回字符串)
             */
    
            private static String parseCell(Cell cell) {
                String cellStr=null;
                //判断单元格的类型
                switch (cell.getCellTypeEnum()) {
                    case STRING :
                        //字符串类型单元格
                        cellStr=cell.getRichStringCellValue().toString();
                        break;
                    case BLANK :
                        //空数据
                        cellStr="";
                        break;
                    case NUMERIC :
                        //数字类型  包含日期、时间、数字
                        //判断日期【年月日2016-12-20  | 时分10:20】类型
                        if(HSSFDateUtil.isCellDateFormatted(cell)) {
                            //判断具体类型,是日期还是时间
                            SimpleDateFormat sdf=null;
                            if(cell.getCellStyle().getDataFormat()== HSSFDataFormat.getBuiltinFormat("h:mm")) {
                                //时间
                                sdf=new SimpleDateFormat("HH:mm");
                            }else {
                                //日期
                                sdf=new SimpleDateFormat("yyyy-MM-dd");
                            }
                            Date temp = cell.getDateCellValue();
                            cellStr=sdf.format(temp);
                        }else {
                            //数字
                            double temp=cell.getNumericCellValue();
                            //数字格式化工具
                            DecimalFormat format=new DecimalFormat();
                            //查看单元格中的具体样式类型
                            String formatStr=cell.getCellStyle().getDataFormatString();
                            if(formatStr.equals("General")) {
                                /**
                                 * 定义格式化正则
                                 * 保留一位小数 #.#
                                 * 保留两位小数#.##
                                 */
                                format.applyPattern("#");
                            }
    
                            cellStr=format.format(temp);
                        }
                        break;
                    default:
                        cellStr="";
    
                }
                return cellStr;
            }
    
    
    
    
    }
    
    

    接下来就是根据自己的业务需求对excel惊醒修改,这里是根据我自己的需求为例:需求:将一张表的A列里数字代码的内容根据数字代码对应关系修改成B列的中文名成,然后将这两列中带有关键字的一行在最后一个单元格中添加“是”

    package com.wrq.testexcel;
    
    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 java.io.*;
    import java.util.*;
    
    public class UpdateExcel {
        public static void main(String[] args) throws IOException {
            InputStream inputStream=new FileInputStream("D:/testFile/REQMT20210827180243_sys_office(1)(1)(1).xlsx");
            String suffix="xlsx";
            int startRow=1;
            //读取文件获得数据
            List<String[]> alllist = ParseExcel.parseExcel(inputStream, suffix, startRow);
            //存ID和NAME
            Map<String,String> idAndName=new HashMap<>();
            String[] IDS={};
            List<String> stringList=null;
            //存新数据
            List<String> PARENT_IDSList=new ArrayList<>();
            //先将Id和name全部存入到另一个集合里
            for (String[] str:alllist) {
                stringList= Arrays.asList(str);
                String ID = stringList.get(0);
                String NAME = stringList.get(3);
                idAndName.put(ID,NAME);
            }
            for (String[] str:alllist) {
                stringList = Arrays.asList(str);
                //找到需要修改的一列
                IDS = stringList.get(2).split(",");
                for (int i = 0; i < IDS.length; i++) {
                    String id = IDS[i];
                    if (!Objects.isNull(id)) {
                        //更改为需要的数据
                        String name = idAndName.get(id);
                        if (null==name){
                            IDS[i]=id;
                        }else {
                            IDS[i]=name;
                        }
                    }
                }
                //重新拼接新数据
                String PARENT_IDS=String.join(",",IDS);
                PARENT_IDSList.add(PARENT_IDS);
               
            }
            motif(PARENT_IDSList);
            //System.out.println(alllist.size());
            inputStream.close();
        }
        public static void motif(List<String> PARENT_IDSList) throws IOException {
            //根据需求定义关键字
            List<String > senWords=Arrays.asList("美容,美发,整容,大客户,健身".split(","));
            InputStream inputStream=new FileInputStream("D:/testFile/REQMT20210827180243_sys_office(1)(1)(1).xlsx");
            OutputStream outputStream=new FileOutputStream("D:/testFile/REQMT20210827180243_sys_office.xlsx");
            //获取文件
            Workbook workbook=new XSSFWorkbook(inputStream);
            //获取excel
            Sheet sheet = workbook.getSheet("Sheet1");
            int lastRowNum = sheet.getLastRowNum();
            for (int i=1;i<lastRowNum;i++){
                //获取每一行
                Row row = sheet.getRow(i);
                if (null!=row){
                    //获取需要的单元格
                    Cell cell = row.getCell(2);
                    String IDS = PARENT_IDSList.get(i-1);
                    //修改内容
                    if (null!=IDS){
                        cell.setCellValue(IDS);
                    }
                    Cell govCell = row.getCell(15);
                    if (null==govCell){
                        govCell= row.createCell(15);
                    }
                    //根据关键字修改内容
                    Cell nameCell= row.getCell(3);
                    String name = nameCell.getStringCellValue();
                    for (String words: senWords) {
                       if (IDS.contains(words)){
                           govCell.setCellValue("是");
                       }
                       if (name.contains(words)){
                           govCell.setCellValue("是");
                       }
                    }
                }
            }
            workbook.write(outputStream);
            inputStream.close();
            outputStream.close();
    
        }
    }
    
    
    展开全文
  • java通过POI解析Excel表格内容

    千次阅读 2017-04-13 10:50:47
    为了使用SpringMVC读取参数使用MultipartFile接收参数,但MultipartFile与File不同,传参时经常会出现错误,可以通过... public ModelAndView readExcel(MultipartFile aaa){ ModelAndView mav=new ModelAndView();

    为了使用SpringMVC读取参数使用MultipartFile接收参数,但MultipartFile与File不同,传参时经常会出现错误,可以通过getInputStream讲其转换为IO流做进一步处理。

        public ModelAndView readExcel(MultipartFile aaa){
    
            ModelAndView mav=new ModelAndView();
            BufferedInputStream bf=null;
            try {
                bf=new BufferedInputStream(aaa.getInputStream());
            } catch (Exception e) {
                e.printStackTrace();
            }
    
            XSSFWorkbook workbook=null;
            try {
                workbook=new XSSFWorkbook(bf);
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
    
            System.out.println("___workbook__"+workbook);
            XSSFSheet sheet = workbook.getSheetAt(0);
            for (int rowIndex = 0; rowIndex <= sheet.getLastRowNum(); rowIndex++) {  
                XSSFRow row = sheet.getRow(rowIndex);  
                if (row == null) {  
                    continue;  
                }  
                XSSFCell cell = null;  
                for (short columnIndex = 0; columnIndex <= row.getLastCellNum(); columnIndex++) {  
                    String value = "";  
                    cell = row.getCell(columnIndex);  
                    if (cell != null) {  
                        // 注意:一定要设成这个,否则可能会出现乱码  
                        // cell.setEncoding(HSSFCell.ENCODING_UTF_16);  
                        switch (cell.getCellType()) {  
                        case XSSFCell.CELL_TYPE_STRING:  
                            value = cell.getStringCellValue();  
                            break;  
                        case XSSFCell.CELL_TYPE_NUMERIC:  
                            if (HSSFDateUtil.isCellDateFormatted(cell)) {  
                                Date date = cell.getDateCellValue();  
                                if (date != null) {  
                                    value = new SimpleDateFormat("yyyy-MM-dd")  
                                            .format(date);  
                                } else {  
                                    value = "";  
                                }  
                            } else {  
                                value = new DecimalFormat("0").format(cell  
                                        .getNumericCellValue());  
                            }  
                            break;  
                        case XSSFCell.CELL_TYPE_FORMULA:  
                            // 导入时如果为公式生成的数据则无值  
                            if (!cell.getStringCellValue().equals("")) {  
                                value = cell.getStringCellValue();  
                            } else {  
                                value = cell.getNumericCellValue() + "";  
                            }  
                            break;  
                        case XSSFCell.CELL_TYPE_BLANK:  
                            break;  
                        case XSSFCell.CELL_TYPE_ERROR:  
                            value = "";  
                            break;  
                        case XSSFCell.CELL_TYPE_BOOLEAN:  
                            value = (cell.getBooleanCellValue() == true ? "Y" : "N");  
                            break;  
                        default:  
                            value = "";  
                        }  
                    }  
                    if (columnIndex == 0 && value.trim().equals("")) {  
                        break;  
                    }  
                    //excel表格中字段顺序为:用户名,密码,电话和地址,为方便起见假设字段一一对应  
                    if (columnIndex == 0) {  
                        String n = value;
                        System.out.print(n+" ");
                    } else if (columnIndex == 1) {  
                        String v = value;
                        System.out.print(v+" ");
                    } else if (columnIndex == 2) {  
                        String v = value;
                        System.out.print(v+" ");
                    } else if (columnIndex == 3) {  
                        String v = value;
                        System.out.println(v+" ");
                    } 
                }  
            }
            mav.setViewName("wm/wmTcDaily/edit");
            return mav;
        }

    通过测试可以把excel文件中的内容输入至控制台,后续操作可将取得的字段封入实体类,进一步存入List,最终存入数据库

    导出excel表文件:

    @RequestMapping("/download")
        public ModelAndView transferExcel(HttpServletResponse response){
            ModelAndView mav=new ModelAndView();
            //创建HSSFWorkbook对象(excel的文档对象)  
            HSSFWorkbook wkb = new HSSFWorkbook();  
            //建立新的sheet对象(excel的表单)  
            HSSFSheet sheet=wkb.createSheet("成绩表");  
            //在sheet里创建第一行,参数为行索引(excel的行),可以是065535之间的任何一个  
            HSSFRow row1=sheet.createRow(0);  
            //创建单元格(excel的单元格,参数为列索引,可以是0255之间的任何一个  
            HSSFCell cell=row1.createCell(0);  
            //设置单元格内容  
            cell.setCellValue("学员考试成绩一览表");  
            //合并单元格CellRangeAddress构造参数依次表示起始行,截至行,起始列, 截至列  
            sheet.addMergedRegion(new CellRangeAddress(0,0,0,3));  
            //在sheet里创建第二行  
            HSSFRow row2=sheet.createRow(1);      
            //创建单元格并设置单元格内容  
            row2.createCell(0).setCellValue("姓名");  
            row2.createCell(1).setCellValue("班级");      
            row2.createCell(2).setCellValue("笔试成绩");  
            row2.createCell(3).setCellValue("机试成绩");      
            //在sheet里创建第三行  
            HSSFRow row3=sheet.createRow(2);  
            row3.createCell(0).setCellValue("李明");  
            row3.createCell(1).setCellValue("As178");  
            row3.createCell(2).setCellValue(87);      
            row3.createCell(3).setCellValue(78);      
            //输出Excel文件  
            OutputStream output;
            try {
                output = response.getOutputStream();
                response.reset();  
                response.setHeader("Content-disposition", "attachment; filename=details.xls");  
                response.setContentType("application/msexcel");          
                wkb.write(output);  
                output.close();  
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            mav.setViewName("wm/wmTcDaily/edit");
            return mav;
        }
    展开全文
  • Java poi读取Excel表格

    2015-11-16 19:56:43
    Java poi读取Excel表格,因为所用的是MongoDB数据库,用Document存储每行数据 上代码 import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io....
  • 应用 POI 解析 Excel 表格并批量上传到数据库   在日常生活中,我们时常会遇到添加用户之类的操作,但是这类操作,只能一位一位的添加。遇到向我这种强迫症晚期患者,会被烦死… 那么应用 POI 解析含有用户信息的 ...
  • 接下在就将针对java中使用poiexcel表格中的数据进行解析的过程进行讲解。 POI介绍 Apache POI是Apache软件基金会的开源项目,POI提供API给Java程序对Microsoft Office格式档案读和写的功能。 .NET的开发人员则...
  • POI解析Excel表格时,遇到的问题 1 . Duplicate classes: org/apache/xmlbeans/xml/stream/XMLName.class 参考https://issues.apache.org/jira/browse/XMLBEANS-499 在poi-ooxml中将xmlbeans排除,然后单独引入3.0.0...
  • 例子包含解析2003及之前版本和2007及之后版本。... * excel表格导入工具类 */ public class PoiExcel { public static List<Dto> getDataByPoi(String filePath){ Workbook wb = null; InputStr
  • Java poi读取Excel表格中公式的计算值

    万次阅读 2018-09-10 18:12:56
    当读取Excel表格,保存至Oracle数据库时,当需要保存格式为Number时,当读取到Excel中有公式时,会报错。 使用下面的处理方式可以解决该问题。 注:代码中的参数:value就是获取后保存的值 switch (cell....
  • 使用poi解析excel表格

    千次阅读 2016-01-11 18:55:02
    要特别指出:POI解析2003及2003以下,与解析2007及2007以上(底层XML实现)使用的类不同,因为其底层实现方式不同 2、写在前面的话:此方法仅仅适合数据量较小的情况,数据量较大的情况下,容易发生JVM内存溢出,...
  • POI 解析Excel表格实例

    2016-07-13 14:11:52
    最近项目中遇到的excle表格解析的事情,看之前的代码是用jxl解析了,解析较耗时,需要换成POI方式进行解析。 为此自己也写了个简单的测试例子,支持xls,和xlsx格式,未经细琢,仅供参考。 需要导入的jar包( ...
  • POI大家都不陌生,经常拿来解析excel表格。 其中,xls格式的需要使用HSSFWorkbook类来解析,xlsx格式的需要使用XSSFWorkbook格式来解析。 那么如何整合二者呢。 代码目录: 1.传入文件名称,获取workbook对象...
  • java poi导出excel 表格

    2016-06-17 15:27:41
    //循环解析 传入参数 写入表格 for (int i = 0; i (); i++) { row = sheet.createRow(i + 1); User user= bean.get(i); row.createCell(0).setCellValue(user.getID()); row.createCell(1).setCellValue...
  • import java.io.IOException; import java.io.InputStream; import java.io.PushbackInputStream; import java.util.ArrayList; import java.util.List;...import org.apache.poi.hssf.usermodel.HSSFCell; import or
  • java代码如下,接收的参数类型为MultipartFile xlsPath @RequestMapping( "/admin/begin_import.htm" ) public ModelAndView begin_import (HttpServletRequest request, HttpServletResponse response, ...
  • 1.在解析Excel表格中由纯数字组成的字符时会报错 String telephone = row.getCell(1).getStringCellValue(); 在得到一个字符串类型的手机号码时报错: java.lang.IllegalStateException: Cannot get a text ...
  • 文章目录系列文章目录前言——POI解析Excel表格POI解析Excel表格的使用总结 前言——POI解析Excel表格 Apache POI 是干嘛的呢 它是用来 解析 Excel表格的 解析这个表格有什么作用呢 使用场景 如果数据量大的话,...
  • 话不多说,直接贴代码,懂的自然懂 package com.iflytek.qb.util; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import j...
  • 在之前的一篇文章java操作Excel实战干货中展示了使用poi库读取excel表格的的用法,今天演示另一个常用功能,将数据导出到excel中,按照实战演练方式,后台提供接口,数据来源于数据库,然后导出excel输...
  • 下面小编就为大家带来一篇JavaPOI解析excel并获取所有单元格数据的实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,262
精华内容 1,704
关键字:

javapoi解析excel表格

java 订阅