读取Excel文件

最近有个需求需要在app内置数据,新来的产品扔给了我两个Excel表格就不管了(两个表格格式还不统一。。。),于是通过度娘等方法找到了Android中读取Excel表格文件的一种方法,记录一下。

闲话一下Excel中工作簿和工作表的区别:

工作簿中包含有工作表。工作簿可以由一张或多张工作表组成,一个工作簿就是一个EXCEL表格文件。

好了,开始读取表格文件吧。

前提

首先,我们假设需要读取的表格文件名字为test.xls, 位于assets根目录下。

所需Jar包

这里为了能读取到Excel表格文件,我们要添加一个第三方Jar包jxl

这里有点儿需要注意的地方:由于表格文件格式较多,老版本的jxl后只支持Excel2003版本的,所以如果拿到的表格文件格式是xlsm或者xlsn之类的,我们首先要把文件另存为xls格式。

开始读取

1.初始化变量:

InputStream inputStream = null;//输入流
FileOutputStream outputStream = null;//输出流 
Workbook book = null;//Excel工作簿对象

2.以流的方式读取我们内置在assets目录下的表格文件

inputStream = context.getAssets().open("test.xls");

3.将上一步的输入流读取成一个文件,方便后续使用

File tempFile = new File(context.getCacheDir(), "test.xls");//临时文件,第二个参数为文件名字,可随便取
outputStream = new FileOutputStream(tempFile);
byte[] buf = new byte[1024];
int len;
while ((len = inputStream.read(buf)) > 0) {//while循环进行读取
outputStream.write(buf, 0, len);
}
outputStream.close();
inputStream.close();

4.得到Excel文件对象后,就可以利用jxl包中提供的各种方法来操作表格文件。jxl提供的方法很多,这里简单介绍下项目中用到的几个。

book = Workbook .getWorkbook(tempFile);//用读取到的表格文件来实例化工作簿对象(符合常理,我们所希望操作的就是Excel工作簿文件)
Sheet[] sheets = book.getSheets(); //得到所有的工作表
for (int m = 0; m < sheets.length; m++) {
Sheet sheet = book.getSheet(m);
int Rows = sheet.getRows();//得到当前工作表的行数
int Cols = sheet.getColumns(); //得到当前工作表的列数
for (int i = 0; i < Cols; i++) {    // 注意:这里是按列读取的!!!
for (int j = 0; j < Rows; j++) {
              String content=sheet.getCell(i, j).getContents();//结果是String类型的,根据具体需求进行类型转换
         }
    }
}

总结

如果表格文件是内置在assets目录下的话,按照以上流程读取即可,如果是在sd卡之类的话,步骤基本一致,都是首先得到我们的表格文件,然后得到工作簿对象,对其进行操作。有需要jxl包的朋友可自行度娘下载,也可以私信我。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏java 成神之路

java中设置网络代理

6826
来自专栏木宛城主

基于Socket的网络聊天室编程(第一版)

一:什么是套接字 在网络编程中最常用的方案便是Client/Server (客户机/服务器)模型。在这种方案中客户应用程序向服务器程序请求服务。一个服务程序通常...

2115
来自专栏Java技术分享

基于Metronic的Bootstrap开发框架经验总结(9)--实现Web页面内容的打印预览和保存操作

在前面介绍了很多篇相关的《Bootstrap开发框架》的系列文章,这些内容基本上覆盖到了我这个Bootstrap框架的各个主要方面的内容,总体来说基本达到了一个...

2747
来自专栏Golang语言社区

Golang通过socket与java通讯

下面上代码: //server.go //客户端,主要是在9000端口创建监听程序,用于接受客户端连接 package main import ( ...

3696
来自专栏Golang语言社区

Golang测试技术

本篇文章内容来源于Golang核心开发组成员Andrew Gerrand在Google I/O 2014的一次主题分享“Testing Techniques”,...

3576
来自专栏苍云横渡学习笔记

【第六部分-django博客从搭建到部署】一个完整Django入门指南

【学习目录】 【第一部分-django博客从搭建到部署】一个完整的Django入门指南学习笔记 【第二部分-django博客从搭建到部署】一个完整的Django...

4546
来自专栏开源优测

RFC821 简单邮件传输协议(SMTP)

1043
来自专栏Ken的杂谈

ASP.NET(C#) 发送邮件帮助类Mailhelper

791
来自专栏听雨堂

Log4Net使用心得

winform程序使用Log4net   1.引用dll   2.添加log4net.config,设置“始终复制”   4.assemblyinfo.cs中添...

19710
来自专栏沃趣科技

看各路神仙如何大战MySQL insecure warning报警有感

一、问题由来 mysql在5.6.5上开始在命令行中直接填入用户密码会提示错误,例如: $./mysql -h10.10.30.18 -uwoqutech -p...

3868

扫码关注云+社区