1. Exception java.lang.NoClassDefFoundError: org/apache/poi/UnsupportedFileFormatException
Penyelesaian: Versi pakej balang berkaitan yang digunakan untuk poi mestilah sama! ! ! ! !
2. Pakej balang yang digunakan oleh maven Jika maven tidak digunakan, gunakan poi-3.9.jar dan poi-ooxml-3.9.jar (ini digunakan terutamanya untuk Excel2007 dan versi yang lebih baru). Pakej balang akan melakukan ()
<dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.9</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>3.9</version> </dependency>
3 Java import Excel
Muat naik Excel dahulu
//上传Excel @RequestMapping("/uploadExcel") public boolean uploadExcel(@RequestParam MultipartFile file,HttpServletRequest request) throws IOException { if(!file.isEmpty()){ String filePath = file.getOriginalFilename(); //windows String savePath = request.getSession().getServletContext().getRealPath(filePath); //linux //String savePath = "/home/odcuser/webapps/file"; File targetFile = new File(savePath); if(!targetFile.exists()){ targetFile.mkdirs(); } file.transferTo(targetFile); return true; } return false; }
dan kemudian membaca kandungan dalam Excel
public static void readExcel() throws Exception{ InputStream is = new FileInputStream(new File(fileName)); Workbook hssfWorkbook = null; if (fileName.endsWith("xlsx")){ hssfWorkbook = new XSSFWorkbook(is);//Excel 2007 }else if (fileName.endsWith("xls")){ hssfWorkbook = new HSSFWorkbook(is);//Excel 2003 } // HSSFWorkbook hssfWorkbook = new HSSFWorkbook(is); // XSSFWorkbook hssfWorkbook = new XSSFWorkbook(is); User student = null; List<User> list = new ArrayList<User>(); // 循环工作表Sheet for (int numSheet = 0; numSheet <hssfWorkbook.getNumberOfSheets(); numSheet++) { //HSSFSheet hssfSheet = hssfWorkbook.getSheetAt(numSheet); Sheet hssfSheet = hssfWorkbook.getSheetAt(numSheet); if (hssfSheet == null) { continue; } // 循环行Row for (int rowNum = 1; rowNum <= hssfSheet.getLastRowNum(); rowNum++) { //HSSFRow hssfRow = hssfSheet.getRow(rowNum); Row hssfRow = hssfSheet.getRow(rowNum); if (hssfRow != null) { student = new User(); //HSSFCell name = hssfRow.getCell(0); //HSSFCell pwd = hssfRow.getCell(1); Cell name = hssfRow.getCell(0); Cell pwd = hssfRow.getCell(1); //这里是自己的逻辑 student.setUserName(name.toString()); student.setPassword(pwd.toString()); list.add(student); } } } }
4. . Eksport Excel
//创建Excel @RequestMapping("/createExcel") public String createExcel(HttpServletResponse response) throws IOException { //创建HSSFWorkbook对象(excel的文档对象) HSSFWorkbook wb = new HSSFWorkbook(); //建立新的sheet对象(excel的表单) HSSFSheet sheet=wb.createSheet("成绩表"); //在sheet里创建第一行,参数为行索引(excel的行),可以是0~65535之间的任何一个 HSSFRow row1=sheet.createRow(0); //创建单元格(excel的单元格,参数为列索引,可以是0~255之间的任何一个 HSSFCell cell=row1.createCell(0); //设置单元格内容 cell.setCellValue("学员考试成绩一览表"); //合并单元格CellRangeAddress构造参数依次表示起始行,截至行,起始列, 截至列 sheet.addMergedRegion(new CellRangeAddress(0,0,0,3)); //在sheet里创建第二行 HSSFRow row2=sheet.createRow(1); //创建单元格并设置单元格内容 row2.createCell(0).setCellValue("姓名"); row2.createCell(1).setCellValue("班级"); row2.createCell(2).setCellValue("笔试成绩"); row2.createCell(3).setCellValue("机试成绩"); //在sheet里创建第三行 HSSFRow row3=sheet.createRow(2); row3.createCell(0).setCellValue("李明"); row3.createCell(1).setCellValue("As178"); row3.createCell(2).setCellValue(87); row3.createCell(3).setCellValue(78); //.....省略部分代码 //输出Excel文件 OutputStream output=response.getOutputStream(); response.reset(); response.setHeader("Content-disposition", "attachment; filename=details.xls"); response.setContentType("application/msexcel"); wb.write(output); output.close(); return null; }
Penjelasan tambahan tentang masalah kod bercelaru
1. Nama fail bercelaru (saya dapati bahawa selagi nama fail bercelaru diselesaikan, aksara bercelaru lain juga akan diselesaikan) .setHeader("Content-disposition", "attachment; filename = Chinese. ("Content-disposition", "attachment; filename="+toUtf8String("Chinese.xls"));
Apabila saya menyemak dalam talian , ia berkata
Apa yang saya ingin katakan hari ini ialah Apabila membuat lembaran kerja, menggunakan bahasa Cina sebagai nama fail dan nama lembaran kerja akan menyebabkan aksara bercelaru Pertama, mari kita gunakan bahasa Cina sebagai nama lembaran kerja lembaran kerja secara amnya adalah seperti berikut:
Buku kerja HSSFWorkbook = new HSSFWorkbook( ; sheetName ialah aksara Cina, jadi aksara bercelaru akan muncul. Penyelesaiannya adalah seperti berikut:
HSSFSheet sheet= workbook.createSheet() ;
buku kerja.setSheetName(0, sheetName,(short)1) ; //Di sini (pendek) 1 ialah kunci untuk menyelesaikan aksara Cina yang kacau dan parameter pertama ialah nombor indeks lembaran kerja.
Tetapi saya mendapati bahawa tiada kaedah sedemikian sama sekali saya hanya perlu menukar aksara yang bercelaru dalam nama fail, dan aksara yang bercelaru yang lain akan diselesaikan secara semula jadi! ! !
Atas ialah kandungan terperinci Apakah kaedah pengendalian asas Java WorkBook pada Excel?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!