POI5.0将Excel之xlsx转为String[][]字符串二维数组简单试用


POI5.0将Excel之xlsx转为String[][]字符串二维数组简单试用


一、POI是什么?

Apache POI是Office文档的Java处理包

二、使用步骤

1.Maven引入

ooxml已包含对poi和schemas的引用

  	<dependency>
	    <groupId>org.apache.poi</groupId>
	    <artifactId>poi-ooxml</artifactId>
	    <version>5.0.0</version>
	</dependency>

2.示例代码

代码如下(示例):

import java.io.InputStream;

import org.apache.poi.xssf.usermodel.*;

public class Try1 {
	
	public static String[][] sheet2Sar2d(XSSFSheet sheet){
		String[][] result = null;
		try {
			result = new String[sheet.getLastRowNum()][];
			XSSFRow row = null;
			XSSFCell cell = null;
			for(int r=0; r<result.length; r++) {
				row = sheet.getRow(r);
				result[r] = row==null ? new String[0] : new String[row.getLastCellNum()];
				for(int c=0; c<result[r].length ; c++) {
					cell = row.getCell(c);
					result[r][c] = cell==null ? "" : cell.toString();
				}
			}
		}catch(Exception exception) {exception.printStackTrace();}
		return result;
	}
	
	public static void main(String[] arguments) throws Exception{
		InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream("xls010.xlsx");
		XSSFWorkbook workbook = new XSSFWorkbook(is);
		
		String[][] ar2d = sheet2Sar2d(workbook.getSheetAt(0));
		for(int r=0; r<ar2d.length; r++) {
			for(int c=0; c<ar2d[r].length; c++) {
				System.out.append(ar2d[r][c]).append(',');
			}
			System.out.println();
		}
		is.close();
		workbook.close();
	}

}

示例代码210923

	@SuppressWarnings("deprecation")
	public static String[][] rcFrSheet(Sheet sheet){
		String[][] rlt = null; Row row = null; Cell cell = null;
		int  rowCount = sheet.getLastRowNum()+1; //getLastRowNum()要+1 , getLastCellNum()不用
		int  colCount = sheet.getRow(0).getLastCellNum();
		try {
			rlt = new String[rowCount][];  
			for(int r=0; r<rlt.length; r++) {
				row = sheet.getRow(r);
				rlt[r] = new String[colCount];
				for(int c=0; c<rlt[r].length ; c++) {
					cell = row.getCell(c);
					if(cell==null) {
						rlt[r][c]="";
					}else {
						if(cell.getCellType()==CellType.STRING) {rlt[r][c]=cell.getStringCellValue();}
						else if(cell.getCellType()==CellType.NUMERIC) {
							if(DateUtil.isCellDateFormatted(cell)) {
								Date date = cell.getDateCellValue();
								String dtStr;
								if(date.getSeconds()!=0 && date.getMinutes()!=0 && date.getHours()!=0)
								{dtStr = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date);}
								else{dtStr = new SimpleDateFormat("yyyy-MM-dd").format(date);}
								rlt[r][c]=dtStr;
							}else{
								String str = cell.toString();
								if(str.endsWith(".0"))str=str.substring(0, str.length()-2);
								rlt[r][c]=str;
							};
						}else {
							rlt[r][c]=cell.toString();
						}
					}
				}
			}
		}catch(Exception exception) {exception.printStackTrace();}
		if(isPln) {
			for(int r=0;r<rlt.length;r++) {	for(int c=0;c<rlt[r].length;c++) {	System.out.append(rlt[r][c]).append("   ");	}System.out.println();		}
		}
		return rlt;
	}
	public static String[][] rcFrExcelSheet0(InputStream is){
		String sar2d[][] = null; Workbook workbook=null;
		try {
			workbook = WorkbookFactory.create(is);
			sar2d = rcFrSheet(workbook.getSheetAt(0));
		}catch(Exception exception) {exception.printStackTrace();}
		finally {
			try {is.close();}catch(Exception e) {}
			try {workbook.close();}catch(Exception e) {}
		}
		return sar2d;
	}
	
	public static class Aj extends ArrayList<LinkedHashMap<String,String>>{	private static final long serialVersionUID = 1L;}
	public static Aj ajFrRc(String[][] ar2d) {
		String heads[] = ar2d[0];
		Aj aj = new Aj();
		for(int r=1; r<ar2d.length; r++) {
			String rsar[] = ar2d[r];
			LinkedHashMap<String, String> lh = new LinkedHashMap<String, String>();
			for(int c=0;c<heads.length;c++) {		lh.put(heads[c], rsar[c]);			}			aj.add(lh);
		}
		return aj;
	}
	public static Aj ajFrExcelSheet0(InputStream is) {	String ar2d[][] = rcFrExcelSheet0(is);	return ajFrRc(ar2d);	}

总结

HSSF:Excel97-2003版本,扩展名为.xls。一个sheet最大行数65536,最大列数256。
XSSF:Excel2007版本开始,扩展名为.xlsx。一个sheet最大行数1048576,最大列数16384。
SXSSF:是在XSSF基础上,POI3.8版本开始提供的支持低内存占用的操作方式,扩展名为.xlsx。
Workbook用完要关闭
使用setCellType()要指定HSSF或XSSF , 否则已过时 , 或者直接用toString()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kfepiza

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值