`

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数字类型 格式化就行了

分享到:
评论

相关推荐

    EXCEL导出(JAVA实现)

    本文将详细解析一个Java实现的Excel导出方法,该方法名为`dataToExcel`,它接收四个参数:`ResultSet rs`(用于获取数据库查询结果)、`String taskId`(任务ID)、`String name`(工作表名称)以及`DBPool db`...

    日志文件解析Excel版

    "日志文件解析Excel版"是一个工具,它旨在帮助用户方便地处理和分析这些日志数据,将其转化为易于理解和处理的Excel格式。 1. **日志文件解析**:日志文件通常包含大量的文本信息,如时间戳、事件级别(如INFO、...

    SpringBoot整合poi实现Excel文件的导入和导出.pdf

    假设我们有一个`uploadList`接口,用于接收上传的Excel文件并进行解析: ```java @PostMapping("uploadList") public BaseRespBo uploadList(@RequestParam("file") MultipartFile file) { BaseRespBo rsp = new ...

    JXL使用案例

    在使用JXL解析Excel文件时,可能会遇到日期被识别为数字的情况。例如,在Excel中输入的日期格式“2008-3-18”可以被正确识别,但“3-18”则可能被识别为数字。为了解决这一问题,需要判断单元格是否是日期格式。有...

    浮点数与十六进制转换.rar

    了解浮点数和十六进制转换的原理对理解和调试涉及数字表示的代码至关重要,尤其是在处理浮点数精度问题、数据传输或解析二进制数据时。而通过使用特定的转换工具,可以简化这个过程,提高效率,这对于IT从业者来说是...

    java JDK1.5实例宝典

    《Java JDK1.5实例宝典》是一本深入解析JDK1.5版本中关键特性和类库的实践指南,涵盖了Java Mail、Servlet、JSP以及多线程等多个核心领域。这本书通过丰富的实例来帮助读者理解和掌握Java编程的精髓。 在JDK1.5中,...

    Java_OpenRefine是一个免费的开源强大工具,用于处理杂乱的数据并对其进行改进.zip

    总结来说,Java OpenRefine是一个强大的数据清洗和转换工具,对于数据科学家、记者、研究人员以及任何需要处理结构化数据的人来说,都是一个不可或缺的工具。其易用性、灵活性和强大的功能使其在数据预处理领域占据...

    2021-2022计算机二级等级考试试题及答案No.13345.docx

    - **解析**: 浮点数的表示通常遵循科学计数法,允许有符号、小数点以及指数部分。选项B中的“-.60”、“12e-4”和“-8e5”都是合法的浮点数表示。因此,正确答案是**B**。 #### 9. Excel计算表达式的标识符 - **...

    微软Java面试题汇总(最新)

    - **计数数字中的1位**: - **速度优化**:使用位运算技巧,比如将数字减去1后再与其本身进行与运算,可以清除最低位的1。 - **空间优化**:由于只关心1的数量,不需额外空间。 - **查找链表中的环**: - 使用...

    利用ScriptEngineManager实现字符串公式灵活计算的方法

    如果单纯地用Java的基本方法实现计算,我们就需要分析Excel中的公式,将其一一并转换成Java代码,这样对我们开发人员来说工作量有点太大了。除此之外,在转换过程中也很可能会出错。 幸运的是,Java6中添加了对脚本...

    2021-2022计算机二级等级考试试题及答案No.19897.docx

    - **解析**:Excel支持定时自动保存工作簿的功能。 - **正确答案**:正确。 ### 16. 字符串排序 **知识点**:字符串排序规则。 - **解析**:字符串排序基于ASCII码值。 - **正确答案**:C。 ### 17. 创建文件 *...

    2021-2022计算机二级等级考试试题及答案No.2112.docx

    - **解析**: 合法的浮点数表示包括科学计数法和常规形式。因此,正确答案是**B. -.6012e-4 -8e5**。 #### 24. MySQL用户权限管理 - **知识点**: MySQL中用户的创建与权限管理。 - **解析**: 在MySQL中,普通用户不...

    2021-2022计算机二级等级考试试题及答案No.10591.docx

    - **解析**:Excel 2000 支持将表格中的数据转换为图表形式,便于数据分析。 ### 7. 宏操作条件表达式 - **知识点**:宏可以包含条件表达式以控制其执行范围。 - **解析**:宏条件表达式用于限定宏操作的执行条件,...

    2021-2022计算机二级等级考试试题及答案No.12082.docx

    - **解析**:用高级语言编写的程序需要经过编译和连接过程才能转化为可执行程序。编译过程会将源代码转换成目标代码,连接过程则负责将多个目标文件组合成一个可执行文件。 ### 11. Excel 图表类型 - **知识点**:...

    2021-2022计算机二级等级考试试题及答案No.3874.docx

    ### 计算机二级等级考试知识点解析 #### 1. Access数据库表中的字段定义有效性规则 - **知识点**: 在Access数据库中,为了确保数据的有效性和一致性,可以通过定义字段的有效性规则来实现。有效性规则通常是一种...

    2021-2022计算机二级等级考试试题及答案No.16681.docx

    - **解析**: C语言中的标识符可以由字母、数字和下划线组成,但必须以字母或下划线开头。 - **答案**: 由于题目中的选项不完整,无法给出确切答案。但是根据C语言的标识符规则,`void123` 是一个有效的标识符。

    2021-2022计算机二级等级考试试题及答案No.12328.docx

    ### 计算机二级等级考试知识点解析 #### 1. C++源程序中不能表示的数制 **知识点概述:** - **数制定义:**数制是指在数学和计算机科学中使用的数值表示方法。 - **C++支持的数制:**C++支持多种数制表示数字,...

    2021-2022计算机二级等级考试试题及答案No.13706.docx

    这些题目涵盖了计算机基础知识,主要涉及了办公软件如PowerPoint和Excel的使用,编程语言Java的基本概念,数据库管理,操作系统知识,以及软件工程的一些基础概念。下面是对这些知识点的详细解释: 1. 幻灯片浏览...

    servlet增删改查改进版(增加在线人数,数据导出和导入)

    - 数据导出通常涉及到将数据库中的信息转换为可下载的格式,如CSV、Excel或PDF。在Servlet中,可以使用Apache POI库来处理Excel,Apache PDFBox处理PDF,或者使用内置的CSV格式化来创建文件,然后将其作为HTTP响应...

    2021-2022计算机二级等级考试试题及答案No.14906.docx

    5. **变量命名规则**:在Java中,变量名不能以数字开头,选项C中的"T12%"违反了这一规则。 6. **数据类型**:"TRUE/FALSE"在数据库或编程语言中通常表示“是/否”类型的布尔值,对应于选项B的"是/否"类型。 7. **...

Global site tag (gtag.js) - Google Analytics