使用POI读取xlsx文件,包含对excel中自定义时间格式的处理

package poi;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.poi.ss.usermodel.CellStyle;
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;

public class GetExcelData {

    public static List<Map<Integer,Object>> readFile(File file){
        // excel中第几列 : 对应的表头
        Map<Integer,String> colAndNameMap = new HashMap<>();
        List<Map<Integer,Object>> resultList = new ArrayList<>();
        FileInputStream fs = null;
        XSSFWorkbook wb = null;
        try {
             fs = new FileInputStream(file);
             wb = new XSSFWorkbook(fs);
            for(int sheetIndex = 0; sheetIndex < wb.getNumberOfSheets(); sheetIndex++){
                //获取sheet数据
                XSSFSheet st = wb.getSheetAt(sheetIndex);
                //遍历一个sheet中每一行
                for (int rowIndex = 0; rowIndex <= st.getLastRowNum(); rowIndex++) {
                    // 表头:值
                    Map<Integer,Object> nameAndValMap = new HashMap<>();
                    // 获取到一行数据
                    XSSFRow row = st.getRow(rowIndex);
                    for(int cellIndex = 0; cellIndex < row.getPhysicalNumberOfCells(); cellIndex++){

                        if(rowIndex==0){
                            colAndNameMap.put(cellIndex, row.getCell(cellIndex).getStringCellValue());
                        }else if(!colAndNameMap.isEmpty()){
                            nameAndValMap.put(cellIndex, buildDate(row.getCell(cellIndex)));
                        }
                    }
                    if(!nameAndValMap.isEmpty()){
                        resultList.add(nameAndValMap);
                    }
                }
            }
            return resultList;
        } catch (FileNotFoundException e) {
            System.out.println(">>>>>>>>>>  读取excel文件时出错了!!!");
            e.printStackTrace();
        } catch (IOException e) {
            System.out.println(">>>>>>>>>>  读取excel文件时出错了!!!");
            e.printStackTrace();
        } catch (Exception e) {
            System.out.println(">>>>>>>>>>  读取excel文件时出错了!!!");
            e.printStackTrace();
        } finally{
            try {
                wb.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
            try {
                fs.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return null;
    }

    // 将excel中时间格式字段进行处理
    @SuppressWarnings("deprecation")
    public static String buildDate(XSSFCell cell) {
        String result = new String();
        switch (cell.getCellType()) {
        case XSSFCell.CELL_TYPE_NUMERIC:
            if (cell.getCellStyle().getDataFormat() == 176) {
                // 处理自定义日期格式:m月d日(通过判断单元格的格式id解决,id的值是58)
                SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                double value = cell.getNumericCellValue();
                Date date = org.apache.poi.ss.usermodel.DateUtil.getJavaDate(value);
                result = sdf.format(date);
            } else {
                double value = cell.getNumericCellValue();
                CellStyle style = cell.getCellStyle();
                DecimalFormat format = new DecimalFormat();
                String temp = style.getDataFormatString();
                // 单元格设置成常规
                if (temp.equals("General")) {
                    format.applyPattern("#");
                }
                result = format.format(value);
            }
            break;
        case XSSFCell.CELL_TYPE_STRING:// String类型
            result = cell.getStringCellValue();
            break;
        default:
            result = "";
            break;
        }
        return result;
    }

}
时间: 2024-10-06 12:01:29

使用POI读取xlsx文件,包含对excel中自定义时间格式的处理的相关文章

读取xml文件,写入excel

在上一篇 Python写xml文件已经将所有订单写入xml文件,这一篇我们把xml文件中的内容读出来,写入excel文件. 输入xml格式: 1 <?xml version="1.0" encoding="utf-8"?> 2 <orderlist> 3 <order> 4 <customer>姓名1</customer> 5 <phone>123456</phone> 6 <

poi读取xlsx

知道 大家都知道用poi读取xls  当时有时候 必须要读取xlsx  现在我把我做测试的demo分享给大家 package com.lt.main; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import java.sql.Connection; import java.sql.PreparedStatement; import java.util.ArrayList; im

通过POI读取word文件

POI读取word只能读取内容不能读取格式 tm-extractors-0.4.jar import java.io.FileInputStream; import org.textmining.text.extraction.WordExtractor; public class Test { public static void main(String[] args) { try { FileInputStream in = new FileInputStream("d:\\a.doc&qu

Java处理Excel中的日期格式

Java处理Excel中的日期格式 2011-12-23 17:34:03|  分类: java |举报 |字号 订阅 下载LOFTER 我的照片书  | 在Excel中的日期格式,其数值为距离1900年1月1日的天数,比如2009-12-24将其转化为数字格式时变成了40171,在用java处理的时候,读取的也将是40171.在POI处理Excel中的日期类型的单元格时,如果仅仅是判断它是否为日期类型的话,最终会以NUMERIC类型来处理.正确的处理方法是先判断单元格的类型是否则NUMERIC

用 Apache POI 读取 XLSX 数据

最近因为项目的原因,需要从一些 Microsoft Office Excel 文件读取数据并加载到数据库. Google了一下方法,发现其实可以用的 Java 第三方库很多,最著名的是 Apache 的 POI 开源项目,其官网地址是 https://poi.apache.org 从首页的简介中我发现这个项目功能非常强大,不仅能处理 Excel,它还可以处理 Word.PowerPoint.Outlook.Visio,基本上囊括了 MS Office 的全部常用组件.目前 POI 更新到了 3.

使用poi读取xlsx中的数据

excel中的内容见下图: 详细代码: package dataprovider; import java.io.FileInputStream; import java.io.InputStream; import org.apache.poi.xssf.usermodel.XSSFRow; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook; pub

SpringMVC 实现POI读取Excle文件中数据导入数据库(上传)、导出数据库中数据到Excle文件中(下载)

读取Excle表返回一个集合: package com.shiliu.game.utils; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.lang.reflect.Field; import java.lang.reflect

nodejs读取xlsx文件

依赖包:multiparty,XLSX,代码如下: var multiparty = require('multiparty'); var XLSX = require("xlsx"); var form = new multiparty.Form(); function to_json(workbook,id){ // 获取 Excel 中所有表名,返回 ['sheet1', 'sheet2'] var sheetNames = workbook.SheetNames; sheetN

xlsx文件怎么打开 Excel如何打开xlsx文件

office是所有IT人员通用的办公软件,特别是行政行业,要做各种报表,所以office当中的Excel表格是使用最多的,经常用Excel的人就知道,Excel2003以下的版本保存的默认格式后缀名通常都是以"xls"的结束的,现在随着office版本的提高,Excel2007以上的版本保存的格式后缀名就是以"xlsx"结束了,因为xlsx占用空间更小.但是有些小伙伴喜欢用低版本,而有的朋友喜欢用高版,这就导致了用Excel2003不能打开2007版本以上生成的xl