Android上有哪些第三方库支持读取2007版的excel文件(xlsx格式)的吗?

麦田捕手 2016-08-29 10:28:46
请教坛友,项目之前用的是jxl,但是现在甲方要求能直接读取xlsx格式的文件,网上找了一下,有个poi,试了好久,不太理想,请问除此之外还有哪些第三方库啊?
...全文
440 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Shamll 2016-12-15
  • 打赏
  • 举报
回复
楼主,我用这段代码解析,InputStream inputStream = xlsxFile.getInputStream(sharedStringXML);这句直接空指针啊
乐之者v 2016-12-15
  • 打赏
  • 举报
回复
这确实是个问题啊。。jxl真的不想用了。太坑了。poi还没试过。。
ab637800 2016-11-02
  • 打赏
  • 举报
回复
同样在为这问题困扰,poi太笨重依赖的Jar在andrid下运行会有很多兼容问题。
麦田捕手 2016-08-30
  • 打赏
  • 举报
回复
都是用的UTF-8
引用 2 楼 tiewantn 的回复:
[quote=引用 1 楼 assky124 的回复:] 只打开可以用WPS,Office 365之类的 xlsx 就是个压缩包,按压缩包读就行了
这种方式我试了,但是遇到一个问题,就是当xlsx文件单元格内文字排版格式字体不统一时,读出的数据混乱错乱。
    try {
            ZipFile xlsxFile = new ZipFile(file);

            ZipEntry sharedStringXML = xlsxFile.getEntry("xl/sharedStrings.xml");
            InputStream inputStream = xlsxFile.getInputStream(sharedStringXML);
            XmlPullParser xmlParser = Xml.newPullParser();
            xmlParser.setInput(inputStream, "utf-8");

            int evtType = xmlParser.getEventType();
            while (evtType != XmlPullParser.END_DOCUMENT) {
                switch (evtType) {
                case XmlPullParser.START_TAG:
                    String tag = xmlParser.getName();
                    if (tag.equalsIgnoreCase("t")) {
                        ls.add(xmlParser.nextText());
                    }
                    break;
                case XmlPullParser.END_TAG:
                    break;
                default:
                    break;
                }
                evtType = xmlParser.next();
            }
            ZipEntry sheetXML = xlsxFile.getEntry("xl/worksheets/sheet1.xml");
            InputStream inputStreamsheet = xlsxFile.getInputStream(sheetXML);
            XmlPullParser xmlParsersheet = Xml.newPullParser();
            xmlParsersheet.setInput(inputStreamsheet, "utf-8");
            int evtTypesheet = xmlParsersheet.getEventType();
            while (evtTypesheet != XmlPullParser.END_DOCUMENT) {
                switch (evtTypesheet) {
                case XmlPullParser.START_TAG:
                    String tag = xmlParsersheet.getName();

                    if (tag.equalsIgnoreCase("row")) {
                    } else if (tag.equalsIgnoreCase("c")) {
                        String t = xmlParsersheet.getAttributeValue(null, "t");
                        if (t != null) {
                            flat = true;
                            System.out.println(flat + "有");
                        } else {
                            System.out.println(flat + "没有");
                            flat = false;
                        }
                    } else if (tag.equalsIgnoreCase("v")) {
                        v = xmlParsersheet.nextText();
                        System.out.println("v--->" + v);
                        if (v != null) {
                            if (flat) {
                                str += ls.get(Integer.parseInt(v)) + "</td>";
                            } else {
                                str += v + "</td>";
                            }
                        }
                    }
                    break;
                case XmlPullParser.END_TAG:
                    if (xmlParsersheet.getName().equalsIgnoreCase("row") && v != null) {
                        str += "</tr>";
                    }
                    break;
                }
                evtTypesheet = xmlParsersheet.next();
            }
            System.out.println("str--->" + str);

            xlsxFile.close();


        } catch (ZipException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (XmlPullParserException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
[/quote]
麦田捕手 2016-08-30
  • 打赏
  • 举报
回复
引用 1 楼 assky124 的回复:
只打开可以用WPS,Office 365之类的 xlsx 就是个压缩包,按压缩包读就行了
这种方式我试了,但是遇到一个问题,就是当xlsx文件单元格内文字排版格式字体不统一时,读出的数据混乱错乱。
    try {
            ZipFile xlsxFile = new ZipFile(file);

            ZipEntry sharedStringXML = xlsxFile.getEntry("xl/sharedStrings.xml");
            InputStream inputStream = xlsxFile.getInputStream(sharedStringXML);
            XmlPullParser xmlParser = Xml.newPullParser();
            xmlParser.setInput(inputStream, "utf-8");

            int evtType = xmlParser.getEventType();
            while (evtType != XmlPullParser.END_DOCUMENT) {
                switch (evtType) {
                case XmlPullParser.START_TAG:
                    String tag = xmlParser.getName();
                    if (tag.equalsIgnoreCase("t")) {
                        ls.add(xmlParser.nextText());
                    }
                    break;
                case XmlPullParser.END_TAG:
                    break;
                default:
                    break;
                }
                evtType = xmlParser.next();
            }
            ZipEntry sheetXML = xlsxFile.getEntry("xl/worksheets/sheet1.xml");
            InputStream inputStreamsheet = xlsxFile.getInputStream(sheetXML);
            XmlPullParser xmlParsersheet = Xml.newPullParser();
            xmlParsersheet.setInput(inputStreamsheet, "gb2312");
            int evtTypesheet = xmlParsersheet.getEventType();
            while (evtTypesheet != XmlPullParser.END_DOCUMENT) {
                switch (evtTypesheet) {
                case XmlPullParser.START_TAG:
                    String tag = xmlParsersheet.getName();

                    if (tag.equalsIgnoreCase("row")) {
                    } else if (tag.equalsIgnoreCase("c")) {
                        String t = xmlParsersheet.getAttributeValue(null, "t");
                        if (t != null) {
                            flat = true;
                            System.out.println(flat + "有");
                        } else {
                            System.out.println(flat + "没有");
                            flat = false;
                        }
                    } else if (tag.equalsIgnoreCase("v")) {
                        v = xmlParsersheet.nextText();
                        System.out.println("v--->" + v);
                        if (v != null) {
                            if (flat) {
                                str += ls.get(Integer.parseInt(v)) + "</td>";
                            } else {
                                str += v + "</td>";
                            }
                        }
                    }
                    break;
                case XmlPullParser.END_TAG:
                    if (xmlParsersheet.getName().equalsIgnoreCase("row") && v != null) {
                        str += "</tr>";
                    }
                    break;
                }
                evtTypesheet = xmlParsersheet.next();
            }
            System.out.println("str--->" + str);

            xlsxFile.close();


        } catch (ZipException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (XmlPullParserException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
assky124 2016-08-29
  • 打赏
  • 举报
回复
只打开可以用WPS,Office 365之类的 xlsx 就是个压缩包,按压缩包读就行了

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧