1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > poi导出excel 损坏_java - 导出时损坏Excel xlsx - 堆栈内存溢出

poi导出excel 损坏_java - 导出时损坏Excel xlsx - 堆栈内存溢出

时间:2022-09-24 02:18:44

相关推荐

poi导出excel 损坏_java - 导出时损坏Excel xlsx - 堆栈内存溢出

我花了最后几个小时浏览不同的Stack Overflow线程,讨论如何下载excel文件并将ByteArrayOutputStreams传递给前端。 我有一个Spring Boot后端,它可以创建一个自定义的Excel工作簿和相应的工作表。 但是,看起来从后端返回到角度6前端的二进制文件可能格式不正确。 我已经包含了不同的服务和控制器以及可能格式错误的数据。

响应体(截断值):

"PK]�uN_rels/.rels���j�0��}

�{㴃1F�^Ơ�2��l%1I,c�[��3�l

l�����H��4�R�l��·����q}*�2������;�*��

t"�^�l;1W)�N�iD)ejuD�cKz[׷:}g����@:�

�3����4�7N�s_ni�G�M*7�����2R�+� �2�/�����b��mC�Pp�ֱ$POyQ�抒�DsZ��IС�'un���~�PK����OPK]�uN[Content_Types].xml�SMO1��+6��m��1���G%��β...."

ExcelWriterService.java

private XSSFWorkbook workbook = new XSSFWorkbook();

public byte[] excelExporter(QueryResultsDataset data) {

List tableList = data.getTables();

List> dataRows = tableList.get(0).getRows();

OutputStream outputStream = new ByteArrayOutputStream();

... Create Excel workbook

workbook.write(outputStream);

outputStream.close();

workbook.close();

} catch (IOException ex) {

// Doing nothing

}

return ((ByteArrayOutputStream) outputStream).toByteArray();

弹簧控制器

@RequestMapping(value = "", method = RequestMethod.POST)

public @ResponseBody ResponseEntity export(@RequestBody SavedQuery request, Principal principal) {

//Run the job

QueryResultsDataset dataset = dataExportJob.getQueryResultsDataset();

ExcelWriterService ews = new ExcelWriterService();

HttpHeaders headers = new HttpHeaders();

headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);

StringBuilder filename = new StringBuilder("hello").append(".xlsx");

headers.add("content-disposition", "inline;filename=" + filename.toString());

headers.setCacheControl("must-revalidate, post-check=0, pre-check=0");

QueryResultsDataset fixResults = (QueryResultsDataset) fixMultiplier(dataset, request);

byte [] bytes = ews.excelExporter(fixResults);

ResponseEntity response = new ResponseEntity(bytes, headers, HttpStatus.OK);

return response;

}

}

Downloader.service.ts(Angular 6服务)

public exportExcel(search: any) {

const opts = [];

const tables = [];

this.api.download(environment._downloadDataEndPoint, search, {})

.subscribe(response => {

console.log(response);

var contentType = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';

let blob = new Blob([response], {type: contentType});

let link = document.createElement('a');

link.href = URL.createObjectURL(blob);

link.download = "dataweb.xlsx";

link.click();

}

...

}

Api服务(Angular 6服务)

download(url: string, body: any, header: any) {

header = JSON.parse(this._auth.getToken());

const headers = new Headers(header);

headers.append('responseType', ResponseContentType.Blob.toString());

const options = new RequestOptions({headers: headers});

const response = this.http.post(url, body, options)

.pipe(catchError((error: any) => observableThrowError(error)));

return response;

}

任何帮助都会很棒! 我现在没有想法。 谢谢!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。