变态重口极致另类在线-波多久久夜色精品国产-波多野结衣在线观看一区-波多野结衣在线观看一区二区-污污的网站免费阅读-污污视频网址

東坡下載:內容最豐富最安全的下載站!

幫助|文件類型庫|最新更新|下載分類|排行榜

編程相關破解相關編程工具反編譯安裝制作程序源碼軟件補丁數據庫Visual Studiovc++visualbasicdreamweaver

首頁編程開發程序源碼 → android5使用poi讀取excel源代碼

android5使用poi讀取excel源代碼

android5使用poi讀取excel源代碼

  • 大小:9.6M
  • 語言:中文
  • 平臺:WinAll
  • 更新:2020-11-02 11:7
  • 等級:
  • 類型:程序源碼
  • 網站:暫無
  • 授權:免費軟件
  • 廠商:
  • 產地:國產軟件
好用好玩 50%(0)
坑爹 坑爹 50%(0)
軟件介紹軟件截圖相關軟件軟件教程網友評論下載地址

相關推薦:

    最近由于工作需要,需要寫一個工具,實現搜索功能,數據來源為excel表格。
    目前主要實現方式為兩種,一種是基于jxl組件,另一種是POI。兩種方式的區別在于,jxl 只能讀取2003版的excel,即后綴為xls的文件。當今常用的excel都是07版了,使用的為xlsx后綴文件。基于XML的壓縮文件格式取代了其目前專有的默認文件格式 xls. 所以如果還用jxl,解析代碼中存在 解壓縮以及解析xml 的代碼。下面會大概提一下這種方法,網上也有很多例子。 JXL已經不再維護更新了,POI 比較強大,可以支持07版本。缺點就是不太適合android,需要重新打包poi,同時還會出現android 65K limit 的問題。網上解決65k 方法很多,這里就不多講了,此處近貼出讀取的部分代碼,寫excel也很簡單,就不貼了。

    使用JXL讀取excel

    讀取xls

    上面代碼基本僅可以讀取xls,對于數據的處理可根據自己需求修改。

    讀取xlsx

    讀取xlsx,就需要對其進行解壓,遍歷XML文件來獲取所需數據。
    public static String readXLSX(String path) { String str = ""; String v = null; boolean flat = false; List<String> ls = new ArrayList<String>(); try { ZipFile xlsxFile = new ZipFile(new File(path)); 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(); Log.e("=====>","==xmlParser====>"+xmlParser.toString()); while (evtType != XmlPullParser.END_DOCUMENT) { switch (evtType) { case XmlPullParser.START_TAG: String tag = xmlParser.getName(); if (tag.equalsIgnoreCase("t")) { ls.add(xmlParser.nextText()); Log.e("=====>","===xmlParser===>"+ls.toString()); } 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(); Log.e("=====>","===tag222===>"+tag); 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(); if (v != null) { if (flat) { //new Bean(ls.get(Integer.parseInt(v))) str += ls.get(Integer.parseInt(v)) + " "; } else { str += v + " "; } } } break; case XmlPullParser.END_TAG: if (xmlParsersheet.getName().equalsIgnoreCase("row") && v != null) { str += "\n"; } break; } evtTypesheet = xmlParsersheet.next(); } System.out.println(str); } catch (ZipException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (XmlPullParserException e) { e.printStackTrace(); } if (str == null) { str = "解析文件出現問題"; } return str; }

    此處代碼可以看出 主要是解壓遍歷

    "xl/sharedStrings.xml"   可以按照行取出所有數據(每遍歷一次 取出一個單元格內容數據,橫向推)
    "xl/worksheets/sheet1.xml" 取出行、列的位置,并用換行 空格來替換。 lz 試過可以正常讀取數據,但是對數據再進行二次處理感覺比較繁瑣,就沒有使用這種方法。

    使用POI 讀取execl

    首先嘗試直接使用maven庫來導入POI包
    compile group: 'org.apache.poi', name: 'poi', version: '3.15' compile group: 'org.apache.poi', name: 'poi-ooxml-schemas', version: '3.9' compile group: 'org.apache.poi', name: 'poi-ooxml', version: '3.15'

    Paste_Image.png

    編譯沖突,主要原因是

    Paste_Image.png


    所以android工程無法直接引用這些包,于是所有的線索指向了 andruhon ,andruhon 重新打包POI ,精簡掉一些與excel無關的東西。解決了duplicate class 的問題。具體相關例子可參看https://github.com/andruhon/android5xlsx。

    實現代碼如下:

    public void readExcelByPoi(String filepath) { try { String cellInfo = "1"; InputStream stream =null; stream = new FileInputStream(filepath);//"mnt/sdcard/test.xls" // InputStream stream = getResources().openRawResource(R.raw.test1); XSSFWorkbook workbook = null; try { workbook = new XSSFWorkbook(stream); } catch (IOException e) { e.printStackTrace(); } XSSFSheet sheet = workbook.getSheetAt(0); int rowsCount = sheet.getPhysicalNumberOfRows();// 獲取行數 // Row row = sheet.getRow(0);// 獲取第一行(約定第一行是標題行) // String[] titles = new String[rowsCount]; // for (int i = 0; i < titles.length; i++) { // titles[i] = getCellFormatValue(row.getCell(i));//獲取第一行內容 // } FormulaEvaluator formulaEvaluator = workbook.getCreationHelper().createFormulaEvaluator(); getWritableDatabase().beginTransaction();// 手動開啟事務提高效率 for (int r = 1; r < rowsCount; r++) { Log.e("=======>","=======>"+rowsCount); Row row = sheet.getRow(r); int cellsCount = row.getPhysicalNumberOfCells(); nameKey = getCellAsString(row,0, formulaEvaluator); type = getCellAsString(row,1, formulaEvaluator); tab = getCellAsString(row,2, formulaEvaluator); mode = getCellAsString(row,3, formulaEvaluator); initial = getCellAsString(row,8, formulaEvaluator); steps = getCellAsString(row,9, formulaEvaluator); insert(nameKey, type, tab, mode, initial, steps); // for (int c = 0; c < cellsCount; c++) { // String value = getCellAsString(row, c, formulaEvaluator); // cellInfo = "r:" + r + "; c:" + c + "; v:" + value; // Log.e("====>", "====>" + cellInfo); //// printlnToUser(cellInfo); // } } getWritableDatabase().setTransactionSuccessful(); getWritableDatabase().endTransaction(); } catch (FileNotFoundException e) { e.printStackTrace(); }finally { getWritableDatabase().close(); } }

    protected String getCellAsString(Row row, int c, FormulaEvaluator formulaEvaluator) {
       String value = "";
       try {
           org.apache.poi.ss.usermodel.Cell cell = row.getCell(c);
           CellValue cellValue = formulaEvaluator.evaluate(cell);
           switch (cellValue.getCellType()) {
               case org.apache.poi.ss.usermodel.Cell.CELL_TYPE_BOOLEAN:
                   value = ""+cellValue.getBooleanValue();
                   break;
               case org.apache.poi.ss.usermodel.Cell.CELL_TYPE_NUMERIC:
                   double numericValue = cellValue.getNumberValue();
                   if(HSSFDateUtil.isCellDateFormatted(cell)) {
                       double date = cellValue.getNumberValue();
                       SimpleDateFormat formatter =
                               new SimpleDateFormat("dd/MM/yy");
                       value = formatter.format(HSSFDateUtil.getJavaDate(date));
                   } else {
                       value = ""+numericValue;
                   }
                   break;
               case org.apache.poi.ss.usermodel.Cell.CELL_TYPE_STRING:
                   value = ""+cellValue.getStringValue();
                   break;
               default:
           }
       } catch (NullPointerException e) {
           /* proper error handling should be here */
       }
       return value;}`

    此處根據自己項目業務 將數據插入了sqlite 中。

    PC官方
    安卓官方手機版
    IOS官方手機版

    android5使用poi讀取excel源代碼截圖

    下載地址

    android5使用poi讀取excel源代碼

    熱門評論
    最新評論
    昵稱:
    表情: 高興 可 汗 我不要 害羞 好 下下下 送花 屎 親親
    字數: 0/500 (您的評論需要經過審核才能顯示)

    編輯推薦

    報錯

    請簡要描述您遇到的錯誤,我們將盡快予以修正。

    轉帖到論壇
    輪壇轉帖HTML方式

    輪壇轉帖UBB方式

    主站蜘蛛池模板: 欧美视频一 | 国产香蕉精品视频在 | 欧美日韩美女 | 国产成人一区二区 | 正品蓝导航永久福利在线视频 | 五月激情丁香网 | a级精品九九九大片免费看 a级精品国产片在线观看 | 亚洲色图综合网 | 国产aⅴ一区二区 | 亚洲欧美高清视频 | www精品视频| 手机在线毛片免费播放 | 无限看免费视频大全在线播放 | 成人日b视频 | 国产一区二区三区视频在线观看 | 国产色视频网站免费观看 | 天堂网亚洲 | 天天夜日日日日碰日日摸 | 亚洲人成网址在线观看 | 在线免费日韩 | 日韩黄色大片免费看 | 一本久道综合久久精品 | 2020最新国产精品视频 | 麻豆md国产在线观看 | 国产成人在线播放 | 香蕉吧 | 色网址在线观看 | 清清草在线视频 | 在线观看91精品国产入口 | 久草首页在线观看 | 日本大黄网站 | 欧美在线观看a | 欧美无内丝袜大尺度福利写真 | 在线观看你懂得 | 国产l精品国产亚洲区久久 国产papa | 欧美在线一区二区三区欧美 | 日本边添边摸边做边爱小视频 | 皇色在线 | 色迷迷网免费站视频在线观看 | 国产成人一区二区在线不卡 | 香港三级日本三级人妇网站 |