从JSP开始,我必须创build一个XLSX文件,新创build的工作簿必须是预先保存的主工作簿的副本

我是JSP和Java-Servlet编程的新手。我有一个任务。 我必须创build一个GUI,用户可以使用该GUI创build一个具有指定名称的新工作簿,并且此工作簿必须是已存储在本地驱动器中的主工作簿的副本。新创build的工作簿将存储在专用path中。最重要的是,我的主工作簿包含多个工作表,并且每个工作表都有多个包含内容的行。所以,我希望所有这些都是在新创build的工作簿中复制的。

这是我的JSP页面。

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"pageEncoding="ISO-8859-1"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <style> body {background-color:lightgray} h1 { color:blue; font-family:verdana; font-size:300%; border:0px solid black; } p { color:red; font-family:courier; font-size:160%; } p.special { color:green; font-family:courier; font-size:100%; } table, th, td { border: 0px solid black; border-collapse: collapse; } th, td { padding: 5px; } </style> </head> <body> <h1> Welcome to the XLSX File Create GUI </h1> <center> <center> <form action="ExcelCreate" method="post"> <input type="text" name="worksheetname"> <input type="submit" value="Create a Worksheet" name="worksheetcreate" /> <br></br> </form> </center> </body> </html> 

而根据这个我的servelet是'ExcelCreate'包'com.concretepage.poi'即是

 package com.concretepage.poi; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletConfig; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.poi.ss.usermodel.Cell; 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.ss.util.WorkbookUtil; import org.apache.poi.xssf.usermodel.XSSFWorkbook; public class ExcelCreate extends HttpServlet { public ExcelCreate() { super(); // TODO Auto-generated constructor stub } public Workbook workbook,new_workbook = null; public FileInputStream fis =null; public FileOutputStream fos=null; public XSSFWorkbook master_workbook; public Row master_sheet_row=null; public Row new_workbook_row=null; public Sheet master_workbook_Sheet; public void init(ServletConfig config) throws ServletException { // TODO Auto-generated method stub } protected void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException { //for writing on JSP page, we have to create a Response object for writing PrintWriter writer=response.getWriter(); //find the requested new worksheet name String worksheetname = request.getParameter("worksheetname"); //if user input a wrong pattern Name then solve by 'safeName' variable String safeName = WorkbookUtil.createSafeSheetName(""+worksheetname); //Initialization //CreationHelper createHelper = workbook.getCreationHelper(); //creating a requested new worksheet of name newworkbook new_workbook = new XSSFWorkbook(); //Creating a String Array for storing name of sheet that extracted by master worksheet String[] new_workbook_sheet_name_array = new String[90]; //take master XLSX file from specified location fis=new FileInputStream(new File("D:\\eclipse\\WebContent\\Report\\Masterworkbook01.xlsx")); master_workbook = new XSSFWorkbook (fis); int number_Of_Sheets_in_master_workbook = master_workbook.getNumberOfSheets(); if(fis!=null) { //in following 'for' loop extracting master workbook all sheets name and store it in 'new_workbook_sheet_name' array for (int i = 0; i < number_Of_Sheets_in_master_workbook; i++) { Sheet master_workbook_Sheet = master_workbook.getSheetAt(i); Sheet new_workbook_sheet=master_workbook_Sheet; new_workbook_sheet_name_array[i]=new_workbook_sheet.getSheetName(); } //create that number of worksheet that is extracted from master workbook in new workbook and find number of rows in each Sheet for(int k=0;k < number_Of_Sheets_in_master_workbook;k++) { Sheet new_workbook_sheet_name = new_workbook.createSheet(" "+new_workbook_sheet_name_array[k]); int number_of_rows_in_master_worksheet = (master_workbook.getSheetAt(k).getLastRowNum())-(master_workbook.getSheetAt(k).getFirstRowNum()); for (int l = 0; l < number_of_rows_in_master_worksheet+1; l++) { master_sheet_row = master_workbook.getSheetAt(l).getRow(l); new_workbook_row = new_workbook_sheet_name.createRow(l); //Create a loop to fetch cell values in a row for (short m = master_sheet_row.getFirstCellNum(); m < master_sheet_row.getLastCellNum(); m++) { Cell cell = new_workbook_row.createCell(m);//creating that number of cells as it is in master workbook cell.setCellValue(master_sheet_row.getCell(m).getStringCellValue());// export values from master cell to new workbook cell } } // Write the output to created file fos = new FileOutputStream("D:\\eclipse\\Report\\"+safeName+".xlsx"); new_workbook.write(fos); fos.close(); fis.close(); System.out.println(""+safeName+" xlsx is");writer.println(""+safeName+" xlsx is"); System.out.println("created successfully");writer.println("created successfully"); } } } } 

我修改了我的'WebContent – > WEB-INF – > web.xml'的'web.xml'文件,

 <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:web="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4"> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> <servlet> <servlet-name>ExcelCreate</servlet-name> <servlet-class>com.concretepage.poi.ExcelCreate</servlet-class> </servlet> <servlet-mapping> <servlet-name>ExcelCreate</servlet-name> <url-pattern>/ExcelCreate</url-pattern> </servlet-mapping> </web-app> 

但是,当我运行我的服务器(Apache 6)后,所有这些设置显示错误在第140行中的java.lang.NullPointerException。正如我所说,我是新来的这个。 任何build议表示赞赏。感谢提前。 🙂

提前致谢:)