java excel 的某一行_java实现excel、word的读取(几行几列)

今天闲暇了解了一下通过POI实现EXCEL内容的读取:

需要jar包:poi-3.2-FINAL-20081019.jar、poi-contrib-3.2-FINAL-20081019.jar、poi-scratchpad-3.2-FINAL-20081019.jar

详见代码:

import java.io.BufferedReader;

import java.io.FileInputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.util.Date;

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;

public class ExcelReader {

//创建文件输入流

private BufferedReader reader = null;

//文件类型

private String filetype;

//文件二进制输入流

private InputStream is = null;

//当前的Sheet

private int currSheet;

//当前位置

private int currPosition;

//Sheet数量

private int numOfSheets;

//HSSFWorkbook

HSSFWorkbook workbook = null;

//设置Cell之间以空格分隔

private static String EXCEL_LINE_DELIMITER = "";

//设置最大列数

private static int MAX_EXCEL_COLUMNS = 64;

//构造函数创建一个ExcelReader

public ExcelReader(String inputfile) throws IOException,Exception{

//判断参数是否为空或者没有意义

if(inputfile == null || inputfile.trim().equals("")){

throw new IOException("no input file specified");

}

//取得文件名的后缀名赋值给filetype

this.filetype = inputfile.substring(inputfile.lastIndexOf(".")+1);

//设置开始行为0

currPosition = 0;

//设置当前位置为0

currSheet = 0;

//创建文件输入流

is = new FileInputStream(inputfile);

//判断文件格式

if(filetype.equalsIgnoreCase("txt")){

//如果是txt则直接创建BufferedReader读取

reader = new BufferedReader(new InputStreamReader(is));

}else if(filetype.equalsIgnoreCase("xls")){

//如果是Excel文件则创建HSSFWorkbook读取

workbook = new HSSFWorkbook(is);

//设置Sheet

numOfSheets = workbook.getNumberOfSheets();

}else{

throw new Exception("不支持的文件类型");

}

}

//函数readLine读取文件的一行

public String readLine() throws IOException{

//如果是txt文件则通过reader读取

if(filetype.equalsIgnoreCase("txt")){

String str = reader.readLine();

//空行则略去,直接读取下一行

while(str.trim().equals("")){

str = reader.readLine();

}

return str;

//如果是XLS文件则通过POI提供的API读取文件

}else if(filetype.equalsIgnoreCase("xls")){

//根据currSheet值获得当前的sheet

HSSFSheet sheet = workbook.getSheetAt(currSheet);

//判断当前行是否到Sheet的结尾

if(currPosition>sheet.getLastRowNum()){

//当前行位置清零

currPosition = 0;

//判断是否还有Sheet

while(currSheet != numOfSheets-1){

//得到下一张Sheet

sheet = workbook.getSheetAt(currSheet+1);

//当前行数是否已经到达文件末尾

if(currPosition == sheet.getLastRowNum()){

//当前Sheet指向下一张Sheet

currSheet++;

continue;

}else{

//获取当前行数

int row = currPosition;

currPosition++;

//读取当前行数据

return getLine(sheet,row);

}

}

return null;

}

//获取当前行数

int row = currPosition;

currPosition++;

//读取当前行数据

return getLine(sheet,row);

}

return null;

}

//函数getLine返回Sheet的一行数据

private String getLine(HSSFSheet sheet,int row){

//根据行数取得Sheet的一行

HSSFRow rowline = sheet.getRow(row);

//创建字符缓冲区

StringBuffer buffer = new StringBuffer();

//获取当前行的列数

int filledColumns = rowline.getLastCellNum();

HSSFCell cell = null;

//循环遍历所有列

for(int i = 0;i < filledColumns;i++){

//取得当前Cell

cell = rowline.getCell(i); //该方法可以得到第几列的参数

String cellvalue = null;

if(cell != null){

//判断当前Cell的Type

switch(cell.getCellType()){

//如果当前cell的Type为NUMERIC

case HSSFCell.CELL_TYPE_NUMERIC:{

//判断当前的cell是否为Date

if(HSSFDateUtil.isCellDateFormatted(cell)){

//如果是Date类型,则得到该cell的Date值

Date date = cell.getDateCellValue();

//把Date转换为本地格式的字符串

cellvalue = cell.getDateCellValue().toLocaleString();

}else{

//如果是纯数字

//取得当前Cell的数值

Integer num = new Integer((int) cell.getNumericCellValue());

cellvalue = String.valueOf(num);

}

break;

}

//如果当前Cell的Type为STRIN

case HSSFCell.CELL_TYPE_STRING:

//取得当前的Cell字符串

cellvalue = cell.getStringCellValue().replaceAll("", "");

break;

//默认的Cell值

default:

cellvalue = " ";

}

}else{

cellvalue="";

}

//在每个字段之间插入分隔符

buffer.append(cellvalue).append(EXCEL_LINE_DELIMITER);

}

//以字符串返回该行的数据

return buffer.toString();

}

//close函数执行流的关闭操作

public void close(){

//如果is不为空,则关闭InputStream文件输入流

if(is != null){

try {

is.close();

} catch (IOException e) {

// TODO: handle exception

is = null;

}

}

//如果reader不为空,则关闭BufferedReader文件输入流

if(reader != null){

try{

reader.close();

} catch (IOException e) {

reader = null;

}

}

}

public static void main(String[] args) {

try{

ExcelReader er = new ExcelReader("D:/11.xls"); //该处的地址符号为:“/”

String line = er.readLine();

/**

* 得到某一行的总列数(会将空格排除)

*/

HSSFSheet sheet = er.workbook.getSheetAt(er.currSheet);

HSSFRow rowline = sheet.getRow(10);

int columnNum=rowline.getPhysicalNumberOfCells();

System.out.println("第15行的总列数为:"+columnNum);

for (int i = 0; i < columnNum; i++) {

//通过循环得到某一行某一列的数据

HSSFCell cellinfo = rowline.getCell(i);

System.out.println(cellinfo);

}

/**

* 循环得到整张表

*/

while(line != null){

System.out.println(line);

line = er.readLine();

}

er.close();

} catch (Exception e) {

e.printStackTrace();

}

}

}

错误之处请指正

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值