import dao.QuZhengDao;
import org.apache.commons.compress.utils.IOUtils;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadException;
import org.apache.commons.fileupload.disk.DiskFileItemFactory;
import org.apache.commons.fileupload.servlet.ServletFileUpload;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.util.List;
@WebServlet("/CaoZuoServlet")
public class CaoZuoServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("application/vnd.ms-excel");
DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
// QuZhengDao qd = new QuZhengDao();
try {
List<FileItem> fileItems = upload.parseRequest(request);
for (FileItem fileItem : fileItems)
if (!fileItem.isFormField()) {
String name = fileItem.getName();
// 对文件名进行去重
String name1 = System.currentTimeMillis() + name;
InputStream is = fileItem.getInputStream();
//创建工作簿
XSSFWorkbook workbook = new XSSFWorkbook(is);
//根据索引获取第一个sheet
XSSFSheet sheet = workbook.getSheetAt(0);
// 获取最后一行
int lastrow = sheet.getLastRowNum();
// 从第七行一直向下读直到末尾
for (short i = 7; i <= lastrow; i++) {
// 根据下标获取行数据
XSSFRow row = sheet.getRow(i);
for (short i1=7;i1<=8;i1++){
// 根据行数据获取第8和第9列的数据
XSSFCell cell = row.getCell(i1);
double number = cell.getNumericCellValue();
// 这是自定义对取出的数据进行操作的工具类
double num = QuZhengDao.getNum(number);
cell.setCellValue(num);
}
}
FileOutputStream fos = new FileOutputStream(new File("E:\\ceshi", name1));
// 通过IOUtils工具类执行拷贝操作
IOUtils.copy(is, fos);
workbook.write(fos);
fos.close();
FileInputStream fis = new FileInputStream(new File("E:\\ceshi", name1));
response.setHeader("content-disposition","attachment;filename="+name1);
ServletOutputStream os = response.getOutputStream();
int len;
byte[] b = new byte[2048];
while ((len=fis.read(b))!=-1){
os.write(b,0,len);
}
os.close();
}
} catch (FileUploadException e) {
e.printStackTrace();
}
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request, response);
}
}
因为需要备份文件,所以将文件保存后重新加载返回浏览器
这里有一个问题:
很容易在操作数据后忘记向输出流中写入数据,倒是文件虽然创建了,但是表中并没有数据,
必须加上一下代码:
workbook.write(fos);