Maven座標
<!-- EasyPOI -->
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-base</artifactId>
<version>3.2.0</version>
</dependency>
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-web</artifactId>
<version>3.2.0</version>
</dependency>
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-annotation</artifactId>
<version>3.2.0</version>
</dependency>
<!-- slf4j -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
</dependency>
Controller
import com.tsingsoft.modules.report.service.ExportTestService;
import lombok.AllArgsConstructor;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletResponse;
@RestController
@AllArgsConstructor
@RequestMapping("/export")
public class ExportController {
private ExportTestService exportTestService;
@PostMapping("/by-response")
public void exportByResponse(HttpServletResponse response) {
try {
exportTestService.exportByResponse(response);
} catch (Exception e) {
e.printStackTrace();
}
}
@PostMapping("/by-byte")
public ResponseEntity exportByByte() {
return exportTestService.exportByByte();
}
}
Service
import org.springframework.http.ResponseEntity;
import javax.servlet.http.HttpServletResponse;
public interface ExportService {
void exportByResponse(HttpServletResponse response);
ResponseEntity exportByByte();
}
ServiceImpl
import cn.afterturn.easypoi.excel.ExcelExportUtil;
import lombok.AllArgsConstructor;
import org.apache.poi.ss.usermodel.Workbook;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.net.URLEncoder;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Service
@AllArgsConstructor
public class ExportServiceImpl implements ExportService {
PowerGeneratePlantRegisterMapper powerGeneratePlantRegisterMapper;
@Override
public void exportByResponse(HttpServletResponse response) {
Path templateFilePath = Paths.get("D://test//template.xlsx");
if (!templateFilePath.getParent().toFile().exists()) {
try {
Files.createDirectories(templateFilePath.getParent());
} catch (IOException e) {
throw new RuntimeException(String.format("創建%s路徑失敗。", templateFilePath.getParent()));
}
}
Map<String, Object> map = new HashMap<>();
List<User> list = userMapper.queryAll();
map.put("entityList", list);
TemplateExportParams params = new TemplateExportParams(templateFilePath.toString());
Workbook workbook = ExcelExportUtil.exportExcel(params, map);
try {
ServletOutputStream out = response.getOutputStream();
workbook.write(out);
} catch (IOException e) {
throw new RuntimeException("臨時文件寫入失敗");
}
}
@Override
public ResponseEntity exportByByte() {
Path templateFilePath = Paths.get("D://test//template.xlsx");
if (!templateFilePath.getParent().toFile().exists()) {
try {
Files.createDirectories(templateFilePath.getParent());
} catch (IOException e) {
throw new RuntimeException(String.format("創建%s路徑失敗。", templateFilePath.getParent()));
}
}
Map<String, Object> map = new HashMap<>();
List<User> list = userMapper.queryAll();
map.put("entityList", list);
TemplateExportParams params = new TemplateExportParams(templateFilePath.toString());
Workbook workbook = ExcelExportUtil.exportExcel(params, map);
ByteArrayOutputStream out = new ByteArrayOutputStream();
try {
workbook.write(out);
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
headers.setContentDispositionFormData("attachment", URLEncoder.encode("導出文件.xlsx", "utf-8"));
return new ResponseEntity<>(out.toByteArray(), headers, HttpStatus.CREATED);
} catch (IOException e) {
throw new RuntimeException("臨時文件寫入失敗");
}
}
}
js
function exportExcel() {
var url = _ctx + "/export";
var xhr = new XMLHttpRequest();
var str = "id=" + row.id;
xhr.open('POST', url, true);
xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
xhr.responseType = "blob";
xhr.onload = function () {
if (this.status === 200) {
var blob = this.response;
if(blob.size>0){
var reader = new FileReader();
reader.readAsDataURL(blob);
reader.onload = function (e) {
var a = document.createElement('a');
a.download = row.id + '用戶數據.xls';
a.href = e.target.result;
$("body").append(a);
a.click();
$(a).remove();
}
}else{
window.location.reload();
}
}
};
xhr.send(str);
}