android解析07版office excel.xlsx文件

最近由于在测试app性能问题,偶然发现服务器存放了两个版本的code码表,分别是xls和xlsx版本的,android端这边是解析的xls,ios那边则是解析的xlsx,为了统一,我查了很多资料然后解析xlsx;查了一下资料,这两者的区别,xls是office excel 03版本的,xlsx是office excel 07版本的。

网上有许多解析xlsx的开源库都可以借鉴的,大多分为三种解析方式,

一种是jxl,这种只能解析xls格式的,更新比较慢,但是库很小,因为是针对android使用的;

另一种是 poi,这种解析很方便,03版和07版excel都可以解析,但是库比较大,超过10M,poi最原始的想法不是给android调用的,里面包含了很多的解析,都是xlsx不需要的;

还有一种解析方式是,把xlsx格式的文件解压出来,然后去到解压目录xl文件夹里面,解析sharedStrings.xml文件即可,但是这种方式的缺点是只能解析很规范的数据,然后纯数字文本是解析不到的(也不知道为什么,亲测是拿不到纯数字文本的,有可能是因为纯数字是居中的,至于原因后续发现了更新博客);

我在项目里用的是第三种方式,也感谢网上的大哥提供的工具类啊,以此鸣谢;

import android.util.Xml;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.zip.ZipEntry;
import java.util.zip.ZipException;
import java.util.zip.ZipFile;

import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;


public class XLSXParse {

    private String _armStr;
    private OutFileType _outFileType;
    private String _spiltStr;
    private ArmFileType _armFileType;

    public XLSXParse() {

    }

    public XLSXParse(Builder builder) {

        this._armStr = builder._armStr;
        this._outFileType = builder._outFileType;
        this._spiltStr = builder._spiltStr;
        this._armFileType =builder._armFileType;
    }
    // 定义最后输出的数据类型
    public enum OutFileType{
        FILE_TYPE_JSON,//json格式输出
        FILE_TYPE_SPILT,//分隔符字符串输出
        FILE_TYPE_LIST,//直接输出List类型数据
        FILE_TYPE_ARRAY//输出字符串型二位数组
    }

    public enum ArmFileType{
        XLS,
        XLSX
    }

    public static class Builder {
        private String _armStr = null;
        private OutFileType _outFileType;
        private String _spiltStr;
        private ArmFileType _armFileType;

        public Builder() {
            this._spiltStr="|";
            this._outFileType= OutFileType.FILE_TYPE_LIST;
        }

        public Builder(String armFilePath,String split,OutFileType fileType) {
            this._armStr=armFilePath;
            this._spiltStr=split;
            this._outFileType=fileType;
        }
        //设置以什么格式输出
        
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
android 使用poi读取高excel, 解决以下这两个错误 java.lang.NoClassDefFoundError: Failed resolution of: Ljavax/xml/stream/XMLEventFactory; at org.apache.poi.openxml4j.opc.internal.marshallers.PackagePropertiesMarshaller.(PackagePropertiesMarshaller.java:41) at org.apache.poi.openxml4j.opc.OPCPackage.init(OPCPackage.java:161) at org.apache.poi.openxml4j.opc.OPCPackage.(OPCPackage.java:141) at org.apache.poi.openxml4j.opc.ZipPackage.(ZipPackage.java:97) at org.apache.poi.openxml4j.opc.OPCPackage.open(OPCPackage.java:324) at org.apache.poi.ss.usermodel.WorkbookFactory.create(WorkbookFactory.java:184) at org.apache.poi.ss.usermodel.WorkbookFactory.create(WorkbookFactory.java:149) javax.xml.stream.FactoryConfigurationError: Provider com.sun.xml.internal.stream.events.XMLEventFactoryImpl not found at javax.xml.stream.FactoryFinder.newInstance(Unknown Source) at javax.xml.stream.FactoryFinder.newInstance(Unknown Source) at javax.xml.stream.FactoryFinder.find(Unknown Source) at javax.xml.stream.FactoryFinder.find(Unknown Source) at javax.xml.stream.XMLEventFactory.newInstance(Unknown Source) at org.apache.poi.openxml4j.opc.internal.marshallers.PackagePropertiesMarshaller.(PackagePropertiesMarshaller.java:41) at org.apache.poi.openxml4j.opc.OPCPackage.init(OPCPackage.java:161) at org.apache.poi.openxml4j.opc.OPCPackage.(OPCPackage.java:141) at org.apache.poi.openxml4j.opc.ZipPackage.(ZipPackage.java:97) at org.apache.poi.openxml4j.opc.OPCPackage.open(OPCPackage.java:324) at org.apache.poi.ss.usermodel.WorkbookFactory.create(WorkbookFactory.java:184) at org.apache.poi.ss.usermodel.WorkbookFactory.create(WorkbookFactory.java:149)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值