poi读取excel文件|poi导入excel

poi读取excel文件|poi导入excel的第1张示图

『壹』 POI读取EXCEL文件的错误(invalidheadersignature)处理

是因为POI(3.0.1版本)还不支持EXCEL4.0以上的版本所造成的,把EXCEL另存为EXCEL3.0或其以下版本就可以解决问题了。这个可以通过VBA来实现,不用手工操作

『贰』 poi导入excel

方法/步骤

一,ExcelUtils工具类(也就是解析EXCEL文件,判断EXCEL的类型以及数据的类型)

importjava.io.IOException;

importjava.io.InputStream;

importjava.math.BigDecimal;

importjava.text.SimpleDateFormat;

importjava.util.ArrayList;

importjava.util.Date;

importjava.util.List;

importorg.apache.poi.hssf.usermodel.HSSFDateUtil;

importorg.apache.poi.hssf.usermodel.HSSFWorkbook;

importorg.apache.poi.ss.usermodel.Cell;

importorg.apache.poi.ss.usermodel.Row;

importorg.apache.poi.ss.usermodel.Sheet;

importorg.apache.poi.ss.usermodel.Workbook;

importorg.apache.poi.xssf.usermodel.XSSFWorkbook;

public class ExcelUtils {

privatefinalstaticString excel2003L =“.xls”;// 2003-版本的excel

privatefinalstaticString excel2007U =“.xlsx”;// 2007 +版本的excel

/ **

*描述:获取IO流中的数据,组装成List <List <Object>对象

* @param in,fileName

* @返回

* @throws IOException

* /

publicList <List <Object> getBankListByExcel(InputStream in,String fileName)throwsException {

列表<List <Object> list =null;

//创建的Excel工作薄

Workbook work =this.getWorkbook(in,fileName);

if(null== work){

抛出新的异常(“创建Excel工作薄为空!”);

}

Sheet sheet =null;//页数

行row =null;//行数

Cell cell =null;//列数

list =newArrayList <List <Object >>();

//遍历的Excel中所有的片

for(inti =0; i <work.getNumberOfSheets(); i ++){

sheet = work.getSheetAt(i);

if(sheet ==null){continue;}

//遍历当前片中的所有行

for(intj = sheet.getFirstRowNum(); j <= sheet.getLastRowNum(); j ++){

row = sheet.getRow(j);

if(row ==null|| row.getFirstCellNum()== j){continue;}

//遍历所有的列

列表<Object> li =newArrayList <Object>();

for(inty = row.getFirstCellNum(); y <row.getLastCellNum(); y ++){

cell = row.getCell(y);

li.add(this.getValue(cell));

}

list.add(LI);

}

}

return 单

}

/ **

*描述:根据文件后缀,自适应上传文件的版本

* @param inStr,fileName

* @返回

* @throws异常

* /

publicWorkbook getWorkbook(InputStream inStr,String fileName)throwsException {

工作簿wb =null;

String fileType = fileName.substring(fileName.lastIndexOf(“。”));

if(excel2003L.equals(fileType)){

wb =newHSSFWorkbook(inStr);// 2003-

}elseif(excel2007U.equals(fileType)){

wb =newXSSFWorkbook(inStr);// 2007 +

}else{

抛出新的异常(“解析的文件格式有误!”);

}

返回wb;

}

/ **

*描述:对表格中数值进行格式化

* @param单元格

* @返回

* /

//解决擅长类型问题,获得数值

publicString getValue(Cell cell){

String value =“”;

if(null== cell){

返回值

}

switch(cell.getCellType()){

//数值型

案例Cell.CELL_TYPE_NUMERIC:

if(HSSFDateUtil.isCellDateFormatted(cell)){

//如果是date类型则,获取该单元格的日期值

Date date = HSSFDateUtil.getJavaDate(cell.getNumericCellValue());

SimpleDateFormat format =newSimpleDateFormat(“yyyy-MM-dd”);

value = format.format(date);;

}else{//纯数字

BigDecimal big =newBigDecimal(cell.getNumericCellValue());

value = big.toString();

//解决1234.0去掉后面的.0

if(null!= value &&!“”.equals(value.trim())){

String [] item = value.split(“[。]”);

if(1<item.length &&“0”.equals(item [1])){

value = item [0];

}

}

}

break;

//字符串类型

案例Cell.CELL_TYPE_STRING:

value = cell.getStringCellValue()。toString();

break;

//公式类型

案例Cell.CELL_TYPE_FORMULA:

//读公式计算值

value = String.valueOf(cell.getNumericCellValue());

if(value.equals(“NaN”)){//如果获取的数据值为非法值,则转换为获取字符串

value = cell.getStringCellValue()。toString();

}

break;

//布尔类型

案例Cell.CELL_TYPE_BOOLEAN:

value =“”+ cell.getBooleanCellValue();

break;

默认值:

value = cell.getStringCellValue()。toString();

}

if(“null”.endsWith(value.trim())){

value =“”;

}

返回值

}

}

二,定义两个实体类,一个是对于的Excel文件,解析它的数据(ExcelBean),另一个是导入数据库表的实体类(人)

ExcelBean.java

<strong> <span style =“font-size:18px;”>importorg.apache.poi.xssf.usermodel.XSSFCellStyle;

公共类ExcelBean实现java.io.Serializable {

privateString headTextName;//列头(标题)名

privateString propertyName;//对应字段名

私有整数列;//合并单元格数

私人XSSFCellStyle cellStyle;

publicExcelBean(){

}

publicExcelBean(String headTextName,String propertyName){

这个.headTextName = headTextName;

这个.propertyName = propertyName;

}

publicExcelBean(String headTextName,String propertyName,Integer cols){

super();

这个.headTextName = headTextName;

这个.propertyName = propertyName;

这个.cols = cols;

}

publicString getHeadTextName(){

returnheadTextName;

}

publicvoidsetHeadTextName(String headTextName){

这个.headTextName = headTextName;

}

publicString getPropertyName(){

returnpropertyName;

}

publicvoidsetPropertyName(String propertyName){

这个.propertyName = propertyName;

}

publicInteger getCols(){

返回列;

}

公共无效setCols(Integer cols){

这个.cols = cols;

}

上市XSSFCellStyle getCellStyle(){

返回cellStyle;

}

公共无效setCellStyle(XSSFCellStyle cellStyle){

这个.cellStyle = cellStyle;

}

} </ span> </ strong>

people.java

importjava.util.Date;

公共课人

私有整数id

privateString userName;

私人字符串密码;

私人整数年龄;

私人日期;

publicInteger getId(){

返回id

}

publicvoidsetId(Integer id){

这个.id = id;

}

publicString getUserName(){

returnuserName;

}

publicvoidsetUserName(String userName){

这个.userName = userName ==null?null:userName.trim();

}

publicString getPassword(){

返回密码

}

publicvoidsetPassword(String password){

这个.password = password ==null?null:password.trim();

}

publicInteger getAge(){

回归年龄

}

publicvoidsetAge(Integer age){

这个.age = age

}

publicDate getDate(){

退货日期

}

publicvoidsetDate(Date date){

这个.date = date

}

}

『叁』 poi中怎么读取excel文件

先引入POIjar包(插件)网络现例

『肆』 Java POI读取Excel的时候怎么按列读取

按列读取的方法:String pathname = "E:\\files\\title.xlsx";File file = new File(pathname);InputStream in = new FileInputStream(file);//得到整个excel对象XSSFWorkbook excel = new XSSFWorkbook(in);//获取整个excel有多少个sheetint sheets = excel.getNumberOfSheets();//便利第一个sheetMap<String,String> colMap = new HashMap<String, String>();for(int i = 0 ; i < sheets ; i++ ){XSSFSheet sheet = excel.getSheetAt(i);if(sheet == null){continue;}int mergedRegions = sheet.getNumMergedRegions();XSSFRow row2 = sheet.getRow(0);Map<Integer,String> category = new HashMap<Integer, String>();for(int j = 0 ; j < mergedRegions; j++ ){CellRangeAddress rangeAddress = sheet.getMergedRegion(j);int firstRow = rangeAddress.getFirstColumn();int lastRow = rangeAddress.getLastColumn();category.put(rangeAddress.getFirstColumn(), rangeAddress.getLastColumn()+"-"+row2.getCell(firstRow).toString());}//便利每一行for( int rowNum = 1 ; rowNum <= sheet.getLastRowNum() ; rowNum++ ){System.out.println();XSSFRow row = sheet.getRow(rowNum);if(row == null){continue;}short lastCellNum = row.getLastCellNum();String cate = "";Integer maxIndex = 0;for( int col = row.getFirstCellNum() ; col < lastCellNum ; col++ ){XSSFCell cell = row.getCell(col);if(cell == null ){continue;}if("".equals(cell.toString())){continue;}int columnIndex = cell.getColumnIndex();String string = category.get(columnIndex);if(string != null && !string.equals("")){String[] split = string.split("-");cate = split[1];maxIndex = Integer.parseInt(split[0]);System.out.println(cate+"<–>"+cell.toString());}else {//如果当前便利的列编号小于等于合并单元格的结束,说明分类还是上面的分类名称if(columnIndex<=maxIndex){System.out.println(cate+"<–>"+cell.toString());}else {System.out.println("分类未知"+"<–>"+cell.toString());}}}}}}

『伍』 java使用poi读取excel时,电话号码变成了科学计数法,整数变成double,怎么改过来

为了防止数字变成科学计数法方式表示,在源文件以及java代码中都用文的方式去生成和解析excel,具体如下:

生成Excel时,设置单元格格式为STRING,即:

//关键代码

HSSFCell cell = new HSSFCell();

cell.setCellType(HSSFCell.CELL_TYPE_STRING);

同理,解析的时候,首先要保证源excel文件中该单元格格式是文本类型的,然后在java代码里用STRING类型去解析:

//关键代码

String value = cell.getStringCellValue();

(5)poi读取excel文件扩展阅读;

在这里,将只介绍一些和格式设置有关的语句,假定workbook就是对一个工作簿的引用。在Java中,第一步要做的就是创建和设置字体和单元格的格式,然后再应用这些格式:

创建字体,设置其为红色、粗体:

HSSFFont font = workbook.createFont();

font.setColor(HSSFFont.COLOR_RED);

font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);

『陆』 POI如何读取多重文件夹下的所有excel文档

利用模糊查询,篇读整个磁盘,找到所有XLSX文件,然后记录在数组中,利用循环一个一个读取,不过效率非常低,能力有限,我的思路就这个了,程序编写99%不会这样做,而是相对固定某个文件夹或者某个文件

『柒』 如何用Apache POI读取Excel

首先POI是开源组织Apache出品的一个开源jar包,提供了方便解析Excel的API,我们可以非常方便的使用它来读取Excel。这里介绍3.5Final版本。

所需用到的jar包如下:

说到Excel,有2003和2007,格式是不一样的,用POI解析的方法也就不一样,Excel2003主要是使用org.apache.poi.hssf.usermodel包中的类来解析,而Excel2007就是使用org.apache.poi.xssf.usermodel来解析。

解析Excel2003源码

说到Excel,有2003和2007,格式是不一样的,用POI解析的方法也就不一样,Excel2003主要是使用org.apache.poi.hssf.usermodel包中的类来解析,而Excel2007就是使用org.apache.poi.xssf.usermodel来解析。

解析Excel2003源码

StringBuffer content = new StringBuffer();HSSFWorkbook workbook = new HSSFWorkbook(is); // 创建对Excel工作簿文件的引用

for (int numSheets = 0; numSheets < workbook.getNumberOfSheets(); numSheets++) {if (null != workbook.getSheetAt(numSheets)) {HSSFSheet aSheet = workbook.getSheetAt(numSheets); // 获得一个sheet

for (int rowNumOfSheet = 0; rowNumOfSheet <= aSheet.getLastRowNum(); rowNumOfSheet++) {if (null != aSheet.getRow(rowNumOfSheet)) {HSSFRow aRow = aSheet.getRow(rowNumOfSheet); // 获得一行

for (int cellNumOfRow = 0; cellNumOfRow <= aRow.getLastCellNum(); cellNumOfRow++) {if (null != aRow.getCell(cellNumOfRow)) {HSSFCell aCell = aRow.getCell(cellNumOfRow); // 获得列值if (aCell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC) {content.append(aCell.getNumericCellValue() + "");} else if (aCell.getCellType() == HSSFCell.CELL_TYPE_BOOLEAN) {content.append(aCell.getBooleanCellValue() + "");} else if (aCell.getCellType() == HSSFCell.CELL_TYPE_STRING) {content.append(aCell.getStringCellValue() + "");} else if (aCell.getCellType() == HSSFCell.CELL_TYPE_FORMULA){content.append(aCell.getCellFormula() + "");} else {continue;}}if(cellNumOfRow == aRow.getLastCellNum()) {content.append("");}}}}}}

return content.toString().trim();

解析Excel2007和2003基本一样,只是将HSSFSheet,HSSFCell等都改成XSSFSheet,XSSFCell即可。

另外要提醒大家的是Excel的样式都是基于一个单元格的,所以用HSSFRow.getRowStyle()拿样式会出问题的,不一定会拿到你想要的样式。处理合并单元格是POI的一个难点,只能通过判断当前单元格是否在合并单元格之中,如果是,那此单元格的值便是这个合并单元格的首位置单元格的值,只有通过这样才能来处理合并单元格。

处理合并单元格的代码:

public static boolean isMergedRegion(HSSFSheet sheet, HSSFCell cell) {//得到一个sheet中有多少个合并单元格int sheetmergerCount = sheet.getNumMergedRegions();for(int i = 0; i < sheetmergerCount; i++) {//得出具体的合并单元格CellRangeAddress ca = sheet.getMergedRegion(i);//得到合并单元格的起始行, 结束行, 起始列, 结束列int firstC = ca.getFirstColumn();int lastC = ca.getLastColumn();int firstR = ca.getFirstRow();int lastR = ca.getLastRow();//判断该单元格是否在合并单元格范围之内, 如果是, 则返回 trueif(cell.getColumnIndex() <= lastC && cell.getColumnIndex() >= firstC) {if(cell.getRowIndex() <= lastR && cell.getRowIndex() >= firstR) {return true;}}}return false;}

public static String getMergedRegionValue(HSSFSheet sheet, HSSFCell cell) {//获得一个 sheet 中合并单元格的数量int sheetmergerCount = sheet.getNumMergedRegions();//便利合并单元格for(int i = 0; i < sheetmergerCount; i++) {//获得合并单元格CellRangeAddress ca = sheet.getMergedRegion(i);//获得合并单元格的起始行, 结束行, 起始列, 结束列int firstC = ca.getFirstColumn();int lastC = ca.getLastColumn();int firstR = ca.getFirstRow();int lastR = ca.getLastRow();//判断该单元格是否是在合并单元格中, 如果是, 则返回所在合并单元格的首单元格的值if(cell.getColumnIndex() <= lastC && cell.getColumnIndex() >= firstC) {if(cell.getRowIndex() <= lastR && cell.getRowIndex() >= firstR) {HSSFRow fRow = sheet.getRow(firstR);HSSFCell fCell = fRow.getCell(firstC);//除了合并单元格首单元格的值, 其余的用(*)来区分if (fCell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC && hasBorder(cell)) {return String.valueOf(fCell.getNumericCellValue());} else if (fCell.getCellType() == HSSFCell.CELL_TYPE_BOOLEAN && hasBorder(cell)) {return String.valueOf(fCell.getBooleanCellValue());} else if (fCell.getCellType() == HSSFCell.CELL_TYPE_STRING && hasBorder(cell)) {return fCell.getStringCellValue();} else if (fCell.getCellType() == HSSFCell.CELL_TYPE_FORMULA && hasBorder(cell)){return String.valueOf(fCell.getCellFormula());}}}}return "";}

『捌』 java poi怎么获取excel单元格的内容

packagee.sjtu.erplab.poi;importjava.io.InputStream&ch=ww.xqy.chain"target="_blank"class="link-ke">FileInputStream;importjava.io.FileNotFoundException;importjava.io.IOException;importjava.io.InputStream;importjava.text.SimpleDateFormat;importjava.util.Date;importjava.util.HashMap;importjava.util.Map;importorg.apache.poi.hssf.usermodel.HSSFCell;importorg.apache.poi.hssf.usermodel.HSSFDateUtil;importorg.apache.poi.hssf.usermodel.HSSFRow;importorg.apache.poi.hssf.usermodel.HSSFSheet;importorg.apache.poi.hssf.usermodel.HSSFWorkbook;importorg.apache.poi.poifs.filesystem.POIFSFileSystem;/***操作Excel表格的功能类*/publicclassExcelReader{privatePOIFSFileSystemfs;privateHSSFWorkbookwb;privateHSSFSheetsheet;privateHSSFRowrow;/***读取Excel表格表头的内容*@paramInputStream*@returnString表头内容的数组*/publicString[]readExcelTitle(InputStreamis){try{fs=newPOIFSFileSystem(is);wb=newHSSFWorkbook(fs);}catch(IOExceptione){e.printStackTrace();}sheet=wb.getSheetAt(0);row=sheet.getRow(0);//标题总列数intcolNum=row.getPhysicalNumberOfCells();System.out.println("colNum:"+colNum);String[]title=newString[colNum];for(inti=0;i<colNum;i++){//title[i]=getStringCellValue(row.getCell((short)i));title[i]=getCellFormatValue(row.getCell((short)i));}returntitle;}/***读取Excel数据内容*@paramInputStream*@returnMap包含单元格数据内容的Map对象*/publicMap<Integer,String>readExcelContent(InputStreamis){Map<Integer,String>content=newHashMap<Integer,String>();Stringstr="";try{fs=newPOIFSFileSystem(is);wb=newHSSFWorkbook(fs);}catch(IOExceptione){e.printStackTrace();}sheet=wb.getSheetAt(0);//得到总行数introwNum=sheet.getLastRowNum();row=sheet.getRow(0);intcolNum=row.getPhysicalNumberOfCells();//正文内容应该从第二行开始,第一行为表头的标题for(inti=1;i<=rowNum;i++){row=sheet.getRow(i);intj=0;while(j<colNum){//每个单元格的数据内容用"-"分割开,以后需要时用String类的replace()方法还原数据//也可以将每个单元格的数据设置到一个javabean的属性中,此时需要新建一个javabean//str+=getStringCellValue(row.getCell((short)j)).trim()+//"-";str+=getCellFormatValue(row.getCell((short)j)).trim()+"";j++;}content.put(i,str);str="";}returncontent;}/***获取单元格数据内容为字符串类型的数据**@paramcellExcel单元格*@returnString单元格数据内容*/(HSSFCellcell){StringstrCell="";switch(cell.getCellType()){caseHSSFCell.CELL_TYPE_STRING:strCell=cell.getStringCellValue();break;caseHSSFCell.CELL_TYPE_NUMERIC:strCell=String.valueOf(cell.getNumericCellValue());break;caseHSSFCell.CELL_TYPE_BOOLEAN:strCell=String.valueOf(cell.getBooleanCellValue());break;caseHSSFCell.CELL_TYPE_BLANK:strCell="";break;default:strCell="";break;}if(strCell.equals("")||strCell==null){return"";}if(cell==null){return"";}returnstrCell;}/***获取单元格数据内容为日期类型的数据**@paramcell*Excel单元格*@returnString单元格数据内容*/privateStringgetDateCellValue(HSSFCellcell){Stringresult="";try{intcellType=cell.getCellType();if(cellType==HSSFCell.CELL_TYPE_NUMERIC){Datedate=cell.getDateCellValue();result=(date.getYear()+1900)+"-"+(date.getMonth()+1)+"-"+date.getDate();}elseif(cellType==HSSFCell.CELL_TYPE_STRING){Stringdate=getStringCellValue(cell);result=date.replaceAll("[年月]","-").replace("日","").trim();}elseif(cellType==HSSFCell.CELL_TYPE_BLANK){result="";}}catch(Exceptione){System.out.println("日期格式不正确!");e.printStackTrace();}returnresult;}/***根据HSSFCell类型设置数据*@paramcell*@return*/(HSSFCellcell){Stringcellvalue="";if(cell!=null){//判断当前Cell的Typeswitch(cell.getCellType()){//如果当前Cell的Type为NUMERICcaseHSSFCell.CELL_TYPE_NUMERIC:caseHSSFCell.CELL_TYPE_FORMULA:{//判断当前的cell是否为Dateif(HSSFDateUtil.isCellDateFormatted(cell)){//如果是Date类型则,转化为Data格式//方法1:这样子的data格式是带时分秒的:2011-10-120:00:00//cellvalue=cell.getDateCellValue().toLocaleString();//方法2:这样子的data格式是不带带时分秒的:2011-10-12Datedate=cell.getDateCellValue();SimpleDateFormatsdf=newSimpleDateFormat("yyyy-MM-dd");cellvalue=sdf.format(date);}//如果是纯数字else{//取得当前Cell的数值cellvalue=String.valueOf(cell.getNumericCellValue());}break;}//如果当前Cell的Type为STRINcaseHSSFCell.CELL_TYPE_STRING://取得当前的Cell字符串cellvalue=cell.getRichStringCellValue().getString();break;//默认的Cell值default:cellvalue="";}}else{cellvalue="";}returncellvalue;}publicstaticvoidmain(String[]args){try{//对读取Excel表格标题测试InputStreamis=newFileInputStream("d:\test2.xls");ExcelReaderexcelReader=newExcelReader();String[]title=excelReader.readExcelTitle(is);System.out.println("获得Excel表格的标题:");for(Strings:title){System.out.print(s+"");}//对读取Excel表格内容测试InputStreamis2=newFileInputStream("d:\test2.xls");Map<Integer,String>map=excelReader.readExcelContent(is2);System.out.println("获得Excel表格的内容:");for(inti=1;i<=map.size();i++){System.out.println(map.get(i));}}catch(FileNotFoundExceptione){System.out.println("未找到指定路径的文件!");e.printStackTrace();}}}

『玖』 POI 读取excel

直接上源码:package e.sjtu.erplab.poi;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.IOException;import java.io.InputStream;import java.text.SimpleDateFormat;import java.util.Date;import java.util.HashMap;import java.util.Map;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;/*** 操作Excel表格的功能类*/public class ExcelReader {private POIFSFileSystem fs;private HSSFWorkbook wb;private HSSFSheet sheet;private HSSFRow row;/*** 读取Excel表格表头的内容* @param InputStream* @return String 表头内容的数组*/public String[] readExcelTitle(InputStream is) {try {fs = new POIFSFileSystem(is);wb = new HSSFWorkbook(fs);} catch (IOException e) {e.printStackTrace();}sheet = wb.getSheetAt(0);row = sheet.getRow(0);// 标题总列数int colNum = row.getPhysicalNumberOfCells();System.out.println("colNum:" + colNum);String[] title = new String[colNum];for (int i = 0; i < colNum; i++) {//title[i] = getStringCellValue(row.getCell((short) i));title[i] = getCellFormatValue(row.getCell((short) i));}return title;}/*** 读取Excel数据内容* @param InputStream* @return Map 包含单元格数据内容的Map对象*/public Map<Integer, String> readExcelContent(InputStream is) {Map<Integer, String> content = new HashMap<Integer, String>();String str = "";try {fs = new POIFSFileSystem(is);wb = new HSSFWorkbook(fs);} catch (IOException e) {e.printStackTrace();}sheet = wb.getSheetAt(0);// 得到总行数int rowNum = sheet.getLastRowNum();row = sheet.getRow(0);int colNum = row.getPhysicalNumberOfCells();// 正文内容应该从第二行开始,第一行为表头的标题for (int i = 1; i <= rowNum; i++) {row = sheet.getRow(i);int j = 0;while (j < colNum) {// 每个单元格的数据内容用"-"分割开,以后需要时用String类的replace()方法还原数据// 也可以将每个单元格的数据设置到一个javabean的属性中,此时需要新建一个javabean// str += getStringCellValue(row.getCell((short) j)).trim() +// "-";str += getCellFormatValue(row.getCell((short) j)).trim() + " ";j++;}content.put(i, str);str = "";}return content;}/*** 获取单元格数据内容为字符串类型的数据** @param cell Excel单元格* @return String 单元格数据内容*/private String getStringCellValue(HSSFCell cell) {String strCell = "";switch (cell.getCellType()) {case HSSFCell.CELL_TYPE_STRING:strCell = cell.getStringCellValue();break;case HSSFCell.CELL_TYPE_NUMERIC:strCell = String.valueOf(cell.getNumericCellValue());break;case HSSFCell.CELL_TYPE_BOOLEAN:strCell = String.valueOf(cell.getBooleanCellValue());break;case HSSFCell.CELL_TYPE_BLANK:strCell = "";break;default:strCell = "";break;}if (strCell.equals("") || strCell == null) {return "";}if (cell == null) {return "";}return strCell;}/*** 获取单元格数据内容为日期类型的数据** @param cell* Excel单元格* @return String 单元格数据内容*/private String getDateCellValue(HSSFCell cell) {String result = "";try {int cellType = cell.getCellType();if (cellType == HSSFCell.CELL_TYPE_NUMERIC) {Date date = cell.getDateCellValue();result = (date.getYear() + 1900) + "-" + (date.getMonth() + 1)+ "-" + date.getDate();} else if (cellType == HSSFCell.CELL_TYPE_STRING) {String date = getStringCellValue(cell);result = date.replaceAll("[年月]", "-").replace("日", "").trim();} else if (cellType == HSSFCell.CELL_TYPE_BLANK) {result = "";}} catch (Exception e) {System.out.println("日期格式不正确!");e.printStackTrace();}return result;}/*** 根据HSSFCell类型设置数据* @param cell* @return*/private String getCellFormatValue(HSSFCell cell) {String cellvalue = "";if (cell != null) {// 判断当前Cell的Typeswitch (cell.getCellType()) {// 如果当前Cell的Type为NUMERICcase HSSFCell.CELL_TYPE_NUMERIC:case HSSFCell.CELL_TYPE_FORMULA: {// 判断当前的cell是否为Dateif (HSSFDateUtil.isCellDateFormatted(cell)) {// 如果是Date类型则,转化为Data格式//方法1:这样子的data格式是带时分秒的:2011-10-12 0:00:00//cellvalue = cell.getDateCellValue().toLocaleString();//方法2:这样子的data格式是不带带时分秒的:2011-10-12Date date = cell.getDateCellValue();SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");cellvalue = sdf.format(date);}// 如果是纯数字else {// 取得当前Cell的数值cellvalue = String.valueOf(cell.getNumericCellValue());}break;}// 如果当前Cell的Type为STRINcase HSSFCell.CELL_TYPE_STRING:// 取得当前的Cell字符串cellvalue = cell.getRichStringCellValue().getString();break;// 默认的Cell值default:cellvalue = " ";}} else {cellvalue = "";}return cellvalue;}public static void main(String[] args) {try {// 对读取Excel表格标题测试InputStream is = new FileInputStream("d:\\test2.xls");ExcelReader excelReader = new ExcelReader();String[] title = excelReader.readExcelTitle(is);System.out.println("获得Excel表格的标题:");for (String s : title) {System.out.print(s + " ");}// 对读取Excel表格内容测试InputStream is2 = new FileInputStream("d:\\test2.xls");Map<Integer, String> map = excelReader.readExcelContent(is2);System.out.println("获得Excel表格的内容:");for (int i = 1; i <= map.size(); i++) {System.out.println(map.get(i));}} catch (FileNotFoundException e) {System.out.println("未找到指定路径的文件!");e.printStackTrace();}}}

『拾』 Poi如何去读取excel文件

直接全部在action里面写的,这个就不多说了,直接上代码:public String executeExcel() throws Exception{ String realPath = ServletActionContext.getServletContext().getRealPath("/fileupload"); System.out.println(fileFileName); String filePath = ""; if(this.file!=null){ File saveFile = new File(new File(realPath),this.fileFileName); filePath = realPath+"\\"+this.fileFileName; System.out.println(filePath); if(!saveFile.getParentFile().exists()){ saveFile.getParentFile().mkdirs(); } FileUtils.File(file, saveFile); } this.exlToDB(filePath); ActionContext.getContext().put("message","导入成功"); return "success"; } //读取excel2007,并把数据插入数据库 public void exlToDB(String filePath){ boolean flag = true; AllKpi akpi = new AllKpi(); try { // 文件流指向excel文件 FileInputStream fin=new FileInputStream(filePath); XSSFWorkbook workbook = new XSSFWorkbook(fin);// 创建工作薄 XSSFSheet sheet = workbook.getSheetAt(0);// 得到工作表 XSSFRow row = null;// 对应excel的行 XSSFCell cell = null;// 对应excel的列 int totalRow = sheet.getLastRowNum();// 得到excel的总记录条数 System.out.println(totalRow); // 以下的字段一一对应数据库表的字段 float idd = 0.0f; String id = ""; String Name = ""; String DEPT_NAME = ""; String Weight = ""; <span></span>String ALGORITHM = ""; String text = " "; //String sql = "insert into DSP_TJ_KPI values(DSP_TJ_KPI_SEQ.nextval,?,?,?,'无',?)"; for (int i = 1; i <= totalRow; i++) { row = sheet.getRow(i); //System.out.println(row.getCell(0).toString()); if(row.getCell(0) != null && !"".equals(row.getCell(0)) && row.getCell(1) != null && !"".equals(row.getCell(1)) && row.getCell(2) != null && !"".equals(row.getCell(2)) && row.getCell(3) != null && !"".equals(row.getCell(3))){ cell = row.getCell((short) 0); Name = cell.toString(); System.out.println(Name); cell = row.getCell((short) 1); Weight = cell.toString(); System.out.println(Weight); cell = row.getCell((short) 2); DEPT_NAME = cell.toString(); System.out.println(DEPT_NAME); cell = row.getCell((short) 3); ALGORITHM = cell.toString(); System.out.println(ALGORITHM); akpi.setAllkpiName(Name); akpi.setAllkpiDeptName(DEPT_NAME); akpi.setAllkpiWeight(Weight); akpi.setAlgorithm(ALGORITHM); akpi.setText(text); allKpiService.addAllKpi(akpi); //以下注释代码为连接jdbc测试代码块 /*pst = con.prepareStatement(sql); //pst.setString(1, student_id); pst.setString(1, DEPT_NAME); pst.setString(2, Name); pst.setString(3, Weight); <span></span>pst.setString(4, ALGORITHM); pst.execute();*/ System.out.println("preparestatement successful"); } } /*pst.close(); con.close();*/ fin.close(); } catch (FileNotFoundException e) { flag = false; e.printStackTrace(); } catch (IOException ex) { flag = false; ex.printStackTrace(); }

未经允许不得转载:山九号 » poi读取excel文件|poi导入excel

赞 (0)