使用Java获取excel数据表

首页 » HBase » 使用Java获取excel数据表

获取工作薄里的数据,可以使用Java poi提供的workbook类来操作

读取一个 Wookbook中数据

读取工作簿中的内容大致分为下列几个步骤:

  • 使用 WorkbookFactory新建一个工作簿( Wookbook
  1. InputStream resourceAsStream = SaveData.class.getClassLoader().getResourceAsStream("data.xls");//通过类加载器获取本地文件
  2. Workbook workbook = WorkbookFactory.create(resourceAsStream);
  • 获取给定索引处的 Sheet对象。
  1. Sheet sheet = workbook.getSheetAt(0);//拿到Wookbook中的第一个Sheet

注意:一个wookbook可能存在多个sheet,因此需要指定索引。

  • 通过 Sheet对象获取指定行和行内单元格。
  1. Row row = sheet.getRow(1);//首行一般为说明,因此我们直接从第一行进行获取
  2. Cell cell = row.getCell(0);//获取当前行第一个单元格
//1.获取第一行中trip_id列的第一个值(33404951)
double numericCellValue = row.getCell(0).getNumericCellValue();
DecimalFormat formatter = new DecimalFormat("########");//一个#表示一个数字
String trip_id =formatter.format(numericCellValue);//我们需要使用DecimalFormat将数据格式化
//2.获取第一行中开始时间单元格的值
FastDateFormat instance = FastDateFormat.getInstance("MM/dd/yyyy HH:mm");
String beginTimeValue = row.getCell(1).getStringCellValue();
//为了方便后面的数据分析计算我们将需要将时间格式转为时间戳
long begintime = instance.parse(beginTimeValue).getTime();
//3.获取第一行开始经度单元格的值
double start_longitude = row.getCell(7).getNumericCellValue();
DecimalFormat formatter = new DecimalFormat("###.######");//#表示一个数字,不包括0
String longitude = formatter.format(start_longitude);
  • 获取当前 sheet中的物理定义行数
  1. //为了完整的将整个Sheet中的数据全部存储,我们需要知道整个Sheet中有多少条数据,然后对其遍历
  2. int rows = sheet.getPhysicalNumberOfRows();

测试:

获取data.xls文件中的数据(trip_id,开始时间,结束经度,车辆,ID)

文件格式如下:

trip_id开始时间结束时间车辆id出发地目的地所在城市开始经度开始纬度结束经度结束纬度
334049517/1/2017 0:097/1/2017 0:455996韩庄村北782米韩庄村北782米河北省保定市雄县39.043732116.26013939.043732116.260139
334632117/1/2017 1:017/1/2017 11:136342韩庄村北782米39.043732116.260139NANA
334154407/1/2017 1:597/1/2017 2:126273擎天矿用材料有限公司北609米河北省保定市雄县G45(大广高速)河北省保定市雄县G45(大广高速)39.041691116.23535239.044701116.252441

tips:由于表中有非法数据,所以需要抛出异常。

import java.io.InputStream;
import java.text.DecimalFormat;
import org.apache.commons.lang3.time.FastDateFormat;
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.ss.usermodel.WorkbookFactory;
public class SaveWookbook {
    public static void main(String[] args) throws Exception {
        //1.通过类加载器获取本地文件并新建一个工作簿
        InputStream resourceAsStream = SaveWookbook.class.getClassLoader().getResourceAsStream("data.xls");
        Workbook workbook = WorkbookFactory.create(resourceAsStream);
        //2.拿到工作簿中第一个Sheet
        Sheet sheet = workbook.getSheetAt(0);
        //3.获取当前Sheet中的行数
        int rows = sheet.getPhysicalNumberOfRows();
        //4.对所有有效数据进行遍历并输出(期间无效数据通过异常捕获方式清除)
        for (int n = 1; n < rows; n++) {
            Row row = sheet.getRow(n);
            //通过异常方式清除格式不准确、数据不存在的无效行
            try {
                //trip_id
                DecimalFormat formatter1 = new DecimalFormat("########");
                String trip_id = formatter1.format(row.getCell(0).getNumericCellValue());
                //开始时间
                FastDateFormat instance = FastDateFormat.getInstance("MM/dd/yyyy HH:mm");
                String beginTimeValue = row.getCell(1).getStringCellValue();
                long begintime = instance.parse(beginTimeValue).getTime();
                //车辆id
                int car_id = (int)row.getCell(3).getNumericCellValue();
                //结束经度
                double start_longitude = row.getCell(9).getNumericCellValue();
                DecimalFormat formatter2 = new DecimalFormat("###.######");//#表示一个数字,不包括0
                String longitude = formatter2.format(start_longitude);
                System.out.println("骑行id:"+trip_id+",开始时间:"+begintime+",车辆id:"+car_id+",结束经度:"+longitude);
            } catch (Exception e) {
            }
        }
    }
}

 

分享到:
赞(0) 打赏

评论 2

评论前必须登录!

 

  1. #1

    给你点赞

    我是你哥3个月前 (05-26)
  2. #2

    good厉害了

    渣渣辉3个月前 (05-26)

觉得文章有用就打赏一下弟弟吧

支付宝扫一扫打赏

微信扫一扫打赏

Vieu4.5主题
专业打造轻量级个人企业风格博客主题!专注于前端开发,全站响应式布局自适应模板。
正在播放:

作者想对您说:

累了就停下来听首歌吧

听完后会给您一个好心情

最后

等到您不容易

还希望您能多待一会儿

      00:00/00:00

      登陆仅提取账号昵称,并无其他功能。

      为了服务器更好的运行,请使用第三方账号登陆。

      授权名称使用的公安备案名称——菜鸟奋斗历程,请知悉。