Java读取Excel并操作

最近工作中需要根据excel批量导入用户信息,其中有一项为手机号码,在java解析中将其解析成了int类型,造成所有号码值都为 2147483647(java int类型最大值),避免重新导入,批量修改电话号码,根据excel生成update语句批量修改。

package com.zh.excel.util;

	import java.io.FileInputStream;
	import java.io.IOException;
	import java.math.BigDecimal;
	import java.util.ArrayList;
	import java.util.List;

	import org.apache.poi.xssf.usermodel.XSSFCell;
	import org.apache.poi.xssf.usermodel.XSSFRow;
	import org.apache.poi.xssf.usermodel.XSSFSheet;
	import org.apache.poi.xssf.usermodel.XSSFWorkbook;

	public class UpdateExcelUtil {
		
		public static void main(String[] args) {
			System.out.println(uploadExcel());
		}
		
		public static String uploadExcel() {
			String path="E:\\城管委人事系统\\20180226\\委机关人员汇总表_01.xlsx";
			try {
				List list = readExcel2007(path, 34);
				for (Object[] obj : list) {
					if(obj[4]!=null && obj[12]!=null && !"无".equals(obj[4]) && !"".equals(obj[4])){
						String phone=obj[4].toString();
						BigDecimal bd=new BigDecimal(phone);
						System.out.println("update pn_basis set pnbas_mobilephone='"+bd.toPlainString()+"' where PNBAS_IDCARD='"+obj[12].toString()+"';");
					}
				}
			} catch (Exception e) {
				e.printStackTrace();
			}
			return "end";
		}
		
		public static List readExcel2007(String filePath, Integer num)
				throws IOException {
			List valueList = new ArrayList();
			FileInputStream fis = null;
			try {
				fis = new FileInputStream(filePath);
				XSSFWorkbook xwb = new XSSFWorkbook(fis); // 构造 XSSFWorkbook
															// 对象,strPath 传入文件路径
				XSSFSheet sheet = xwb.getSheetAt(0); // 读取第一章表格内容
				// 定义 row、cell
				XSSFRow row;
				// 循环输出表格中的第一行内容 表头
				Object[] titles = new Object[num];
				row = sheet.getRow(0);
				if (row != null) {
					for (int j = row.getFirstCellNum(); j < num; j++) {
						// 通过 row.getCell(j).toString() 获取单元格内容,
						if (row.getCell(j) != null) {
							if (!row.getCell(j).toString().isEmpty()) {
								titles[j] = row.getCell(j).toString();
							}
						} else {
							// titles[j]="";
						}
					}
				}
				// 循环输出表格中的从第二行开始内容
				for (int i = sheet.getFirstRowNum() + 1; i <= sheet
						.getPhysicalNumberOfRows(); i++) {
					row = sheet.getRow(i);
					if (row != null) {
						boolean isValidRow = false;
						Object[] content = new Object[num];
						for (int j = row.getFirstCellNum(); j < num; j++) {
							XSSFCell cell = row.getCell(j);
							if (cell != null) {
								String cellValue = cell.toString();
								
								if (cellValue != null
										&& cellValue.trim().length() <= 0) {
									cellValue = null;
								}
								content[j] = cellValue;
								if (!isValidRow && cellValue != null
										&& cellValue.trim().length() > 0) {
									isValidRow = true;
								}
							}
						}

						// 第I行所有的列数据读取完毕,放入valuelist
						if (isValidRow) {
							valueList.add(content);
						}
					}
				}
			} catch (IOException e) {
				e.printStackTrace();
			} finally {
				fis.close();
			}

			return valueList;
		}

	}

展开阅读全文