`

java excel解析数字转换科学计数数字

 
阅读更多

首先读取excel先将poi包下的jar导入

下面直接写代码了

public class ExcelUtil {
	
	/**
	 * 选择某个文件判断其后缀名是否是.xls 或者xlsx,如果是读取其信息
	 * @throws IOException 
	 */
	public static List<List<String>> readExcel(File file) {
		InputStream is;
		HSSFWorkbook workBook;
		XSSFWorkbook xssfWorkBook;
		DecimalFormat format = new DecimalFormat("#");//格式化excel数字类型
		List<List<String>> sheetList = new ArrayList<List<String>>();
		try {
			is = new FileInputStream(file);
			//读取文件
			if(file.getName().endsWith(".xls")) {
				workBook = new HSSFWorkbook(is);
				//workBoo
				//遍历每个sheet
				for (int numberSheet = 0; numberSheet < workBook.getNumberOfSheets(); numberSheet++) {
					//读取sheet
					HSSFSheet sheetAt = workBook.getSheetAt(numberSheet);
					//读取sheet是否存在和是否含有值
					if(sheetAt != null && sheetAt.getLastRowNum() > 0) {
						//读取第一行,第一行为表头信息
						HSSFRow hssfRow = sheetAt.getRow(0);
						short cellLength = hssfRow.getLastCellNum();//获取表格宽度,根据第一行来取
						//读取每一行数据,从第二行开始读取
						for(int numberCell=1;numberCell <= sheetAt.getLastRowNum();numberCell++) {
							List<String> cell = new ArrayList<String>();
							HSSFRow row = sheetAt.getRow(numberCell);//每行数据
							/**
							 * 读取sheet表中的每行数据并判断类型
							 */
							for(int cellNum=0;cellNum<cellLength;cellNum++) {
								if(row.getCell(cellNum).getCellType() == HSSFCell.CELL_TYPE_NUMERIC) { //数字为HSSFCell.CELL_TYPE_NUMERIC或者0
									cell.add(format.format(row.getCell(cellNum).getNumericCellValue()));
									System.out.print(format.format(row.getCell(cellNum).getNumericCellValue()));
								} else {
									cell.add(row.getCell(cellNum).toString());
									System.out.print(row.getCell(cellNum));
								}
							}
							sheetList.add(cell);
							System.out.println();
						}
					}
				}
			} else if(file.getName().endsWith(".xlsx")) {
				xssfWorkBook = new XSSFWorkbook(is);
				//workBoo
				//遍历每个sheet
				for (int numberSheet = 0; numberSheet < xssfWorkBook.getNumberOfSheets(); numberSheet++) {
					//读取sheet
					XSSFSheet sheetAt = xssfWorkBook.getSheetAt(numberSheet);
					//读取sheet是否存在和是否含有值
					if(sheetAt != null && sheetAt.getLastRowNum() > 0) {
						//读取第一行,第一行为表头信息
						XSSFRow hssfRow = sheetAt.getRow(0);
						short cellLength = hssfRow.getLastCellNum();//获取表格宽度,根据第一行来取
						//读取每一行数据,从第二行开始读取
						for(int numberCell=1;numberCell <= sheetAt.getLastRowNum();numberCell++) {
							List<String> cell = new ArrayList<String>();
							XSSFRow row = sheetAt.getRow(numberCell);//每行数据
							/**
							 * 读取sheet表中的每行数据并判断类型
							 */
							for(int cellNum=0;cellNum<cellLength;cellNum++) {
								if(row.getCell(cellNum).getCellType() == XSSFCell.CELL_TYPE_NUMERIC) { //数字为HSSFCell.CELL_TYPE_NUMERIC或者0
									cell.add(format.format(row.getCell(cellNum).getNumericCellValue()));
								} else {
									cell.add(row.getCell(cellNum).toString());
								}
							}
							sheetList.add(cell);
						}
					}
				}
			}
		} catch (FileNotFoundException e) {
			System.out.println(file.getName() + "文件读取异常" + e.getMessage());
		} catch (IOException e) {
			System.out.println(file.getName() + "文件解析错误" + e.getMessage());
		}
		/*System.out.println("-----------------");
		for (List<String> list : sheetList) {
			for (String string : list) {
				System.out.print(string);
			}
			System.out.println();
		}*/
		return sheetList;
	}
	
	public static void main(String[] args) {
		File file = new File("E:/test.xlsx");
		readExcel(file);
	}
}

 其中红色部分为转换代码,方法getCellType()为判断cell表格的数据类型的,如果是0或者HSSFCell.CELL_TYPE_NUMERIC为数字类型,使用上面的  DecimalFormat format = new DecimalFormat("#");//格式化excel数字类型 格式化就行了

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics