成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

簡單好用-JAVA使用POI解析Excel

wangjuntytl / 1736人閱讀

摘要:相信使用的目前已經(jīng)非常多了,我這邊提供一個非常簡單便利又通用的解析工具類,代碼最后有示例代碼。可以按照本文直接使用。

相信使用POI的目前已經(jīng)非常多了,我這邊提供一個非常簡單便利又通用的POI解析工具類,代碼最后有示例代碼。可以按照本文直接使用。

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFDateUtil;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;

/**
 * 
 * Title: ExcelReader
* Description: 可以讀取xls,xlsx等文件
* Copyright @ 2012~2016 xiaour.github.com .All rights reserved.
* @author 小魚兒 * @createDate 2016年8月23日 * @version v1.0 */ public class ExcelReader { private POIFSFileSystem fs; private HSSFWorkbook wb; private HSSFSheet sheet; private HSSFRow row; private static Logger logger = LogManager.getLogger(ExcelReader.class); private String fileFullPath; private int sheetNo; public ExcelReader(String fileFullPath, int sheetNo) { super(); this.fileFullPath = fileFullPath; this.sheetNo = sheetNo; } /** * 讀取Excel數(shù)據(jù)內(nèi)容 * @param InputStream * @param sheetNo sheet 頁號 * @return Map 包含單元格數(shù)據(jù)內(nèi)容的Map對象 */ public List> readExcel() { logger.info("開始解析xls..."); sheetNo--;//從1開始及從0開始 InputStream is = null; try { is = new FileInputStream(fileFullPath); } catch (FileNotFoundException e1) { logger.error(e1); } Map dataMap = null; List> dataList= new ArrayList<>(); String value = ""; try { fs = new POIFSFileSystem(is); wb = new HSSFWorkbook(fs); } catch (IOException e) { logger.error(e); } sheet = wb.getSheetAt(sheetNo); row = sheet.getRow(0); // 標題總列數(shù) int colNum = row.getPhysicalNumberOfCells(); String[] keyArray = new String[colNum]; for (int i = 0; i < colNum; i++) { keyArray[i] = getCellFormatValue(row.getCell((short) i)); } int rowNum = sheet.getLastRowNum(); // 正文內(nèi)容應(yīng)該從第二行開始,第一行為表頭的標題 for (int i = 2; i <= rowNum; i++) { dataMap= new HashMap<>(); row = sheet.getRow(i); if(row!=null){ int j = 0; while (j < colNum) { //這里把列循環(huán)到Map if(row.getCell((short) j)!=null){ value = getCellFormatValue(row.getCell((short) j)).trim(); dataMap.put(keyArray[j],value); } j++; } value = ""; dataList.add(dataMap); } } logger.info("解析xls完成..."); try { if(is!=null) is.close(); } catch (IOException e) { logger.error(e.toString()); } return dataList; } /** * 根據(jù)HSSFCell類型設(shè)置數(shù)據(jù) * @param cell * @return */ private String getCellFormatValue(HSSFCell cell) { String cellvalue = ""; if (cell != null) { // 判斷當前Cell的Type switch (cell.getCellType()) { // 如果當前Cell的Type為NUMERIC case HSSFCell.CELL_TYPE_NUMERIC: case HSSFCell.CELL_TYPE_FORMULA: { // 判斷當前的cell是否為Date if (HSSFDateUtil.isCellDateFormatted(cell)) { Date date = cell.getDateCellValue(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); cellvalue = sdf.format(date); } // 如果是純數(shù)字 else { // 取得當前Cell的數(shù)值 DecimalFormat df = new DecimalFormat("0"); String dfStr = df.format(cell.getNumericCellValue()); cellvalue = dfStr; } break; } // 如果當前Cell的Type為STRIN case HSSFCell.CELL_TYPE_STRING: // 取得當前的Cell字符串 cellvalue = cell.getRichStringCellValue().getString(); break; // 默認的Cell值 default: cellvalue = " "; } } else { cellvalue = ""; } return cellvalue; } public static void main(String[] args) { List> dataList; // 對讀取Excel表格標題測試 ExcelReader excelReader = new ExcelReader("D:okcoin-2016-08-3XZS.xls",1); dataList = excelReader.readExcel(); for(Map theMap:dataList){ System.out.println(theMap); } } }

這個類導(dǎo)入相應(yīng)的jar之后就可以用了哦。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/65255.html

相關(guān)文章

  • 慕課網(wǎng)_《解密JAVA實現(xiàn)Excel導(dǎo)入導(dǎo)出》學(xué)習總結(jié)

    時間:2017年07月06日星期四說明:本文部分內(nèi)容均來自慕課網(wǎng)。@慕課網(wǎng):http://www.imooc.com教學(xué)源碼:無學(xué)習源碼:https://github.com/zccodere/s... 第一章:課程介紹 1-1 預(yù)備知識 基礎(chǔ)知識 struts2框架(上傳下載功能) xml解析技術(shù)(導(dǎo)入模板) JQuery EasyUI(前臺美觀) 課程目錄 實現(xiàn)方式 定制導(dǎo)入模版 導(dǎo)入文件 導(dǎo)...

    enrecul101 評論0 收藏0
  • POI Sax 事件驅(qū)動解析Excel2007文件(較大數(shù)據(jù)量的讀存導(dǎo)出)

    摘要:方式解析全稱,它是一個接口,也是一個軟件包。另外,推模型可用于廣播環(huán)境,能夠同時注冊多個,并行接收事件,而不是在一個管道中一個接一個地進行處理。這些語法分析器是最靈活的,因為它們還支持。 xcel2007版本的代碼如下,本文主要是用于POI解析大文件Excel容易出現(xiàn)內(nèi)存溢出的現(xiàn)象而提出解決方案,故此解決了大數(shù)據(jù)量的Excel文件解析的難度,在此拿出來貢獻給大家,謝謝! 1.Offic...

    cod7ce 評論0 收藏0
  • POI技術(shù)—用于java開發(fā)解析excel的抽象類

    摘要:單元格各類型數(shù)據(jù)讀取基本類型處理的數(shù)據(jù)包括字符型數(shù)據(jù),數(shù)字日期公式等。下面是單元格類型說明實例解析中數(shù)據(jù),要求轉(zhuǎn)換為文本方式存儲寫一個解析的抽象類版本的版本的解析的文件格式有誤 1.單元格各類型數(shù)據(jù)讀取 1.1 基本類型 處理的Excel數(shù)據(jù)包括字符型數(shù)據(jù),數(shù)字、日期、公式等。 下面是單元格類型說明: showImg(https://segmentfault.com/img/bVMjd...

    xfee 評論0 收藏0
  • Java實現(xiàn)excel導(dǎo)入導(dǎo)出學(xué)習筆記1 - 實現(xiàn)方式

    摘要:需要的技術(shù)框架利用其上傳下載功能解析技術(shù)定制導(dǎo)入模板制作前臺與格式對應(yīng),版本低,兼容性好與格式對應(yīng)組成的幾個概念工作薄工作表行記錄單元格創(chuàng)建中的的詳見如創(chuàng)建創(chuàng)建工作簿創(chuàng)建工作表創(chuàng)建第一行創(chuàng)建一個文件存盤名字性別男解析文件創(chuàng)建,讀取文件 需要的技術(shù) 1、strut2框架 利用其上傳下載功能2、xml解析技術(shù) 定制導(dǎo)入模板3、jquery UI 制作前臺 4、showImg(/i...

    wean 評論0 收藏0
  • Excel大批量數(shù)據(jù)的導(dǎo)入和導(dǎo)出,如何做優(yōu)化?

    摘要:并且在對的抽象中,每一行,每一個單元格都是一個對象。對支持使用官方例子需要繼承,覆蓋方法,每讀取到一個單元格的數(shù)據(jù)則會回調(diào)次方法。概要Java對Excel的操作一般都是用POI,但是數(shù)據(jù)量大的話可能會導(dǎo)致頻繁的FGC或OOM,這篇文章跟大家說下如果避免踩POI的坑,以及分別對于xls和xlsx文件怎么優(yōu)化大批量數(shù)據(jù)的導(dǎo)入和導(dǎo)出。一次線上問題這是一次線上的問題,因為一個大數(shù)據(jù)量的Excel導(dǎo)出...

    Tecode 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<