精华内容
下载资源
问答
  • public Map<Integer, String[]> toMap(String path) { Map<Integer,String[]> map = null; try { Workbook wb = new HSSFWorkbook(new ... //对excel文件的处理 Sheet st =...
     
    public Map<Integer, String[]> toMap(String path) {
    Map<Integer,String[]> map = null;
    try {
    Workbook wb = new HSSFWorkbook(new FileInputStream(new File(path)));
    //对excel文件的处理
    Sheet st = wb.getSheetAt(0);
    if(st != null){
    map = new HashMap<Integer, String[]>(st.getLastRowNum());

    for(int i = 0;i < st.getLastRowNum();i++){
    //行
    Row row = st.getRow(i);
    if(row != null){
    int rows = row.getLastCellNum();
    String[] strs = null;
    if(rows > 0){
    strs = new String[rows];
    for(int j = 0;j < rows;j++){
    //列
    Cell c = row.getCell(j);
    strs[j] = c.toString();

    if(c.getCellType() == Cell.CELL_TYPE_STRING){
    strs[j] = c.toString();
    }else if(c.getCellType() == Cell.CELL_TYPE_NUMERIC){
    double d = c.getNumericCellValue();

    String s = String.valueOf(d);
    s = s.substring(0, s.indexOf("E")).replace(".", "");
    strs[j] = s;
    }
    }
    }
    map.put(i, strs);
    }
    }
    }
    } catch (FileNotFoundException e) {
    System.out.println("文件未找到.." + e.getClass().getName() + "\t 信息:" + e.getMessage());
    } catch (IOException e) {
    System.out.println("Io异常:" + e.getClass().getName() + "\t 信息:" + e.getMessage());
    }
    return map;
    }

     ps:使用poi工具进行解析的

    展开全文
  • package com.sun.test; import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.io.InputStream;import java.util.Date;import java.util.HashMap;imp...

    package com.sun.test;

    import java.io.FileInputStream;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.Date;
    import java.util.HashMap;
    import java.util.Map;

    import org.apache.poi.hssf.usermodel.HSSFWorkbook;
    import org.apache.poi.ss.usermodel.Cell;
    import org.apache.poi.ss.usermodel.DateUtil;
    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 org.slf4j.Logger;
    import org.slf4j.LoggerFactory;

    /**
    * 读取Excel
    *
    * @author zengwendong
    */
    public class ReadExcelUtils {
    private Logger logger = LoggerFactory.getLogger(ReadExcelUtils.class);
    private Workbook wb;
    private Sheet sheet;
    private Row row;

    public ReadExcelUtils(String filepath) {
    if(filepath==null){
    return;
    }
    String ext = filepath.substring(filepath.lastIndexOf("."));
    try {
    InputStream is = new FileInputStream(filepath);
    if(".xls".equals(ext)){
    wb = new HSSFWorkbook(is);
    }else if(".xlsx".equals(ext)){
    wb = new XSSFWorkbook(is);
    }else{
    wb=null;
    }
    } catch (FileNotFoundException e) {
    logger.error("FileNotFoundException", e);
    } catch (IOException e) {
    logger.error("IOException", e);
    }
    }

    /**
    * 读取Excel表格表头的内容
    *
    * @param InputStream
    * @return String 表头内容的数组
    * @author zengwendong
    */
    public String[] readExcelTitle() throws Exception{
    if(wb==null){
    throw new Exception("Workbook对象为空!");
    }
    sheet = wb.getSheetAt(0);
    row = sheet.getRow(0);
    // 标题总列数
    int colNum = row.getPhysicalNumberOfCells();
    System.out.println("colNum:" + colNum);
    String[] title = new String[colNum];
    for (int i = 0; i < colNum; i++) {
    // title[i] = getStringCellValue(row.getCell((short) i));
    title[i] = row.getCell(i).getCellFormula();
    }
    return title;
    }

    /**
    * 读取Excel数据内容
    *
    * @param InputStream
    * @return Map 包含单元格数据内容的Map对象
    * @author zengwendong
    */
    public Map<Integer, Map<Integer,Object>> readExcelContent() throws Exception{
    if(wb==null){
    throw new Exception("Workbook对象为空!");
    }
    Map<Integer, Map<Integer,Object>> content = new HashMap<Integer, Map<Integer,Object>>();

    sheet = wb.getSheetAt(0);
    // 得到总行数
    int rowNum = sheet.getLastRowNum();
    row = sheet.getRow(0);
    int colNum = row.getPhysicalNumberOfCells();
    // 正文内容应该从第二行开始,第一行为表头的标题
    for (int i = 1; i <= rowNum; i++) {
    row = sheet.getRow(i);
    int j = 0;
    Map<Integer,Object> cellValue = new HashMap<Integer, Object>();
    while (j < colNum) {
    Object obj = getCellFormatValue(row.getCell(j));
    cellValue.put(j, obj);
    j++;
    }
    content.put(i, cellValue);
    }
    return content;
    }

    /**
    *
    * 根据Cell类型设置数据
    *
    * @param cell
    * @return
    * @author zengwendong
    */
    private Object getCellFormatValue(Cell cell) {
    Object cellvalue = "";
    if (cell != null) {
    // 判断当前Cell的Type
    switch (cell.getCellType()) {
    case Cell.CELL_TYPE_NUMERIC:// 如果当前Cell的Type为NUMERIC
    case Cell.CELL_TYPE_FORMULA: {
    // 判断当前的cell是否为Date
    if (DateUtil.isCellDateFormatted(cell)) {
    // 如果是Date类型则,转化为Data格式
    // data格式是带时分秒的:2013-7-10 0:00:00
    // cellvalue = cell.getDateCellValue().toLocaleString();
    // data格式是不带带时分秒的:2013-7-10
    Date date = cell.getDateCellValue();
    cellvalue = date;
    } else {// 如果是纯数字

    // 取得当前Cell的数值
    cellvalue = String.valueOf(cell.getNumericCellValue());
    }
    break;
    }
    case Cell.CELL_TYPE_STRING:// 如果当前Cell的Type为STRING
    // 取得当前的Cell字符串
    cellvalue = cell.getRichStringCellValue().getString();
    break;
    default:// 默认的Cell值
    cellvalue = "";
    }
    } else {
    cellvalue = "";
    }
    return cellvalue;
    }

    public static void main(String[] args) {
    try {
    String filepath = "C:\\Users\\xsp034\\Desktop\\CE.xls";
    ReadExcelUtils excelReader = new ReadExcelUtils(filepath);
    // 对读取Excel表格标题测试
    /* String[] title = excelReader.readExcelTitle();
    System.out.println("获得Excel表格的标题:");
    for (String s : title) {
    System.out.print(s + " ");
    }*/

    // 对读取Excel表格内容测试
    Map<Integer, Map<Integer,Object>> map = excelReader.readExcelContent();
    System.out.println("获得Excel表格的内容:");
    for (int i = 1; i <= map.size(); i++) {
    System.out.println(map.get(i));
    }
    } catch (FileNotFoundException e) {
    System.out.println("未找到指定路径的文件!");
    e.printStackTrace();
    }catch (Exception e) {
    e.printStackTrace();
    }
    }
    }

     

     

    转载于:https://www.cnblogs.com/austinspark-jessylu/p/6168533.html

    展开全文
  • Java读取Excel

    2019-11-17 15:04:28
    文章目录一、详解读取Excel简单读取指定列的下标或名称读取多个sheet自定义格式转换多行头读取表头数据异常处理web读取 本文使用的技术是Alibaba集团开源的EasyExcel技术,该技术是针对Apache POI技术的封装和优化,...


    本文使用的技术是Alibaba集团开源的EasyExcel技术,该技术是针对Apache POI技术的封装和优化,主要解决了POI技术的耗内存问题,并且提供了较好的API使用。不需要大量的代码就可以实现excel的操作功能。

    一、详解读取Excel

    简单读取

    对象

    // 如果没有特殊说明,下面的案例将默认使用这个实体类
    public class DemoData {
        private String string;
        private Date date;
        private Double doubleData;
        // getting setting
    }
    

    监听器

    // 如果没有特殊说明,下面的案例将默认使用这个监听器
    public class DemoDataListener extends AnalysisEventListener<DemoData> {
    
        List<DemoData> list = new ArrayList<DemoData>();
        
        /**
         * 如果使用了spring,请使用这个构造方法。每次创建Listener的时候需要把spring管理的类传进来
         */
        public DemoDataListener() {}
    
        /**
         * 这个每一条数据解析都会来调用
         *
         * @param data
         * @param context
         */
        @Override
        public void invoke(DemoData data, AnalysisContext context) {
            System.out.println("解析到一条数据:{}", JSON.toJSONString(data));
            list.add(data);
        }
    
        /**
         * 所有数据解析完成了 都会来调用
         *
         * @param context
         */
        @Override
        public void doAfterAllAnalysed(AnalysisContext context) {
            System.out.println(JSON.toJSONString(list));
        }
    }
    

    代码

    @Test
    public void simpleRead() {
        // 写法1:
        String fileName = "demo.xlsx";
        // 这里 需要指定读用哪个class去读,然后读取第一个sheet 文件流会自动关闭
        EasyExcel.read(fileName, DemoData.class, new DemoDataListener()).sheet().doRead();
    
        // 写法2:
        fileName = "demo.xlsx";
        ExcelReader excelReader = EasyExcel.read(fileName, DemoData.class, new DemoDataListener()).build();
        ReadSheet readSheet = EasyExcel.readSheet(0).build();
        excelReader.read(readSheet);
        // 这里千万别忘记关闭,读的时候会创建临时文件,到时磁盘会崩的
        excelReader.finish();
    }
    

    指定列的下标或名称

    对象

    public class DemoData {
        /**
         * 强制读取第三个 这里不建议 index 和 name 同时用,要么一个对象只用index,要么一个对象只用name去匹配
         */
        @ExcelProperty(index = 2)
        private Double doubleData;
        /**
         * 用名字去匹配,这里需要注意,如果名字重复,会导致只有一个字段读取到数据
         */
        @ExcelProperty("字符串标题")
        private String string;
        @ExcelProperty("日期标题")
        private Date date;
    }
    

    代码

    @Test
    public void indexOrNameRead() {
        String fileName = "demo.xlsx";
        // 这里默认读取第一个sheet
        EasyExcel.read(fileName, DemoData.class, new DemoDataListener()).sheet().doRead();
    }
    

    读取多个sheet

    代码

    @Test
    public void repeatedRead() {
        String fileName = "demo.xlsx";
        // 读取全部sheet
        // 这里需要注意 DemoDataListener的doAfterAllAnalysed 会在每个sheet读取完毕后调用一次。然后所有sheet都会往同一个DemoDataListener里面写
        EasyExcel.read(fileName, DemoData.class, new DemoDataListener()).doReadAll();
    
        // 读取部分sheet
        fileName = "demo.xlsx";
        ExcelReader excelReader = EasyExcel.read(fileName).build();
        // 这里为了简单 所以注册了 同样的head 和Listener 自己使用功能必须不同的Listener
        // readSheet参数设置读取sheet的序号
        ReadSheet readSheet1 =
            EasyExcel.readSheet(0).head(DemoData.class).registerReadListener(new DemoDataListener()).build();
        ReadSheet readSheet2 =
            EasyExcel.readSheet(1).head(DemoData.class).registerReadListener(new DemoDataListener()).build();
        // 这里注意 一定要把sheet1 sheet2 一起传进去,不然有个问题就是03版的excel 会读取多次,浪费性能
        excelReader.read(readSheet1, readSheet2);
        // 这里千万别忘记关闭,读的时候会创建临时文件,到时磁盘会崩的
        excelReader.finish();
    }
    

    自定义格式转换

    对象

    @Data
    public class ConverterData {
        /**
         * converter属性定义自己的字符串转换器
         */
        @ExcelProperty(converter = CustomStringConverter.class)
        private String string;
        /**
         * 这里用string 去接日期才能格式化
         */
        @DateTimeFormat("yyyy年MM月dd日 HH时mm分ss秒")
        private String date;
        /**
         * 我想接收百分比的数字
         */
        @NumberFormat("#.##%")
        private String doubleData;
    }
    

    自定义转换器

    public class CustomStringStringConverter implements Converter<String> {
        @Override
        public Class supportJavaTypeKey() {
            return String.class;
        }
    
        @Override
        public CellDataTypeEnum supportExcelTypeKey() {
            return CellDataTypeEnum.STRING;
        }
    
        /**
         * 这里读的时候会调用
         *
         * @param cellData
         *            NotNull
         * @param contentProperty
         *            Nullable
         * @param globalConfiguration
         *            NotNull
         * @return
         */
        @Override
        public String convertToJavaData(CellData cellData, ExcelContentProperty contentProperty,
            GlobalConfiguration globalConfiguration) {
            return "自定义:" + cellData.getStringValue();
        }
    
        /**
         * 这里是写的时候会调用 不用管
         *
         * @param value
         *            NotNull
         * @param contentProperty
         *            Nullable
         * @param globalConfiguration
         *            NotNull
         * @return
         */
        @Override
        public CellData convertToExcelData(String value, ExcelContentProperty contentProperty,
            GlobalConfiguration globalConfiguration) {
            return new CellData(value);
        }
    
    }
    

    代码

    @Test
    public void converterRead() {
        String fileName = "demo.xlsx";
        // 这里 需要指定读用哪个class去读,然后读取第一个sheet 
        EasyExcel.read(fileName, ConverterData.class, new ConverterDataListener())
            // 这里注意 我们也可以registerConverter来指定自定义转换器, 但是这个转换变成全局了, 所有java为string,excel为string的都会用这个转换器。
            // 如果就想单个字段使用请使用@ExcelProperty 指定converter
            // .registerConverter(new CustomStringStringConverter())
            // 读取sheet
            .sheet().doRead();
    }
    

    多行头

    代码

    @Test
    public void complexHeaderRead() {
        String fileName = "demo.xlsx";
        // 这里 需要指定读用哪个class去读,然后读取第一个sheet 
        EasyExcel.read(fileName, DemoData.class, new DemoDataListener()).sheet()
            // 这里可以设置1,因为头就是一行。如果多行头,可以设置其他值。不传入默认1行
            .headRowNumber(1).doRead();
    }
    

    读取表头数据

    监听器

    /**
     * 这里会一行行的返回头
     * 监听器只需要重写这个方法就可以读取到头信息
     * @param headMap
     * @param context
     */
    @Override
    public void invokeHeadMap(Map<Integer, String> headMap, AnalysisContext context) {
        LOGGER.info("解析到一条头数据:{}", JSON.toJSONString(headMap));
    }
    

    代码

    @Test
    public void headerRead() {
        String fileName = "demo.xlsx";
        // 这里 需要指定读用哪个class去读,然后读取第一个sheet
        EasyExcel.read(fileName, DemoData.class, new ReadDataListener()).sheet().doRead();
    }
    

    异常处理

    监听器

    /**
    * 监听器实现这个方法就可以在读取数据的时候获取到异常信息
    */
    @Override
    public void onException(Exception exception, AnalysisContext context) {
        LOGGER.error("解析失败,但是继续解析下一行:{}", exception.getMessage());
        // 如果是某一个单元格的转换异常 能获取到具体行号
        // 如果要获取头的信息 配合invokeHeadMap使用
        if (exception instanceof ExcelDataConvertException) {
            ExcelDataConvertException excelDataConvertException = (ExcelDataConvertException)exception;
            LOGGER.error("第{}行,第{}列解析异常", excelDataConvertException.getRowIndex(),
                excelDataConvertException.getColumnIndex());
        }
    }
    

    web读取

    代码

    @PostMapping("upload")
    @ResponseBody
    public String upload(MultipartFile file) throws IOException {
        EasyExcel.read(file.getInputStream(), UploadData.class, new UploadDataListener(uploadDAO)).sheet().doRead();
        return "SUCCESS";
    }
    
    展开全文
  • java读取excel所有页的数据,可能会有bug 毕竟我测试是没有,小白一个,大佬勿喷啊,网上搜的资源然后改写的读取所有页,可能会有不足的地方。01年的弟弟,不喜勿喷 下载链接:...

    java读取excel所有页的数据,可能会有bug 毕竟我测试是没有,小白一个,大佬勿喷啊,网上搜的资源然后改写的读取所有页,可能会有不足的地方。01年的弟弟,不喜勿喷
    下载链接:https://download.csdn.net/download/q702631026/10675623
    下图是测试数据

    在这里插入图片描述在这里插入图片描述

    展开全文
  • Java读取Excel文件

    2017-08-14 10:31:57
    Java读取Excel文件
  • 屏蔽字工具类 Java读取Excel工具类 读取内存中
  • java读取excel

    2016-05-10 13:34:37
    本例子中使用java的jxl来实现对excel读取读取到map中。 本例子在其他人例子的基础上,稍微改动了一下。 import java.io.FileInputStream; import java.io.InputStream; import java.util.HashMap; import ...
  • java 读取excel数据

    2012-01-30 16:04:34
    主要是针对java语言读取excel数据进行操作,可以读取多个excel文件数据,前提:excel文件格式必须一致! 其中代码很简单,如下 方法1: public static Map readExcel(File excelFile, int rowNum) throws ...
  • Java读取Excel文件自定义属性

    千次阅读 2019-02-27 14:12:44
    Java读取Excel文件自定义属性1添加maven依赖2读取Excel文件属性自定义列3代码 1添加maven依赖 &lt;dependency&gt; &lt;groupId&gt;org.apache.poi&lt;/groupId&gt; &lt;artifactId&...
  • java 读取 excel 表格内容

    千次阅读 多人点赞 2019-06-13 18:40:39
    java 读取 excle 表格内容 一、添加依赖 <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.8</version> <...
  • java读取excel的多种方式 1:添加处理excel的依赖jar包2:向excel中写入内容的类3:读取Excel中的数据,并写入list中4:在D盘下面创建readExcel.xls(有内容) 和writeExcel.xlsx即可(一)jxl写Excel二、jxl读Excel...
  • java读取excel内容

    2019-07-09 14:57:29
    使用JAVA代码读取excel内容 前段时间,由于公司需要进行excel的导入导出,系统复习了一下POI的使用,详细内容如下: 代码如下: public class POITest { private static Workbook wb; private static Sheet ...
  • java读取excel文件

    2016-12-06 08:39:42
    读取Excel文件技术要点: 使用框架:jxl.jar
  • java读取Excel文件

    千次阅读 2017-05-21 18:21:52
    java读取Excel文件 本博文使用工具https://github.com/nvenky/excel-parser,其思想类似orm,数据源来于Excel文件,Excel文件 中的每一行对应java中的类实例,此工具使用注解绑定Excel每一行的中某列对应类的哪个...
  • 首先是读取excel表格的函数代码: //这里是对单个sheet读取,多sheet可以对下面函数修改成循环读取sheet public Map<Integer, Map<String, String>> readExcel() { File file = new File("/root/表1...
  • JAVA 读取Excel文件内容

    2019-02-26 22:39:56
    首先看通过Java语言怎么读取Excel里面的内容 1.先定义好读取Excel文件内容的方法,该方法返回的是二维数组。 public static String[][] getDate(File file, int ignoreRows) throws FileNotFoundException, I...
  • java 读取 Excel表格内容

    千次阅读 2019-12-08 14:09:38
    读写Excel,这么重要且普遍的问题,伟大的apache,早就为我们封装好了jar包,供...--读取 excel 的所需jar包--> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi<...
  • java读取Excel工具类

    2017-08-17 14:06:49
    分享一个想将Excel导入数据库的工具类,各位猿友可以直接用   import java.beans.IntrospectionException; import java.beans.PropertyDescriptor; import java.io.InputStream; import java.lang.reflect....
  • Java读取Excel文件汇总

    千次阅读 2017-03-28 14:58:42
    相信很多程序猿朋友碰到上传、读取Excel文件的问题,做个小结,权当是笔记收着吧。  之前做金融报表,是把Excel内嵌页面中的,技术上采用ZK结合POI读取和插入Excel数据,后台方法比较死,比较程式化。  目前新...
  • 可以读取已经路径下的excel文件中,所有工作簿中的所有表格数据,将其生成map集合,以便查询以及获取。同时可以将数据在项目启动时,加载至全局缓存中,方便书写一下计算方法或者查询方法,增加代码的耦合度。 ...
  • JAVA读取Excel数据

    2020-02-24 16:02:36
    //读取Excel文件 Workbook workbook = getWorkbook("src/main/resources/test.xlsx"); //读取Sheet Sheet sheet = getSheet(workbook); //获取Excel内容 List<Map,String>> dpiList = getDpiList(sheet); //...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 10,625
精华内容 4,250
关键字:

java读取excel到map

java 订阅