Excel Grails:如何在客户端发送关闭的工作簿?
目前,我有一个将excel文件发送到客户端的工作代码。唯一的问题是,一旦客户端接收到文件,它就会自动打开。我正在使用org.apache作为我的工作簿。这是我的密码Excel Grails:如何在客户端发送关闭的工作簿?,excel,grails,Excel,Grails,目前,我有一个将excel文件发送到客户端的工作代码。唯一的问题是,一旦客户端接收到文件,它就会自动打开。我正在使用org.apache作为我的工作簿。这是我的密码 private void generateErrorReport(ServletResponse response, Map message, MultipartFile file, String ext){ InputStream is = file.getInputStream(); Outpu
private void generateErrorReport(ServletResponse response, Map message, MultipartFile file, String ext){
InputStream is = file.getInputStream();
OutputStream os = response.outputStream;
int index = file.originalFilename.lastIndexOf(".");
String fileName = file.originalFilename.substring(0,index) + "_error." + ext
response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
response.setHeader("Content-Disposition", "Attachment;Filename=${fileName}");
try {
PoiTransformer transformer = PoiTransformer.createTransformer(is, os);
org.apache.poi.ss.usermodel.Workbook workbook = transformer.getWorkbook()
Sheet sheet = workbook.getSheetAt(workbook.getActiveSheetIndex())
int lastColNum = sheet.getRow(0).getLastCellNum()
Cell cell;
cell = sheet.getRow(0).getCell(lastColNum);
if(cell==null){
cell = sheet.getRow(0).createCell(lastColNum);
}
cell.setCellType(1)
cell.setCellValue("Message")
cell.setCellStyle(getStyle(workbook, 2))
for(int it=1; it<sheet.getLastRowNum(); it++) {
if (message.get(new Long(it))!=null && message.get(new Long(it))!=[]) {
cell = sheet.getRow(it).getCell(lastColNum);
if(cell==null){
cell = sheet.getRow(it).createCell(lastColNum);
}
cell.setCellType(1)
cell.setCellValue(message.get(new Long(it)).join(', '))
cell.setCellStyle(getStyle(workbook, 1))
}
}
sheet.autoSizeColumn(lastColNum);
transformer.write();
} catch (IOException ex) {
println ex;
} finally {
closeStream(is);
closeStream(os);
}
}
private void generateErrorReport(ServletResponse响应、映射消息、多部分文件、字符串ext){
InputStream=file.getInputStream();
OutputStream os=response.OutputStream;
int index=file.originalFilename.lastIndexOf(“.”);
字符串文件名=file.originalFilename.substring(0,索引)+“\u错误。”+ext
setContentType(“application/vnd.openxmlformats of icedocument.spreadsheetml.sheet”);
setHeader(“内容处置”、“附件;文件名=${Filename}”);
试一试{
PoiTransformer=PoiTransformer.createTransformer(is,os);
org.apache.poi.ss.usermodel.Workbook工作簿=transformer.getWorkbook()
工作表=工作簿.getSheetAt(工作簿.getActiveSheetIndex())
int lastColNum=sheet.getRow(0).getLastCellNum()
细胞;
cell=sheet.getRow(0).getCell(lastColNum);
if(单元格==null){
cell=sheet.getRow(0).createCell(lastColNum);
}
cell.setCellType(1)
cell.setCellValue(“消息”)
setCellStyle(getStyle(工作簿,2))
对于(int it=1;it根据此RFC(),浏览器应打开“保存文件”对话框,让用户选择保存文件的位置
我的建议是打开dev工具(F12,Cmd Alt I)切换到network,查看在请求excel文件时向客户端发送了哪些头文件
您可以考虑的其他事项:
- 将mime类型(
response.setContentType
)设置为application/vnd.ms excel
- 设置mime类型
application/octet-stream
。这样,您就告诉浏览器数据是二进制的,仅此而已
我尝试将mimetype设置为application/vnd.ms-excel,也设置为application/octet stream,但没有成功:(您使用的浏览器是什么?希望不是IE6:-)您是否更改了检查浏览器中的标题(使用开发者工具)?