Spring Boot+AngularJS匯出excel
這次在專案開發中,需要實現考題匯出,由於本專案是使用Spring Boot+AngularJs的開發模式,原來那種表單式的請求方式不是很便捷,以下是基於AngularJs非同步請求的程式碼。
首先是JS程式碼
function exportExam() {
$http({
url: url + "export",
responseType: 'arraybuffer'
}).success(function (res) {
var blob = new Blob([res], {type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;"});
//var blob = new Blob([res], {type: "application/octet-stream"}); 這種型別的轉換同樣可行
saveAs(blob, "考題資訊.xlsx");
});
}
這裡需要注意三點:1、要在http的請求中將responseType設定為‘arraybuffer’型別,因為後臺會將生成的excel轉換成Byte陣列並傳送到前臺
2、經過博主測試,Blob的型別為以上兩種都可以
3、為了更好的相容瀏覽器,我們在這裡使用了saveAs方法,這個方法是file-saver這個外掛提供的
後臺程式碼
public byte[] export(Integer[] idlist, int[] isoutput,
String[] title) throws IOException {
Map model = new HashMap();
model.put("excelName", "考題資訊.xlsx");
model.put("sheetName", "sheet1");
model.put("title", title);
if (idlist == null || idlist.length == 0)
model.put("list", repo.findAll());
else {
List<Integer> ids = new ArrayList<Integer>();
for (int i = 0; i < idlist.length; i++)
ids.add(idlist[i]);
model.put("list", repo.findAll(ids));
}
model.put("isoutput", isoutput);
XSSFWorkbook book = new XSSFWorkbook();
XSSFSheet sheet = book.createSheet(model.get("sheetName").toString());
XSSFRow header = sheet.createRow(0);
// 產生標題列
int j = 0;
for (int i = 0; i < title.length; i++) {
if (isoutput[i] == 1) header.createCell(j++).setCellValue(title[i]);
}
int rowNum = 1;
for (Exam exam : (List<Exam>) model.get("list")) {
j = 0;
XSSFRow row = sheet.createRow(rowNum++);
if (isoutput[0] == 1) {
row.createCell(j).setCellValue(exam.getTest());
j++;
}
if (isoutput[1] == 1) {
row.createCell(j).setCellValue(exam.getOp1());
j++;
}
if (isoutput[2] == 1) {
row.createCell(j).setCellValue(exam.getOp2());
j++;
}
if (isoutput[3] == 1) {
row.createCell(j).setCellValue(exam.getOp3());
j++;
}
if (isoutput[4] == 1) {
row.createCell(j).setCellValue(exam.getOp4());
j++;
}
if (isoutput[5] == 1) {
row.createCell(j).setCellValue(exam.getAnswer());
j++;
}
if (isoutput[6] == 1) {
row.createCell(j).setCellValue(exam.getTotal());
j++;
}
if (isoutput[7] == 1) {
row.createCell(j).setCellValue(exam.gettotalCorrect());
j++;
}
if (isoutput[8] == 1) {
row.createCell(j).setCellValue(
(double) exam.gettotalCorrect() / exam.getTotal());
j++;
}
}
ByteArrayOutputStream output = new ByteArrayOutputStream();
book.write(output);
byte[] b = output.toByteArray();
return b;
}
由於這部分程式碼經過各種修改,還沒有整理好,這裡大概說下思路。首先上半部分是查詢後臺資料並生成xlsx檔案,也就是book物件;然後book.write方法將book轉化為ByteArraryOutputStream,由於非同步請求是通過Json來與前臺互動的,因此不能直接傳輸ByteArraryOutputStream,所以有將它轉換為byte陣列。
以上是主要程式碼,經測試,該檔案匯出功能在Chrome、IE、獵豹瀏覽器中都能正常匯出。
相關文章
- spring boot + easypoi快速實現excel匯入匯出Spring BootExcel
- 匯出excelExcel
- spring boot + jdk1.8實現Excel匯入、匯出Spring BootJDKExcel
- vue excel匯入匯出VueExcel
- js匯出EXCELjs匯出EXCELJSExcel
- PHP 匯出 ExcelPHPExcel
- PHP匯出EXCELPHPExcel
- Vue匯出ExcelVueExcel
- Java匯出ExcelJavaExcel
- php 匯出excelPHPExcel
- POI 匯出ExcelExcel
- Spring學習手冊 2:Spring MVC 匯出excel表格SpringMVCExcel
- java匯出Excel定義匯出模板JavaExcel
- Excel模板匯出之動態匯出Excel
- Angular Excel 匯入與匯出AngularExcel
- 騰訊文件怎樣匯出excel表格 騰訊文件如何匯出excelExcel
- Java 通過Xml匯出Excel檔案,Java Excel 匯出工具類,Java匯出Excel工具類JavaXMLExcel
- js匯出Excel表格JSExcel
- vue匯出Excel表格VueExcel
- Excel優雅匯出Excel
- Excel匯出實列Excel
- Springmvc匯出excelSpringMVCExcel
- appfuse:Excel匯出APPExcel
- DataGridView匯出ExcelViewExcel
- vue 前端匯出 excelVue前端Excel
- poi的excel匯出Excel
- kxcel, 方便匯入和匯出 ExcelExcel
- vue + element + 匯入、匯出excel表格VueExcel
- 轉java操作excel匯入匯出JavaExcel
- Vue框架下實現匯入匯出Excel、匯出PDFVue框架Excel
- Laravel Excel3.0匯出LaravelExcel
- Go 使用反射匯出 ExcelGo反射Excel
- java匯出Excel檔案JavaExcel
- excel匯出、mysql分頁ExcelMySql
- element-ui 匯出excelUIExcel
- oracle 匯出excel 格式整改OracleExcel
- java poi 匯出excel加密JavaExcel加密
- Mvc 5中匯出ExcelMVCExcel