java实现excel、word的读取(几行几列)
来源:互联网 发布:ios9 数据流量 开关 编辑:程序博客网 时间:2024/06/08 10:17
今天闲暇了解了一下通过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(); } }}
错误之处请指正
阅读全文
1 0
- java实现excel、word的读取(几行几列)
- java 读取 word ,excel ,pdf
- Java读取word,excel,pdf
- java实现爬虫技术,读取txt,word,excel,ppt,pdf,html等格式的文件
- JAVA读取WORD,EXCEL,POWERPOINT,PDF文件的方法
- JAVA读取WORD,EXCEL,POWERPOINT,PDF文件的方法
- JAVA读取WORD,EXCEL,POWERPOINT,PDF文件的方法
- JAVA读取WORD,EXCEL,POWERPOINT,PDF文件的方法
- JAVA读取WORD,EXCEL,POWERPOINT,PDF文件的方法
- JAVA读取WORD,EXCEL,POWERPOINT,PDF文件的方法
- JAVA读取WORD,EXCEL,POWERPOINT,PDF文件的方法
- JAVA读取WORD,EXCEL,POWERPOINT,PDF文件的方法
- JAVA读取WORD,EXCEL,POWERPOINT,PDF文件的方法
- JAVA读取WORD,EXCEL,POWERPOINT,PDF文件的方法
- JAVA读取WORD,EXCEL,POWERPOINT,PDF文件的方法
- JAVA读取WORD,EXCEL,POWERPOINT,PDF文件的方法
- JAVA读取WORD,EXCEL,POWERPOINT,PDF文件的方法
- JAVA读取Excel的实现(利用jxl.jar读取excel)
- 命令启动与关闭模拟器
- 使用DWM实现Aero Glass效果
- MFC 画曲线
- ObReferenceObjectByName通过对象名得到对象指针_例如 设备 事件 互斥体
- 牛客网_华为机试_012_字符串翻转
- java实现excel、word的读取(几行几列)
- Git
- 字符串替换
- spi协议及工作原理分析
- [bzoj3524][Poi2014]Couriers 主席树
- Oracle之SQL——单表查询
- Linux下设置svn开机自启动
- JSON 数据格式
- <%=>和 ${}区别