精华内容
下载资源
问答
  • POI读取Excel指定数据

    千次阅读 2018-10-08 09:54:52
    * 读取指定路径指定表工具类 * 使用完需在调用位置:ReadExcelDataUtil.strLists.clear(); 将集合清空 * 以实现不重启项目一次读取多个Excel表格 * @author TL-thinkive-48 * */ public class ...

    1.代码展示 

    package com.XXXX.util;
    
    import java.io.FileInputStream;
    import java.io.IOException;
    import java.text.DecimalFormat;
    import java.text.SimpleDateFormat;
    import java.util.ArrayList;
    import java.util.List;
    
    import org.apache.poi.hssf.usermodel.HSSFCell;
    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.POIFSFileSystem;
    import org.apache.poi.ss.usermodel.DateUtil;
    
    /**
     * 读取指定路径指定表工具类
     * 使用完需在调用位置:ReadExcelDataUtil.strLists.clear(); 将集合清空
     * 以实现不重启项目一次读取多个Excel表格
     * @author TL-thinkive-48
     *
     */
    public class ReadExcelDataUtil {
    
    	private static String val = null;
    	private static SimpleDateFormat fmt = new SimpleDateFormat("yyyy-MM-dd");
    	private static DecimalFormat df = new DecimalFormat("0");
    	public static List<List<String>> strLists = new ArrayList<List<String>>();
    	private static HSSFWorkbook wb;
    
    	/**
    	 * 列数由形参传入,解决列情况: X,X,,X读取列数为3
    	 * 
    	 * @param filePath
    	 * @param colNum
    	 *            表的列数
    	 * @param index
    	 *            表的序号-部分表的字段采用vlookup关联,需上传多张表格
    	 * @return
    	 */
    	public static List<List<String>> readExcelData(String filePath, int colNum,
    			int index) {
    		FileInputStream file = null;
    		POIFSFileSystem ts = null;
    		try {
    			file = new FileInputStream(filePath);
    			ts = new POIFSFileSystem(file);
    			wb = new HSSFWorkbook(ts);
    			HSSFSheet sheet = wb.getSheetAt(index); // 获取表
    			int rowNum = sheet.getPhysicalNumberOfRows(); // 获取行数
    
    			HSSFRow row = null;
    
    			for (int i = 1; i < rowNum; i++) { 
    
    				List<String> list = new ArrayList<String>();
    				row = sheet.getRow(i);
    
    				for (int j = 0; j < colNum; j++) {
    					HSSFCell cell = row.getCell(j);
    					list.add(getXcellVal(cell));
    				}
    				strLists.add(list);
    			}
    			return strLists;
    		} catch (Exception e) {
    			e.printStackTrace();
    		} finally {
    			try {
    				file.close();
    				wb.close();
    			} catch (IOException e) {
    				e.printStackTrace();
    			}
    		}
    		return null;
    	}
    
    	/**
    	 * 获取单元格的值
    	 * 
    	 * @param cell
    	 * @return String
    	 */
    	public static String getXcellVal(HSSFCell cell) {
    
    		if (null == cell) {
    			return "";
    		}
    		switch (cell.getCellType()) {
    		case HSSFCell.CELL_TYPE_NUMERIC:
    			if (DateUtil.isCellDateFormatted(cell)) {
    				val = fmt.format(cell.getDateCellValue()); // 日期型
    			} else {
    				val = df.format(cell.getNumericCellValue()); // 数字型
    			}
    			break;
    		case HSSFCell.CELL_TYPE_STRING: // 文本类型
    			val = cell.getStringCellValue();
    			break;
    		case HSSFCell.CELL_TYPE_FORMULA: // 公式
    			try {
    				val = String.valueOf(cell.getStringCellValue());
    			} catch (IllegalStateException e) {
    				val = String.valueOf(cell.getNumericCellValue());
    			}
    			break;
    		case HSSFCell.CELL_TYPE_BLANK: // 空
    			val = cell.getStringCellValue();
    			break;
    		case HSSFCell.CELL_TYPE_BOOLEAN:// 布尔
    			val = String.valueOf(cell.getBooleanCellValue());
    			break;
    		case HSSFCell.CELL_TYPE_ERROR:// 错误
    			val = "ERROR..CHECK DATA";
    			break;
    		default:
    			val = cell.getRichStringCellValue() == null ? null : cell
    					.getRichStringCellValue().toString();
    		}
    
    		return val;
    	}
    }
    

    2.实例调用

    List<List<String>> dataList = ReadExcelDataUtil.readExcelData("filePath",要读取的列数,要读取的第几张表);

    以下表为例:

    则,调用如下

    List<List<String>> dataList = ReadExcelUtil.readExcelData("filePath",2,0);

     

    展开全文
  • Java操纵POI解析Excel表,根据表头将内容储存。通过实体类set、get方便其它方法引用
  • 前情:我做的是通过poi读取Excel中的手机号,然后发短信的功能。(maven项目 SpringMVC)实现步骤如下: POI版本3.8 下载地址:https://pan.baidu.com/s/1EbVFV2hRJbIhzKQhXmSJHA 将jar包放到lib目录下 并修改pom...

    前情:我做的是通过poi读取Excel中的手机号,然后发短信的功能。(maven项目 SpringMVC)实现步骤如下:

    1. POI版本3.8 下载地址:https://pan.baidu.com/s/1EbVFV2hRJbIhzKQhXmSJHA

    2. 将jar包放到lib目录下 并修改pom文件如图所示
      pom文件:
      在这里插入图片描述
      在这里插入图片描述
      3.Java部分
      Controler方法:

    @SuppressWarnings("unused")
         @RequestMapping(value = "smsdemo", produces =  "text/html;charset=utf-8",method = RequestMethod.POST)
         @ResponseBody
         public String smsdemo(@RequestParam("excelFile")MultipartFile  excelFile,String aliTemplateCode) throws Exception {
           JSONObject result = new JSONObject();
           //--------------------校验参数------------------------------
           if(excelFile.isEmpty()){
                result.put("success", 3000);
                result.put("msg","请上传文件!");
                return result.toString();
           }
           if("".equals(aliTemplateCode) || aliTemplateCode ==  null){
                result.put("success", 3000);
                result.put("msg","请填写模板编号!");
                return result.toString();
           }else{
                SmsTemplate template =  smsTemplateService.queryTemplateByAliCode(aliTemplateCode);
                if(template==null ||  "".equals(template.getTemplateContent())){
                     result.put("success", 3000);
                      result.put("msg","短信模板不存在!");
                      return result.toString();
                }
           }
          //-----------------------开始解析Excel-------------------------------
            // 创建excel工作簿对象
            Workbook workbook = null;
            FormulaEvaluator formulaEvaluator = null;
            InputStream is = excelFile.getInputStream();
            // 判断文件是xlsx还是xls
            if (excelFile.getOriginalFilename().endsWith("xlsx")) {
               workbook = new XSSFWorkbook(is);
                formulaEvaluator = new  XSSFFormulaEvaluator((XSSFWorkbook) workbook);
           }else {
                workbook = new HSSFWorkbook(is);
                formulaEvaluator = new  HSSFFormulaEvaluator((HSSFWorkbook) workbook);
            }
            //判断excel文件打开是否正确
            if(workbook == null){
                 result.put("success", 3000);
                result.put("msg","未读取到内容,请检查文件!");
                return result.toString();
            }
            //创建二维数组,储存excel行列数据
            ArrayList<ArrayList<String>> als = new  ArrayList<ArrayList<String>>();
            //遍历工作簿中的sheet
            for (int numSheet = 0; numSheet <  workbook.getNumberOfSheets(); numSheet++) {
                Sheet sheet = workbook.getSheetAt(numSheet);
                //当前sheet页面为空,继续遍历
                if (sheet == null) {
                    continue;
                    }
                // 对于每个sheet,读取其中的每一行
                for (int rowNum = 0; rowNum <= sheet.getLastRowNum();  rowNum++) {
                   Row row = sheet.getRow(rowNum);
                    if (row == null) {
                       continue;
                     }
                    // 遍历每一行的每一列
                    ArrayList<String> al = new ArrayList<String>();
                    for(int columnNum = 0 ; columnNum <  row.getLastCellNum(); columnNum++){
                       Cell cell = row.getCell(columnNum);
                       al.add(ExcelUtil.getValue(cell,  formulaEvaluator));
                       }
                    als.add(al);
                }
            }
            is.close();
           //------------------------开始发短信------------------------------------------------
           int count =0;
           for(ArrayList<String> list : als){
               for(String moblie : list){
                     try {
                     smsService.toTeacherV3Message(moblie,aliTemplateCode);
                    count++;
                    logger.info("batch count is "+ count );
                    } catch (Exception e) {
                    e.printStackTrace();
                    logger.info("batch is failed  mobilePhone="+moblie);
                    }
               }
           }
           result.put("success", 1000);
           return result.toString();
         }
    

    新建一个工具类ExcelUtil:

    import java.text.SimpleDateFormat;
    import org.apache.poi.ss.usermodel.Cell;
    import org.apache.poi.ss.usermodel.DateUtil;
    import org.apache.poi.ss.usermodel.FormulaEvaluator;
    importorg.springframework.stereotype.Component;
    /**
    * 读取Excel工具类
    * @author zx
    * @date 2018年11月20日
    */
    @Component
    public class ExcelUtil {
          /**
         * excel文件的数据读取,包括后缀为xls,xlsx
         * @param xssfRow
         * @author zx
         * @return
         */
        public static String getValue(Cell cell, FormulaEvaluator  formulaEvaluator) {
            if(cell==null){
                return null;
            }
            switch (cell.getCellType()) {
                case Cell.CELL_TYPE_STRING:
                    return cell.getRichStringCellValue().getString();
                case Cell.CELL_TYPE_NUMERIC:
                    // 判断是日期时间类型还是数值类型
                    if (DateUtil.isCellDateFormatted(cell)) {
                        short format =  cell.getCellStyle().getDataFormat();
                        SimpleDateFormat sdf = null;
                        /* 所有日期格式都可以通过getDataFormat()值来判断
                         *     yyyy-MM-dd----- 14
                         *    yyyy年m月d日----- 31
                         *    yyyy年m月--------57
                         *    m月d日  --------- 58
                         *    HH:mm---------- 20
                         *    h时mm分  --------- 32
                         */
                        if(format == 14 || format == 31 || format ==  57 || format == 58){
                            //日期
                            sdf = new SimpleDateFormat("yyyy-MM-dd");
                          }else if (format == 20 || format == 32) {
                            //时间
                            sdf = new SimpleDateFormat("HH:mm");
                          }
                        return sdf.format(cell.getDateCellValue());
                    } else {
                        // 对整数进行判断处理
                        double cur = cell.getNumericCellValue();  
                        long longVal = Math.round(cur);  
                        Object inputValue = null;
                        if(Double.parseDouble(longVal + ".0") == cur)  {   
                            inputValue = longVal;
                        }
                        else {   
                            inputValue = cur;
                        }
                        return String.valueOf(inputValue);
                    }
                case Cell.CELL_TYPE_BOOLEAN:
                    return  String.valueOf(cell.getBooleanCellValue());
                case Cell.CELL_TYPE_FORMULA:
                    //对公式进行处理,返回公式计算后的值,使用cell.getCellFormula()只会返回公式
                    return  String.valueOf(formulaEvaluator.evaluate(cell).getNumberValue());
                //Cell.CELL_TYPE_BLANK || Cell.CELL_TYPE_ERROR
                default:
                    return null;
            }
        }  
         
    }
    

    4.View部分

     <div>
                <input type="file" name="FileUpload" id="FileUpload">
                <a class="layui-btn layui-btn-mini"  id="btn_uploadimg">短信模板编号</a>
                <input type="text" name="aliTemplateCode"  id="aliTemplateCode" value="">
                <button onclick="batch()">开始发送短信</button>
             </div>
    
    function batch(){
         var fileObj =  document.getElementById("FileUpload").files[0]; // js 获取文件对象
        if (typeof (fileObj) == "undefined" || fileObj.size <= 0) {
            alert("请选择Excel文件");
            return;
        }
         var aliTemplateCode = $("#aliTemplateCode").val();
         if(aliTemplateCode == '' || aliTemplateCode == null){
               alert("请填写短信模板编号");
               return;
         }
         var formFile = new FormData();
         formFile.append("excelFile", fileObj); //加入文件对象
         formFile.append("aliTemplateCode",aliTemplateCode);
        $.ajax({
            url:  "${rootpath}/teacher/center/batch.html",
            type: "POST",
            data: formFile,
            processData: false, // 告诉jQuery不要去处理发送的数据
            contentType: false, // 告诉jQuery不要去设置Content-Type请求头
            async: true,
            dataType:"json",
            success: function(data){
                if(data.success == 1000){
                     alert("发送成功");
                }else{
                     alert(data.msg);
                }
            }
        });
    }
    
    展开全文
  • 帖:java获取excel指定单元格数据POI) 代码. import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org....

    帖:java获取excel指定单元格的数据(POI)

    代码.

    import org.apache.poi.hssf.usermodel.HSSFCell;
    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.POIFSFileSystem;
    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;
    
    import java.io.*;
    
    
    /**
     * @project: demo
     * @ClassName: ExcelGetSheetData
     * @author:
     * @creat:
     * 描述:根据后缀名获取指定单元格的数据excel
     * xlsx使用XSSFWorkbook
     * xls使用HSSFWorkbook
     */
    public class ExcelGetSheetData {
         public static void main(String[] args) throws IOException {
            File file=new File("d:\\ABC.xlsx");
            String type=file.getName().substring(file.getName().lastIndexOf(".")+1);
            if (type.equals("xlsx")){
                InputStream is = new FileInputStream(file);
                XSSFWorkbook xssfWorkbook = new XSSFWorkbook(is);
                XSSFSheet sheet = xssfWorkbook.getSheetAt(0);
                XSSFRow row = sheet.getRow(1);
                XSSFCell cell = row.getCell(1);
                System.out.println(cell.getStringCellValue());
            }else {
                POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream(file));
                HSSFWorkbook hssfWorkbook = new HSSFWorkbook(fs);
                HSSFSheet sheet = hssfWorkbook.getSheetAt(0);
                HSSFRow row = sheet.getRow(1);
                HSSFCell cell = row.getCell(1);
                System.out.println(cell.getStringCellValue());
    
            }
    
        }
    }
    
    展开全文
  • POI读取excel某个单元格内容

    万次阅读 2017-05-22 15:27:01
    POI读取excel某个单元格内容

    POI是一个不错的库,我们可以使用这个库读写EXCEL,WORD等类型文件,EXCEL尤其使用比较广泛,下面直接给出代码:

    private String readExcelCell(Sheet sheet,int row,int col) {

    String result=null;
    try {
    Cell cell = sheet.getRow(row-1).getCell(col-1,Row.CREATE_NULL_AS_BLANK);
    //可以根据需要设置需要的单元格类型
    cell.setCellType(Cell.CELL_TYPE_STRING);
                Object value = parseExcel(cell,false);
                print(value);
                result=value.toString();
    } catch (Exception e) {
    logger.error("readExcel异常,excel数据有问题",e);
    result=null;
    }
    return result;
    }

    注:我这里传入的行号与列号都是人操作excel使用的数字,所以比POI使用的行号、列号大1,所以在sheet.getRow(row-1).getCell(col-1,Row.CREATE_NULL_AS_BLANK)的时候都要减去1!!

    这里分享一个经验:如果操作多个excel sheet的话,可以在创建Workbook对象,然后把Workbook对象作为参数传入即可,这样就避免了多次打开excel文件,大大减少了运行时间!!

    展开全文
  • POI读取合并单元格中的excel数据

    千次阅读 2018-01-15 11:25:42
    import java.io.File;  import java.io.IOException;    import org.apache.poi.openxml4j.exceptions.InvalidFormatException;  ...import org.apache.poi.ss.usermodel.Cell;...import org.apache.poi.ss.us
  • NULL 博文链接:https://wangzhen-2357.iteye.com/blog/2282610
  • poi获取合并单元格

    2015-08-11 11:29:46
    poi获取合并单元格,Java excel 文档处理。
  • 使用POI读取单元格的内容

    千次阅读 2020-06-18 09:53:22
    因为项目中使用到POI获取单元格的内容,。 刚开始也是去百度 怎么做,后来发现官网上的更加好用。所有记录一下,看到的也可以少走些弯路 不废话,直接贴官网代码,需要导入apach 的poi 的相应的包。 代码中有两种...
  • java中使用poi读取excel单元格日期值

    千次阅读 2019-05-31 21:22:17
    近期在项目中做导入的时候,遇到读取cexcel表格数据读取到的是string类型的数字,为我们需要存的是正确的日期格式。 private String setDate(String ben){ SimpleDateFormat sdf = new SimpleDateFormat(“yyyy-MM...
  • 废话不多说,直接上代码,一个简单的读取Excel数据,并且设置单元格数据类型 在这里插入代码片
  • 该工具类是poi基于事件驱动去读取海量excel数据,解决内存溢出以及空单元格的问题。 该压缩包里面有两个文件,TestExcel.java主要是原始的处理方法,操作简单,适合小数据量的读取。 ExampleEventUserModelUtil.java...
  • java poi excel 单元格数据进行修改

    万次阅读 2017-08-13 20:49:43
    在实现java poi对excel表操纵的过程中,想要把数据填入excel表格里面的某个坐标里面的时候。去百度的过程中发现都是先拿到row的坐标,然后拿到那个row中的cell的坐标,都是从0下标开始的,这种操作写一片数据当然...
  • POI设置单个单元格的样式

    千次阅读 2020-08-18 12:23:51
    一、POI的基础样式 1. 单元格样式 CellStyle决定了单元格的显示样式,决定了单元格: - 单元格各个边框样式及颜色 - 单元格填充图案、前景色及背景色 - 单元格内容水平、垂直对齐方式 - 单元格内容字体Font ...
  • poi 读取excel合并单元格两种方式

    万次阅读 2018-12-06 16:00:17
    说明:  excel合并是用选择的两个或更多单元格创建一个单元格的过程。...2 然后再空白地方创建合并单元格,然后选择合并的单元格格式刷就可以A1:B1:C1进行格式化操作 上面就可以完成格式化操...
  • POI获取合并单元格的值

    千次阅读 2020-11-11 17:01:38
    POI获取合并单元格时,如果是遍历获取合并单元格的所有子单元格的值,office的excel都会有值,wps的excel只会第一个子单元格有值,其他子单元格都没值,即cell=null。故意凡是获取合并单元格的值,都获取第一个子...
  • POI读取excel合并单元格内容

    千次阅读 2019-06-17 16:31:26
    import java.io.File; import java.io.IOException...import org.apache.poi.openxml4j.exceptions.InvalidFormatException; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.Row; im...
  • POI进行Excel的合并单元格数据处理 近日接到一个要处理合并Excel单元格的上料表的需求,就到网上找了一些模板,发现有的技术大牛还是挺厉害的,他们致以敬意。 合并单元格工具类 在这个类中将传入的文件转化成流...
  • poi对excel单元格的读写操作 import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.poifs.filesystem.POIFSFileSystem; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi....
  • //获取单元格各类型值,返回字符串类型   private   static   String getCellValueByCell(Cell cell) {   //判断是否为null或空串   if   (cell== null   || cell.toString().trim().equals( "" )) {   ...
  • poi读取合并单元格帮助类
  • POI对Excel单元格内容修改

    千次阅读 2018-09-28 09:31:44
    // XLSX版本 const in= new Packages.java.io.FileInputStream("C:\\LJT\\test.xlsx... const wb= Packages.org.apache.poi.xssf.usermodel.XSSFWorkbook("in") //xls版本 const in= new Packages.java.io.Fil...
  • 问题描述:如果excle表里最后一行数据是没有合并的,就取不到值,如果最后一行是合并过的数据,就都能取得到了(合并未合并的都可以获取到)。有大神可以帮忙看一下代码解决一下吗,谢谢啦。 package service; ...
  • Java POI获取Cell单元格数据

    万次阅读 2018-09-13 10:30:21
    @SuppressWarnings("deprecation")  public static Object getCellValue(Cell cell) {  if (cell == null) {  return "";  }    Object obj = null;... switch (cel...
  • poi读取excell poI 读取excell单元格公式的计算的具体值 bug 但是有缺陷,有些公式无法无法读取值,比如字符串连接函数 CONCATENATE // poI 读取excell单元格公式值 cell.getNumericCellValue() // poI 读取excell...
  • POI获取指定元素的合并单元格

    千次阅读 2018-09-30 10:50:52
    POI获取指定元素的合并单元格数 如下: public static int GetMergeNum(Cell cell, Sheet sheet) { int mergeSize = 1; List&lt;CellRangeAddress&gt; mergedRegions = sheet.getMergedRegions(); for ...
  • 利用poi进行excel相同内容合并单元格,只摘要了传入部分功能,请关注addMergedRegion方法
  • Java POI Excel合并单元格数据处理 最近在项目开发过程中,有个一个导入Excel文件处理合并单元格数据的需求,就自己在网上找了一个模板,自己进行二次开发来开发需求。 Excel工具类 public class ExcelUtil { ...
  • java poi 读取有合并单元格的EXCEL文件

    万次阅读 热门讨论 2017-04-01 17:30:27
    数据的样子是这样的 报表名称 班次 生产线 站点编号 设备区域 1:无;2:左右 报表状态0:未启用;1启用 检查项目 检查方法 填报方式 标准值 偏差值 频次 import1 1 LC 52V451 2 1 检查项目1 目测 数值 10 1 10 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 14,800
精华内容 5,920
关键字:

poi读取指定单元格数据