Android开发笔记(三十四)Excel文件的读写
16lz
2022-07-15
Android中操作Excel文件的场合较少见,主要是一些专业领域导入导出报表时使用,所以处理Excel读写的开源代码也很稀缺。目前读写Excel主要采用开源库jxl,这个是韩国人写的excel操作工具,虽然最早用在java上,但也可用于Android。与之类似的POI,因为依赖库众多,所以只能用于java,而不能用于Android。
使用jxl需要在Android工程中导入jxl.jar包,jxl可以完成Excel的基本读写操作,其支持与不支持的情况如下:
1、jxl只支持Excel2003格式,不支持Excel2007格式。即支持xls文件,不支持xlsx文件。
2、jxl不支持直接修改excel文件,但可通过复制新文件覆盖原文件的方式来间接修改。
3、jxl只能识别PNG格式的图片,不能识别其他格式的图片。
上面可以看出,jxl不支持Excel2007,这个很不好,尤其是目前Excel2007已经成为Excel主流格式的时候。不过现在还有个实现Android读取2007格式的临时办法,如果我们仔细分析xlsx的文件格式,会发现xlsx文件其实是个压缩包,压缩包里有各种文件,其中数据一般是放在"xl/sharedStrings.xml"和"xl/worksheets/sheet1.xml"中。据此,我们判断Excel文件为2007格式时,便可以将其解压,然后从中提取出sharedStrings.xml和sheet1.xml,接着使用XML解析工具把具体数据解析出来。
下面是Excel文件的读写代码例子,其中支持2003格式的读和写,以及2007格式的读:
点击下载本文用到的Excel文件读写的工程代码
点此查看Android开发笔记的完整目录
使用jxl需要在Android工程中导入jxl.jar包,jxl可以完成Excel的基本读写操作,其支持与不支持的情况如下:
1、jxl只支持Excel2003格式,不支持Excel2007格式。即支持xls文件,不支持xlsx文件。
2、jxl不支持直接修改excel文件,但可通过复制新文件覆盖原文件的方式来间接修改。
3、jxl只能识别PNG格式的图片,不能识别其他格式的图片。
上面可以看出,jxl不支持Excel2007,这个很不好,尤其是目前Excel2007已经成为Excel主流格式的时候。不过现在还有个实现Android读取2007格式的临时办法,如果我们仔细分析xlsx的文件格式,会发现xlsx文件其实是个压缩包,压缩包里有各种文件,其中数据一般是放在"xl/sharedStrings.xml"和"xl/worksheets/sheet1.xml"中。据此,我们判断Excel文件为2007格式时,便可以将其解压,然后从中提取出sharedStrings.xml和sheet1.xml,接着使用XML解析工具把具体数据解析出来。
下面是Excel文件的读写代码例子,其中支持2003格式的读和写,以及2007格式的读:
import java.io.File;import java.io.IOException;import java.io.InputStream;import java.util.ArrayList;import java.util.List;import java.util.zip.ZipEntry;import java.util.zip.ZipException;import java.util.zip.ZipFile;import org.xmlpull.v1.XmlPullParser;import org.xmlpull.v1.XmlPullParserException;import android.util.Log;import android.util.Xml;import jxl.Sheet;import jxl.Workbook;import jxl.write.Label;import jxl.write.WritableSheet;import jxl.write.WritableWorkbook;public class ExcelUtil {private final static String TAG = "ExcelUtil";public static List> read(String file_name) {String extension = file_name.lastIndexOf(".") == -1 ? "" : file_name.substring(file_name.lastIndexOf(".") + 1);if ("xls".equals(extension)) {// 2003Log.d(TAG, "read2003XLS, extension:" + extension);return read2003XLS(file_name);} else if ("xlsx".equals(extension)) {Log.d(TAG, "read2007XLSX, extension:" + extension);return read2007XLSX(file_name);} else {Log.d(TAG, "不支持的文件类型, extension:" + extension);return null;}}public static List> read2003XLS(String path) {List> dataList = new ArrayList>();try {Workbook book = Workbook.getWorkbook(new File(path));// book.getNumberOfSheets(); //获取sheet页的数目// 获得第一个工作表对象Sheet sheet = book.getSheet(0);int Rows = sheet.getRows();int Cols = sheet.getColumns();Log.d(TAG, "当前工作表的名字:" + sheet.getName());Log.d(TAG, "总行数:" + Rows + ", 总列数:" + Cols);List
点击下载本文用到的Excel文件读写的工程代码
点此查看Android开发笔记的完整目录
更多相关文章
- NPM 和webpack 的基础使用
- 【阿里云镜像】使用阿里巴巴DNS镜像源——DNS配置教程
- 读取android手机流量信息
- android 使用html5作布局文件: webview跟javascript交互
- 《Android开发从零开始》——25.数据存储(4)
- Android(安卓)多媒体扫描过程(Android(安卓)Media Scanner Proces
- android“设置”里的版本号
- Android开发环境搭建
- Android(安卓)Resource介绍和使用