SSM上传EXCLE到数据库 和 从数据库导出为EXCLE

SSM上传EXCLE到数据库 和 从数据库导出为EXCLE

package com.ABC.controller;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.DecimalFormat;
import java.util.List;

import javax.imageio.stream.FileImageInputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.poi.hssf.usermodel.HSSFCell;
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.usermodel.WorkbookFactory;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.multipart.MultipartFile;

import com.ABC.pojo.NewStudent;
import com.ABC.service.NewStudentInfoService;

@Controller
public class FileUploadController {

	@Autowired
	private NewStudentInfoService newStudentInfoService;

	@RequestMapping("/importexcel")
	public String upLoadExcle(MultipartFile file, HttpServletRequest request, Model model) throws Exception {

		System.out.println("你来上传了啊!===>");

		// 获取服务器端路径

		String path = request.getServletContext().getRealPath("upload");

		System.out.println("获取服务器端路径path==>" + path);

		// 获取到上传文件名称
		String fileName = file.getOriginalFilename();

		System.out.println("获取到上传文件名称fileName==>" + fileName);

		// 创建目标File
		File targetFile = new File(path + "\\" + fileName);
		System.out.println("创建目标targetFile==>" + targetFile);

		// 创建存储目录
		File targePath = new File(path);

		System.out.println("创建存储目录targePath==>" + targePath);

		// 判断服务器端目录是否存在,如果不存在创建
		if (!targePath.exists()) {
			targePath.mkdir();
		}
		// 把上传的文件存储到服务器端

		file.transferTo(targetFile);

		// 读取上传到服务器端的文件,遍历excle
		Workbook workbook = WorkbookFactory.create(targetFile);

		Sheet sheet = workbook.getSheet("Sheet1");
		// 判断行数
		int rownum = sheet.getPhysicalNumberOfRows();
		for (int i = 0; i < rownum; i++) {
			Row row = sheet.getRow(i);
			// 判断单元格数量
			int cellnum = row.getPhysicalNumberOfCells();
			StringBuffer buf = new StringBuffer();
			for (int j = 0; j < cellnum; j++) {
				Cell cell = row.getCell(j);
				if (cell.getCellType() == HSSFCell.CELL_TYPE_STRING) {
					buf.append(cell.getStringCellValue() + "~");
				} else if (cell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC) {
					// 创建数字格式化工具类
					DecimalFormat df = new DecimalFormat("####");
					// 把从cell单元格读取到的数字,进行格式化防止科学计数法形式显示
					buf.append(df.format(cell.getNumericCellValue()) + "~");
				}
			}

			// 单元格循环完成后读取到的是一行内容
			String hang = buf.toString();
			String[] rows = hang.split("~");
			NewStudent stu = new NewStudent();
			stu.setName(rows[1]);
			stu.setScore(Integer.valueOf(rows[2]));
			stu.setPhone(rows[3]);
			// System.out.println("上传学生信息:"+stu);
			newStudentInfoService.saveStudent(stu);
		}

		return "success";

	}

	@RequestMapping(value = "downloadexcel")
	public void downLoadExcel(HttpServletRequest request, HttpServletResponse response, Model model)
			throws Exception, IOException {

		// 查出所有的学生
		List<NewStudent> stuList = newStudentInfoService.getAll();

		// 获取服务端路径
		String path = request.getServletContext().getRealPath("down");
		String fileName = "testexcel.xlsx";
		// 创建存储File
		File targetFile = new File(path + "\\" + fileName);

		// 创建存储目录
		File targetPath = new File(path);

		// 判断服务器端目录是否存在,如果不存在创建目录
		if (!targetPath.exists()) {
			targetPath.mkdir();
		}

		// 生成excle
		XSSFWorkbook workbook = new XSSFWorkbook();
		XSSFSheet sheet = workbook.createSheet("学生成绩表");
		int rowNum = 0;
		for (NewStudent stu : stuList) {
			XSSFRow row = sheet.createRow(rowNum);
			row.createCell(0).setCellValue(stu.getId());
			row.createCell(1).setCellValue(stu.getName());
			row.createCell(2).setCellValue(stu.getScore());
			row.createCell(3).setCellValue(stu.getPhone());
			rowNum++;
		}
		// 把工作薄对象写入服务器磁盘
		System.out.println("创建文件:" + targetFile);
		workbook.write(new FileOutputStream(targetFile));

		// 设置响应头
		response.setContentType("application/x-xls;charset=GBK");
		// 设定浏览器下载提示
		response.setHeader("Content-Disposition",
				"attachment;filename=\"" + new String(fileName.getBytes(), "ISO8859-1") + "\"");
		//设置响应的文件的长度
		response.setContentLength((int) targetFile.length());
		//向响应文件流缓冲区写入文件
		byte[] buff =new byte[4096];
		
		BufferedOutputStream output = null;
		BufferedInputStream input = null;
		
		output = new BufferedOutputStream(response.getOutputStream());
		input = new BufferedInputStream(new FileInputStream(targetFile));
		
		//遍历文件
		int len = 0;
		
		while((len = input.read(buff))!=-1){
			output.write(buff, 0, len);
		}output.flush();
		response.flushBuffer();
		
		if(input!=null){
			input.close();
		}if(output!=null){
			output.close();
		}
		
		
	}

}

  

猜你喜欢

转载自www.cnblogs.com/charlypage/p/8999307.html
今日推荐