《Java知识应用》Java Excel读取(xlsxlsx)和写入
Posted 加速丨世界
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《Java知识应用》Java Excel读取(xlsxlsx)和写入相关的知识,希望对你有一定的参考价值。
第一步:
链接: https://pan.baidu.com/s/1emJpl7cpvKZyRMzWccAhJA 提取码: p3a7 复制这段内容后打开百度网盘手机App,操作更方便哦
下载jar包:
Excel写部分:
第二步写代码:(写入Excel)
public class UserData { public UserData(Long id, String username, String password, String phone){ this.id = id; this.password = password; this.phone = phone; this.username = username; } private Long id; private String username; private String password; private String phone; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String getPhone() { return phone; } public void setPhone(String phone) { this.phone = phone; } }
import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFCellStyle; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.HorizontalAlignment; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.util.List; public class ExcelUnitl { private static Workbook wb =null; private static Sheet sheet =null; private static Row row =null; public ExcelUnitl(){ //空参构造 } /** * 导出Excel * @param sheetName sheet名称 * @param title 标题 * @param values 内容 * @param wb HSSFWorkbook对象 * @return */ public static HSSFWorkbook getHSSFWorkbook(String sheetName, String []title, String [][]values, HSSFWorkbook wb){ // 第一步,创建一个HSSFWorkbook,对应一个Excel文件 if(wb == null){ wb = new HSSFWorkbook(); } // 第二步,在workbook中添加一个sheet,对应Excel文件中的sheet HSSFSheet sheet = wb.createSheet(sheetName); // 第三步,在sheet中添加表头第0行,注意老版本poi对Excel的行数列数有限制 HSSFRow row = sheet.createRow(0); // 第四步,创建单元格,并设置值表头 设置表头居中 HSSFCellStyle style = wb.createCellStyle(); style.setAlignment(HorizontalAlignment.CENTER); // 创建一个居中格式 //声明列对象 HSSFCell cell = null; //创建标题 for(int i=0;i<title.length;i++){ cell = row.createCell(i); cell.setCellValue(title[i]); cell.setCellStyle(style); } //创建内容 for(int i=0;i<values.length;i++){ row = sheet.createRow(i + 1); for(int j=0;j<values[i].length;j++){ //将内容按顺序赋给对应的列对象 row.createCell(j).setCellValue(values[i][j]); } } return wb; } public void export(List<UserData> list,String filePath){ //excel标题 String[] title = {"用户ID", "用户名称", "用户密码", "用户手机"}; //excel文件名 String fileName = "用户信息表" + System.currentTimeMillis() + ".xls"; //sheet名 String sheetName = "用户信息表"; String [][] content = new String[list.size()][title.length]; for (int i = 0; i < list.size(); i++) { content[i] = new String[title.length]; UserData obj = list.get(i); content[i][0] = obj.getId().toString(); content[i][1] = obj.getUsername(); content[i][2] = obj.getPassword(); content[i][3] = obj.getPhone(); } //创建HSSFWorkbook HSSFWorkbook wb = getHSSFWorkbook(sheetName, title, content, null); OutputStream os = null; try { os = new FileOutputStream(new File(filePath+fileName)); wb.write(os); os.flush(); } catch (Exception e) { e.printStackTrace(); }finally { try { if(os != null){ os.close(); } } catch (IOException e) { e.printStackTrace(); } } } }
第三步测试一下:
import java.util.ArrayList; import java.util.List; public class ExcelTest { public static void main(String[] args) { List<UserData> list = new ArrayList<>(); //数据源 list.add(new UserData(1L,"张三","123","12345678889")); list.add(new UserData(2L,"李四","456","987654321")); ExcelUnitl excelUnitl= new ExcelUnitl(); String filePath = "src\\\\demo\\\\knowledgepoints\\\\excel\\\\"; //目标文件路径 excelUnitl.export(list,filePath); } }
运行结果:
Excel读部分:
第二步:准备数据
准备两份不同格式的excel文件:
第三步:写代码
import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.DateUtil; 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; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.util.Date; import java.util.HashMap; import java.util.Map; public class ExcelUnitl { private static Workbook wb =null; private static Sheet sheet =null; private static Row row =null; /** * 构造函数初始化wb * @param filepath */ public ExcelUnitl(String filepath){ if(filepath==null){ return; } String ext = filepath.substring(filepath.lastIndexOf(".")); try { InputStream is = new FileInputStream(filepath); if(".xls".equals(ext)){ wb = new HSSFWorkbook(is); }else if(".xlsx".equals(ext)){ wb = new XSSFWorkbook(is); } } catch (IOException e) { e.printStackTrace(); } } /** * 读取Excel表格表头的内容 * @return String 表头内容的数组 * @author zengwendong */ public String[] readExcelTitle() { if(wb==null){ throw new RuntimeException("Excel对象为空"); } sheet = wb.getSheetAt(0); row = sheet.getRow(0); // 标题总列数 int colNum = row.getPhysicalNumberOfCells(); System.out.println("colNum:" + colNum); String[] title = new String[colNum]; for (int i = 0; i < colNum; i++) { title[i] = row.getCell(i).getCellFormula(); } return title; } /** * 读取Excel数据内容 * @return Map 包含单元格数据内容的Map对象 * @author zengwendong */ public Map<Integer, Map<Integer,Object>> readExcelContent() { if(wb==null){ throw new RuntimeException("Workbook对象为空!"); } Map<Integer, Map<Integer,Object>> content = new HashMap<>(); sheet = wb.getSheetAt(0); // 得到总行数 int rowNum = sheet.getLastRowNum(); row = sheet.getRow(0); int colNum = row.getPhysicalNumberOfCells(); // 正文内容应该从第二行开始,第一行为表头的标题 for (int i = 1; i <= rowNum; i++) { row = sheet.getRow(i); int j = 0; Map<Integer,Object> cellValue = new HashMap<>(); while (j < colNum) { Object obj = getCellFormatValue(row.getCell(j)); cellValue.put(j, obj); j++; } content.put(i, cellValue); } return content; } /** * 根据Cell类型设置数据 * @param cell * @return * @author zengwendong */ private Object getCellFormatValue(Cell cell) { Object cellvalue = ""; if (cell != null) { // 判断当前Cell的Type switch (cell.getCellType()) { case NUMERIC:{ // 判断当前的cell是否为Date if (DateUtil.isCellDateFormatted(cell)) { Date date = cell.getDateCellValue(); cellvalue = date; } else {// 如果是纯数字 cellvalue = String.valueOf(cell.getNumericCellValue()); } break; } case STRING:// 如果当前Cell的Type为STRING cellvalue = cell.getRichStringCellValue().getString(); break; default:// 默认的Cell值 cellvalue = ""; } } else { cellvalue = ""; } return cellvalue; } }
测试一下:
import java.util.Map; public class ExcelTest { public static void main(String[] args) { String filepath = "src\\\\demo\\\\knowledgepoints\\\\file\\\\test.xlsx"; ExcelUnitl excelUnitl= new ExcelUnitl(filepath); Map<Integer, Map<Integer,Object>> map = excelUnitl.readExcelContent(); for (int i = 1; i <= map.size(); i++) { System.out.println(map.get(i)); } } }
运行结果:
换个格式也测试一下:
import java.util.Map; public class ExcelTest { public static void main(String[] args) { String filepath = "src\\\\demo\\\\knowledgepoints\\\\file\\\\test.xls"; ExcelUnitl excelUnitl= new ExcelUnitl(filepath); Map<Integer, Map<Integer,Object>> map = excelUnitl.readExcelContent(); for (int i = 1; i <= map.size(); i++) { System.out.println(map.get(i)); } } }
运行结果:
参考:https://www.cnblogs.com/hhhshct/p/7255915.html ,https://www.cnblogs.com/jike1219/p/11182303.html
以上是关于《Java知识应用》Java Excel读取(xlsxlsx)和写入的主要内容,如果未能解决你的问题,请参考以下文章
java操作office和pdf文件java读取word,excel和pdf文档内容