1.本文是用jsp+servlet技术实现该功能。
2.该功能的本质是使用poi对Excel进行读取和写入功能,流程为:读取Excel文件->修改数据->将修改过的Excel导入到一个新的Excel。
3.本文需要引入Apache的 poi-3.15.jar 包,官网下载地址为:http://poi.apache.org/download.html。
本实例包含3个java类及一个jsp。
首先创建一个jsp,用来上传excel,页面只有一个文件上传框,使用post方法上传,body部分代码如下,
<body>
<form action="servlet/ExcelServlet" method="post">
<input name="excelText" type="file">
<input type="submit" value="提交">
</form>
</body>
创建servlet类,代码如下:
package com.servlet;
import java.io.File;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.util.ExcelUtil;
public class ExcelServlet extends HttpServlet {
public ExcelServlet() {
super();
}
public void destroy() {
super.destroy();
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//获取文件路径
String path = request.getParameter("excelText");
//创建文件
File file = new File(path);
//调用自定义的工具类完成整个功能
ExcelUtil.readExcel(file);
}
public void init() throws ServletException {
// Put your code here
}
}
以下代码为本实例的关键代码,本实例的主要功能在以下类中实现,代码如下:
package com.util;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.UUID;
import org.apache.poi.hssf.usermodel.HSSFCell;
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.poifs.filesystem.POIFSFileSystem;
public class ExcelUtil {
public static void readExcel(File file) throws IOException {
//创建输入流
FileInputStream fis = new FileInputStream(file);
//用POIFSFileSystem来解析文件
POIFSFileSystem ts = new POIFSFileSystem(fis);
//将一个Excel读入到workbook中
HSSFWorkbook workbook = new HSSFWorkbook(ts);
//读取第一个sheet页(sheet页编号从0开始)
HSSFSheet sh = workbook.getSheetAt(0);
//改变一个单元个中的值(以下例子改变的是第5行,第3列的值)
sh.getRow(4).getCell(2).setCellValue("20");
//用UUID生成随机数,作为新excel文件的名字
String name = UUID.randomUUID().toString();
//创建一个向指定位置写入文件的输出流
FileOutputStream os = new FileOutputStream("D:\\"+name+".xls");
//向指定的文件写入excel
workbook.write(os);
//关闭流
fis.close();
os.close();
workbook.close();
}
}
第三个类是中文过滤器类,防止文件名为中文时出现乱码,代码较简单,为缩减篇幅,源码就不粘贴了。