ava.lang.NoClassDefFoundError: org/apache/poi/hssf/usermodel/HSSFWorkbook

Java.lang.NoClassDefFoundError: org/apache/poi/hssf/usermodel/HSSFWorkbook异常的解决方法


将poi-3.6.jar拷贝到对应tomcat发布后\WEB-INF\lib路径下面,问题解决!


maven工程出现以上异常原因是下列内容porn.xml中没有配置

<dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>3.7</version>
</dependency>

为什么下面的代码Workbook workbook = new XSSFWorkbook(); 无法运行package my.bcb.servlet; import com.bcb.dao.BusinessCardDAO; import com.bcb.dao.CardFolderDAO; import com.bcb.model.BusinessCard; import com.bcb.model.CardFolder; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import javax.servlet.ServletException; import javax.servlet.annotation.MultipartConfig; import javax.servlet.annotation.WebServlet; import javax.servlet.http.*; import java.io.IOException; import java.io.OutputStream; import java.io.PrintWriter; import java.util.List; import java.io.*; import java.util.*; import javax.servlet.*; import javax.servlet.http.*; import org.apache.poi.ss.usermodel.*; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; public class ExportCardServlet extends HttpServlet { private BusinessCardDAO businessCardDAO = new BusinessCardDAO(); private CardFolderDAO cardFolderDAO = new CardFolderDAO(); @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.setStatus(HttpServletResponse.SC_METHOD_NOT_ALLOWED); resp.getWriter().write("GET method not allowed. Please use POST."); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { req.setCharacterEncoding("UTF-8"); ObjectMapper objectMapper = new ObjectMapper(); JsonNode requestBody = objectMapper.readTree(req.getInputStream()); String cardIdsStr = requestBody.path("cardIds").asText(); String filename = requestBody.path("filename").asText(); String fileType = requestBody.path("fileType").asText(); if (cardIdsStr.isEmpty()) { resp.setContentType("application/json;charset=UTF-8"); PrintWriter out = resp.getWriter(); out.print("{\"success\":false,\"message\":\"卡片ID不能为空\"}"); return; } if (fileType.isEmpty()) { fileType = "xlsx"; // 默认文件类型 } if (filename.isEmpty()) { filename = "exported_cards"; // 默认文件名 } List<BusinessCard> cards = new ArrayList<>(); String[] cardIdArray = cardIdsStr.split(","); for (String cardId : cardIdArray) { int cardIdInt = Integer.parseInt(cardId); BusinessCard card = businessCardDAO.findById(cardIdInt); if (card != null) { cards.add(card); System.out.println("Added card: " + card); // 调试信息 } else { System.out.println("Card not found for ID: " + cardIdInt); // 调试信息 } } String contentType; if (fileType.equalsIgnoreCase("xlsx")) { contentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"; filename += ".xlsx"; } else if (fileType.equalsIgnoreCase("xls")) { contentType = "application/vnd.ms-excel"; filename += ".xls"; } else if (fileType.equalsIgnoreCase("csv")) { contentType = "text/csv"; filename += ".csv"; } else { resp.setContentType("application/json;charset=UTF-8"); PrintWriter out = resp.getWriter(); out.print("{\"success\":false,\"message\":\"不支持的文件类型\"}"); return; } resp.setContentType(contentType); resp.setHeader("Content-Disposition", "attachment; filename=\"" + filename + "\""); try (OutputStream out = resp.getOutputStream()) { exportCards(cards, out, fileType); } catch (Exception e) { e.printStackTrace(); // 打印完整的堆栈信息 resp.setContentType("application/json;charset=UTF-8"); PrintWriter out = resp.getWriter(); out.print("{\"success\":false,\"message\":\"导出失败: " + e.getMessage() + "\"}"); } } private void exportCards(List<BusinessCard> cards, OutputStream out, String fileType) throws IOException { System.out.println("fileType: " + fileType); if (fileType.equalsIgnoreCase("xlsx") || fileType.equalsIgnoreCase("xls")) { System.out.println("使用XSSFWorkbook导出 "); // 调试信息 Workbook workbook = new XSSFWorkbook(); // Using XSSFWorkbook for both formats System.out.println("使用XSSFWorkbook导出 "); // 调试信息 createWorkbook(workbook, cards); workbook.write(out); workbook.close(); } else if (fileType.equalsIgnoreCase("csv")) { StringBuilder csv = new StringBuilder(); System.out.println("用csv类型导出 "); // 调试信息 // 添加标题行 csv.append("姓名,机构名称,职务,性别,电话,邮箱,机构地址\n"); // 添加数据行 for (BusinessCard card : cards) { csv.append(escapeCsvField(card.getName())).append(","); csv.append(escapeCsvField(card.getOrganization())).append(","); csv.append(escapeCsvField(card.getTitle())).append(","); csv.append(escapeCsvField(card.getGender())).append(","); csv.append(escapeCsvField(card.getPhone())).append(","); csv.append(escapeCsvField(card.getEmail())).append(","); csv.append(escapeCsvField(card.getAddress())).append("\n"); } out.write(csv.toString().getBytes("UTF-8")); } else { throw new IllegalArgumentException("不支持的文件类型: " + fileType); } } private void createWorkbook(Workbook workbook, List<BusinessCard> cards) { Sheet sheet = workbook.createSheet("名片数据"); Row headerRow = sheet.createRow(0); headerRow.createCell(0).setCellValue("姓名"); headerRow.createCell(1).setCellValue("机构名称"); headerRow.createCell(2).setCellValue("职务"); headerRow.createCell(3).setCellValue("性别"); headerRow.createCell(4).setCellValue("电话"); headerRow.createCell(5).setCellValue("邮箱"); headerRow.createCell(6).setCellValue("机构地址"); int rowNum = 1; for (BusinessCard card : cards) { Row row = sheet.createRow(rowNum++); row.createCell(0).setCellValue(card.getName() != null ? card.getName() : ""); row.createCell(1).setCellValue(card.getOrganization() != null ? card.getOrganization() : ""); row.createCell(2).setCellValue(card.getTitle() != null ? card.getTitle() : ""); row.createCell(3).setCellValue(card.getGender() != null ? card.getGender() : ""); row.createCell(4).setCellValue(card.getPhone() != null ? card.getPhone() : ""); row.createCell(5).setCellValue(card.getEmail() != null ? card.getEmail() : ""); row.createCell(6).setCellValue(card.getAddress() != null ? card.getAddress() : ""); } for (int i = 0; i < 7; i++) { sheet.autoSizeColumn(i); } } private String escapeCsvField(String field) { if (field == null) { return ""; } if (field.contains(",") || field.contains("\"") || field.contains("\n")) { field = field.replace("\"", "\"\""); return "\"" + field + "\""; } return field; } }
最新发布
05-29
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值