JAVA使用POI读取EXCEL文件,处理整数读取变成浮点数或科学计数法问题

开发中经常需要读取excel文件进行数据的导入或者其他处理,本文通过POI直接对excel文件直接进行操作

首先是导入相关的jar包,如下图。最下面的3个jar包是读取excel时依赖的包

读取excel文件

	public Workbook getExcel(String path) {
		Workbook workbook = null;
		File file = new File(path);
		if (!file.exists()) {
			System.err.println("文件不存在");
		} else {
			// 获取文件后缀
			String fileType = path.substring(path.lastIndexOf("."));
			try {
				InputStream is = new FileInputStream(file);
				// 根据后缀生成workbook实例
				if (".xlsx".equals(fileType)) {
					workbook = new XSSFWorkbook(is);
				} else if (".xls".equals(fileType)) {
					workbook = new HSSFWorkbook(is);
				} else {
					System.err.println("格式有误");
				}
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		return workbook;
	}

解析对应excel的内容

try {
	
	String filePath = "test.xlsx";
	Workbook wb = io.getExcel(filePath);
	if (wb != null) {
        // 读取对应的Sheet
		Sheet sheet = wb.getSheetAt(0);
        // 获取最后一行的行数
		int rowNum = sheet.getLastRowNum();
        // 这里要用 <=
		for (int index = 1; index <= rowNum; index++) {
			Row row = sheet.getRow(index);
			int colNum = row.getLastCellNum();//获取最后一列
			String rowSql = sql;
			String valueSql = "" + id;
			for (int indexC = 0; indexC < colNum; indexC++) {
				Cell cell = row.getCell(indexC);
				
				if (cell == null) {
				} else {
             // 这里强制讲Cell设置为字符串,否则数字读取出来会变成科学计数法或浮点数 0会变成0.0
					cell.setCellType(CellType.STRING);
					rowSql = rowSql + ", " + tableCol[indexC];
					String value = cell.toString();
					if (indexC == 8) {
						value = "0.0".equals(value) ? "0" : "1";
					}
					valueSql = valueSql + ", " + "'" + cell.toString() + "'";
				}
			}
			rowSql = rowSql + ") values (" + valueSql + ");";
			System.out.println(rowSql);
			id++;
		}
		
	}
} catch (Exception e) {
	e.printStackTrace();
}

这里是用来生成入库的SQL的,所以ID手动往上自增

完整代码如下:


package fileIO;

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellType;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;


public class IOTEST {

	/**   
	 * @Title: main   
	 * @Description: TODO(描述这个方法的作用)   
	 * @param: @param args      
	 * @return: void      
	 * @throws   
	 */
	public static void main(String[] args) {
		IOTEST io = new IOTEST();
		String[] tableCol = {"VERSION", "NAME", "CATALOG1", "CATALOG2", "CATALOG3", "CATALOG4", "SORTED", "CONTENT", "IMG"};
		String sql = "insert into MANUAL_SEARCH_T(ID";
		int id = 1;
		try {
			
			String filePath = "test.xlsx";
			Workbook wb = io.getExcel(filePath);
			if (wb != null) {
				Sheet sheet = wb.getSheetAt(0);
				int rowNum = sheet.getLastRowNum();
				for (int index = 1; index <= rowNum; index++) {
					Row row = sheet.getRow(index);
					int colNum = row.getLastCellNum();
					String rowSql = sql;
					String valueSql = "" + id;
					for (int indexC = 0; indexC < colNum; indexC++) {
						Cell cell = row.getCell(indexC);
						
						if (cell == null) {
						} else {
							cell.setCellType(CellType.STRING);
							rowSql = rowSql + ", " + tableCol[indexC];
							String value = cell.toString();
							if (indexC == 8) {
								value = "0.0".equals(value) ? "0" : "1";
							}
							valueSql = valueSql + ", " + "'" + cell.toString() + "'";
						}
					}
					rowSql = rowSql + ") values (" + valueSql + ");";
					System.out.println(rowSql);
					id++;
				}
				
			}
		} catch (Exception e) {
			e.printStackTrace();
		} 
	}

	public Workbook getExcel(String path) {
		Workbook workbook = null;
		File file = new File(path);
		if (!file.exists()) {
			System.err.println("文件不存在");
		} else {
			// 获取文件后缀
			String fileType = path.substring(path.lastIndexOf("."));
			try {
				InputStream is = new FileInputStream(file);
				// 根据后缀生成workbook实例
				if (".xlsx".equals(fileType)) {
					workbook = new XSSFWorkbook(is);
				} else if (".xls".equals(fileType)) {
					workbook = new HSSFWorkbook(is);
				} else {
					System.err.println("格式有误");
				}
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		return workbook;
	}
}

处理的EXCEL如下:

最终结果:

insert into MANUAL_SEARCH_T(ID, VERSION, NAME, CATALOG1, CATALOG2, CATALOG3, SORTED, CONTENT, IMG) values (1, '广东人教版', '语文', '第一卷', '第一章', '我是1.1', '1', '我也不知道我是什么,我是1.1的东西', '0');
insert into MANUAL_SEARCH_T(ID, VERSION, NAME, CATALOG1, CATALOG2, CATALOG3, SORTED, CONTENT, IMG) values (2, '广东人教版', '语文', '第一卷', '第一章', '我是1.2', '2', '我也不知道我是什么,我是1.2的东西', '0');
insert into MANUAL_SEARCH_T(ID, VERSION, NAME, CATALOG1, CATALOG2, CATALOG3, SORTED, CONTENT, IMG) values (3, '广东人教版', '语文', '第一卷', '第一章', '我是1.3', '3', '我也不知道我是什么,我是1.3的东西', '0');
insert into MANUAL_SEARCH_T(ID, VERSION, NAME, CATALOG1, CATALOG2, CATALOG3, SORTED, CONTENT, IMG) values (4, '广东人教版', '语文', '第一卷', '第一章', '我是1.4', '4', '我也不知道我是什么,我是1.4的东西', '0');
insert into MANUAL_SEARCH_T(ID, VERSION, NAME, CATALOG1, CATALOG2, CATALOG3, SORTED, CONTENT, IMG) values (5, '广东人教版', '语文', '第一卷', '第一章', '我是1.5', '5', '我也不知道我是什么,我是1.5的东西', '0');
insert into MANUAL_SEARCH_T(ID, VERSION, NAME, CATALOG1, CATALOG2, CATALOG3, CATALOG4, SORTED, CONTENT, IMG) values (6, '广东人教版', '语文', '第一卷', '第二章', '我是2.1', '我是2.1的弟弟2.1.1', '6', '你知道这是什么吗?这是2.1.1,我有图片', '1');
insert into MANUAL_SEARCH_T(ID, VERSION, NAME, CATALOG1, CATALOG2, CATALOG3, CATALOG4, SORTED, CONTENT, IMG) values (7, '广东人教版', '语文', '第一卷', '第二章', '我是2.1', '我是2.1的弟弟2.1.2', '7', '你知道这是什么吗?这是2.1.2', '0');
insert into MANUAL_SEARCH_T(ID, VERSION, NAME, CATALOG1, CATALOG2, CATALOG3, CATALOG4, SORTED, CONTENT, IMG) values (8, '广东人教版', '语文', '第一卷', '第二章', '我是2.1', '我是2.1的弟弟2.1.3', '8', '你知道这是什么吗?这是2.1.3', '0');
insert into MANUAL_SEARCH_T(ID, VERSION, NAME, CATALOG1, CATALOG2, CATALOG3, CATALOG4, SORTED, CONTENT, IMG) values (9, '广东人教版', '语文', '第一卷', '第二章', '我是2.1', '我是2.1的弟弟2.1.4', '9', '你知道这是什么吗?这是2.1.4', '0');
insert into MANUAL_SEARCH_T(ID, VERSION, NAME, CATALOG1, CATALOG2, CATALOG3, CATALOG4, SORTED, CONTENT, IMG) values (10, '广东人教版', '语文', '第一卷', '第二章', '我是2.1', '我是2.1的弟弟2.1.5', '10', '你知道这是什么吗?这是2.1.5', '0');
insert into MANUAL_SEARCH_T(ID, VERSION, NAME, CATALOG1, CATALOG2, CATALOG3, CATALOG4, SORTED, CONTENT, IMG) values (11, '广东人教版', '语文', '第一卷', '第二章', '我是2.1', '我是2.1的弟弟2.1.6', '11', '你知道这是什么吗?这是2.1.6', '0');
insert into MANUAL_SEARCH_T(ID, VERSION, NAME, CATALOG1, CATALOG2, CATALOG3, SORTED, CONTENT, IMG) values (12, '广东人教版', '语文', '第二卷', '第一章', '我是第二卷的1.1', '12', '第二卷的1.1,不知道写啥了,我好难', '0');
insert into MANUAL_SEARCH_T(ID, VERSION, NAME, CATALOG1, CATALOG2, CATALOG3, SORTED, CONTENT, IMG) values (13, '广东人教版', '语文', '第二卷', '第一章', '我是第二卷的1.2', '13', '第二卷的1.2,不知道写啥了,我好难', '0');
insert into MANUAL_SEARCH_T(ID, VERSION, NAME, CATALOG1, CATALOG2, CATALOG3, SORTED, CONTENT, IMG) values (14, '广东人教版', '语文', '第二卷', '第一章', '我是第二卷的1.3', '14', '第二卷的1.3,不知道写啥了,我好难', '0');
insert into MANUAL_SEARCH_T(ID, VERSION, NAME, CATALOG1, CATALOG2, CATALOG3, SORTED, CONTENT, IMG) values (15, '广东人教版', '语文', '第二卷', '第一章', '我是第二卷的1.4', '15', '第二卷的1.4,不知道写啥了,我好难', '0');
insert into MANUAL_SEARCH_T(ID, VERSION, NAME, CATALOG1, CATALOG2, CATALOG3, SORTED, CONTENT, IMG) values (16, '广东人教版', '语文', '第二卷', '第一章', '我是第二卷的1.5', '16', '第二卷的1.5,不知道写啥了,我好难', '0');
insert into MANUAL_SEARCH_T(ID, VERSION, NAME, CATALOG1, CATALOG2, CATALOG3, SORTED, CONTENT, IMG) values (17, '广东人教版', '语文', '第二卷', '第一章', '我是第二卷的1.6', '17', '第二卷的1.6,不知道写啥了,我好难', '0');
insert into MANUAL_SEARCH_T(ID, VERSION, NAME, CATALOG1, CATALOG2, SORTED, CONTENT, IMG) values (18, '广东人教版', '语文', '第二卷', '第二章', '18', '这里只有第二章,我是第二卷的第二章1', '0');
insert into MANUAL_SEARCH_T(ID, VERSION, NAME, CATALOG1, CATALOG2, SORTED, CONTENT, IMG) values (19, '广东人教版', '语文', '第二卷', '第二章', '19', '这里只有第二章,我是第二卷的第二章2', '0');
insert into MANUAL_SEARCH_T(ID, VERSION, NAME, CATALOG1, CATALOG2, SORTED, CONTENT, IMG) values (20, '广东人教版', '语文', '第二卷', '第二章', '20', '这里只有第二章,我是第二卷的第二章3', '0');
insert into MANUAL_SEARCH_T(ID, VERSION, NAME, CATALOG1, CATALOG2, SORTED, CONTENT, IMG) values (21, '广东人教版', '语文', '第二卷', '第二章', '21', '这里只有第二章,我是第二卷的第二章4', '0');
insert into MANUAL_SEARCH_T(ID, VERSION, NAME, CATALOG1, CATALOG2, SORTED, CONTENT, IMG) values (22, '广东人教版', '语文', '第二卷', '第二章', '22', '这里只有第二章,我是第二卷的第二章5', '0');
insert into MANUAL_SEARCH_T(ID, VERSION, NAME, CATALOG1, CATALOG2, SORTED, CONTENT, IMG) values (23, '广东人教版', '语文', '第二卷', '第二章', '23001000', '这里只有第二章,我是第二卷的第二章6', '0');

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值