pom
<!-- https://mvnrepository.com/artifact/org.apache.poi/poi -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.17</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.17</version>
</dependency>
一、excel下載
1.前臺向後臺發送數據。
因爲ajax無法實現下載,所以的用的是from表單提交
//將from表單寫在方法中
$(".daochu").click(function(){
var data=getQueryUtility();
//方式1
{
//向後臺傳送的數據
var form= $("<form action='提交路徑"+"' method='post'></form>")
form.append("<input type='hidden' name='date1' value='"+data.date1+"'>");
form.append("<input type='hidden' name='date2' value='"+data.date2+"'>");
form.append("<input type='hidden' name='selectModel' value='"+data.selectModel+"'>");
form.append("<input type='hidden' name='number' value='"+data.number+"'>");
$(document.body).append(form);
form.submit();
}
//方式2
{
window.location.href='[[@{/portal/WhiteListsController/download/}]]';//用這種方式也可以
}
});
2.後臺
a.後臺接受數據
/**
*
*queryUtility 接受數據自動封裝爲一個對象
* @return 是否下載成功
*/
@RequestMapping(value="/downNetSafety", method = {RequestMethod.POST})
public String downNetSafety( QueryUtility queryUtility, HttpServletRequest request, HttpServletResponse response){
//數據庫獲取的數據
List<Map<String,String>> listsMap=getNetSafetyData(queryUtility);
String sheetName[]={};//表頭
String excelname=;//excel表單名
String [] keys=[];keys,通過key獲得value
String [] headerName=[];表頭
//獲取excel表格
HSSFWorkbook workbook=SetNetSafetyExcel(keys,headerName,listsMap,excelname);
//excel表單
String fileName=excelname+".xls";
//將數據下載
downExcel(fileName,workbook,request,response);
return null;
}
b.寫成一個excel文檔
/**
*
* @param keys 獲取數據key
* @param headerName 表頭
* @param listsMap 數據
* @param sheetname sheet名
* @return 返回excel文件
*/
private HSSFWorkbook SetNetSafetyExcel( String [] keys, String [] headerName, List<Map<String,String>> listsMap,String sheetname){
HSSFWorkbook workbook = new HSSFWorkbook();
//設置excel表格
HSSFSheet sheet = workbook.createSheet(sheetname);
HSSFRow row = sheet.createRow(0);
for(int i=0;i<keys.length;i++){
sheet.setColumnWidth(i, 20*256);
}
HSSFCellStyle style = workbook.createCellStyle();
HSSFFont font = workbook.createFont();
font.setBold(true);
style.setFont(font);
//設置excel第一行表頭
HSSFCell cell;
for(int i=0;i<headerName.length;i++){
cell = row.createCell(i);
cell.setCellValue(headerName[i]);
cell.setCellStyle(style);
}
//將數據寫入excel
for(int i=0,k=listsMap.size();i<k;i++){
HSSFRow row1 = sheet.createRow(i+1);
Map<String,String> map=listsMap.get(i);
for(int j=0,g1=keys.length;j<g1;j++){
HSSFCell cell1=row1.createCell(j);
cell1.setCellValue(map.get(keys[j]));
}
}
return workbook;
}
c.,下載
/**
*
* @param fileName 文件名
* @param workbook 文件
* @param request
* @param response
*/
private void downExcel( String fileName,HSSFWorkbook workbook,HttpServletRequest request, HttpServletResponse response){
try {
response.reset();
//設置response的Header
response.addHeader("Content-Disposition", "attachment;filename=" +
java.net.URLEncoder.encode(fileName, "UTF-8"));
OutputStream os = new BufferedOutputStream(response.getOutputStream());
response.setContentType("application/vnd.ms-excel;charset=gb2312");
//將excel寫入到輸出流中
workbook.write(os);
os.flush();
os.close();
}catch (Exception e){
System.out.println(e);
}
}
二、excel上傳
1.前臺
//前臺上傳
function updataWhiteList(){
//上傳的文件
var formData = new FormData();
formData.append("file",$("#file").prop("files")[0]);
$.ajax({
type: "POST",
url: "",
data: formData,
async: false,
cache: false,
contentType: false,
processData: false,
success: function (data) {
}, error: function (data) {
alert("請求失敗");
}
})
}
2.後臺
a.後臺接受
/**
* file爲輸入文件
*/
@RequestMapping("/updataWhiteList")
@ResponseBody
public String updata(@RequestParam(value = "file") MultipartFile excelFile, HttpServletRequest req, HttpServletResponse resp) {
String result="";
try {
//判斷是不是excel文件
result= isExcelFile(excelFile);
//獲取excel文件
Workbook woek=getWorkBook(excelFile);
//讀取數據並存入數據庫
result=CheckExcel(woek);
} catch (Exception e){
System.out.println(e);
}
return result;
}
b.判斷是不是excel文件
/**
* 檢查是不是爲excel文件
* @param excelFile
* @throws IOException
*/
private String isExcelFile(MultipartFile excelFile) throws IOException{
if(null == excelFile){
return "文件不存在";
}
String fileName = excelFile.getOriginalFilename();
if(!fileName.endsWith("xls") && !fileName.endsWith("xlsx")){
return "不是excel文件";
}
return "格式正確";
}
c.獲取excel文件
/**
*
* 獲取不同版本的excel
* @param formFile
* @return
*/
private Workbook getWorkBook(MultipartFile formFile){
String fileName = formFile.getOriginalFilename();
Workbook workbook = null;
try {
//獲得excel文件的io流
InputStream is = formFile.getInputStream();
//根據文件後綴名不同(xls和xlsx)獲得不同的workbook實現類對象
if(fileName.endsWith("xls")){
//2003
workbook = new HSSFWorkbook(is);
}else if(fileName.endsWith("xlsx")){
//2007
workbook = new XSSFWorkbook(is);
}else {
}
} catch (IOException e) {
}
return workbook;
}
d.將表格種每一格獲取的數據轉爲字符串
//將表格中數據轉換爲字符串
private String getValue(Cell cell) {
if (cell == null || "".equals(cell.toString())) {
return "";
}
String value = "";
switch (cell.getCellTypeEnum()) {
case BOOLEAN:
value = String.valueOf(cell.getBooleanCellValue());
break;
case ERROR:
value = String.valueOf(cell.getErrorCellValue());
break;
case NUMERIC:
value = (new DecimalFormat("0")).format(cell.getNumericCellValue());
break;
case STRING:
value = cell.getStringCellValue();
break;
default:
break;
}
return value;
}
e.將數據讀取出來存入數據庫
/*
*
* 檢查上傳白名單是否符合要求
*
* */
private String CheckExcel(Workbook workbook){
Sheet sheet=workbook.getSheetAt(0);
//獲取sheet行數
int num=sheet.getPhysicalNumberOfRows();
List<WhiteList> lists= new ArrayList<>();
//第一行爲表頭,直接從第二行開始獲取
for(int i=1;i<num;i++){
//獲取的數據
WhiteList list= new WhiteList();
Cell cell=row.getCell(0);
String decive_number=getValue(cell);
list.setDevice_number(decive_number);
lists.add(list);
}
int size=lists.size();
int page;
if(size>500){
page=size/500;
int index=0;
do {
//存入數據庫,一次存入500條
whiteListService.insertList(lists.subList(0,500));
//清除500數據
lists.subList(0,500).clear();
index++;
}while (index<page);
}
if(lists.size()>0) {
whiteListService.insertList(lists);
}
return "上傳成功," +
"成功上傳了"+size+"條";
}