首先,需要大家明白一点,对于多服务器就不能用导出文件用a标签访问链接方式去导出excel文件了,原因相信大家也明白,可能也做过尝试。

现在开始第一步:get请求,productPath 为你的项目路径

var url=productPath + "/CtrlService"+"?action=ZcjqrGlfExport&UserName="+ username+"&FILENAME="+ filePath;
window.open(url);

第二步:

    public Object doCtrlService(StubObject arg0, JParamObject arg1, HttpServletRequest req,
HttpServletResponse resp)
throws Exception {
String filePath = req.getParameter("FILENAME");
try {
JParamObject PO=JParamObject.getInstance();
PO.SetValueByParamName("filePath", filePath);
PO.setEnvValue("DBNO", "FMIS_DB01");
PO.setEnvValue("DataBaseName", "FMIS_DB01");
JResponseObject RO=(JResponseObject) EAI.DAL.SVR("FMIS_ZCJQR_GLFFT_EXPORT", PO);
String fileName=(String)RO.getResponseObject("fileName");
byte[] fileBytes=(byte[])RO.getResponseObject("fileBytes");
if(fileBytes==null){
return null;
}
setResponseHeader(resp,fileName,".xls");
ServletOutputStream out=resp.getOutputStream();
try{
out.write(fileBytes);
out.close();
}catch(Exception e){
if(e.getClass().getName().equals("org.apache.catalina.connector.ClientAbortException")){
logger.info("客户端终止操作");
return null;
}
throw e;
}
} catch (Exception e) {
String errMsg = "异常";
logger.error(errMsg,e);
ServiceException se = new ServiceException(e.getMessage());
se.setErrorCode(-502);
se.setErrorMessage(errMsg);
throw se;
}
return null;
} private void onError(HttpServletResponse resp, String msg) throws Exception {
resp.setHeader("Content-type", "text/html;charset=UTF-8");
resp.setCharacterEncoding("UTF-8");
resp.getWriter().print(msg);
} private void setResponseHeader(HttpServletResponse resp, String fileName, String fileType) throws Exception { String fileNameEncode = java.net.URLEncoder.encode(fileName, "UTF-8");
String[][] contentType =
{
{".xls","application/x-xls"}
};
for (int i = 0; i < contentType.length; i++) {
if (contentType[i][0].equals(fileType)) {
resp.setContentType(contentType[i][1]);
break;
}
}
resp.addHeader("Content-Disposition", "attachment;filename=" + fileNameEncode);
return; }

第三步:读取模板文件,并输出文件流

	private byte[]  fileExport(JConnection conn, JParamObject PO) {
InputStream io;
String path=EAI.LocalUserHome;
String modelfilepath=path+"importTemp"+File.separator+"Glfftmodel.xls";
String filename=TempleNameUtils.createTempTableName("glfmx_");
String outputPath=path+"exporttemp"+File.separator+filename+".xls";
ByteArrayOutputStream outputStream = null;
byte[] bytes = new byte[0];
deleteExcelBeforeExport(path+"exporttemp","glfmx");
try{
//这里读出来的workbook作为模版
io = new FileInputStream(new File(modelfilepath));
HSSFWorkbook workbook = new HSSFWorkbook(io);
HSSFSheet sheet=workbook.getSheetAt(0);
List<Glfftbean> listg=QueryGlfftList(conn); HSSFCellStyle cellStyle = workbook.createCellStyle(); // 单元格样式
cellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);
cellStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);
cellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);
cellStyle.setBorderTop(HSSFCellStyle.BORDER_THIN); for(int i=0;i<listg.size();i++){
Glfftbean glfftbean=listg.get(i);
System.out.println(i);
String xmbh= glfftbean.getXmbh();
HSSFRow row=sheet.getRow(i+9);//第10行开始
if (row == null) {
row = sheet.createRow(i+9);
row.createCell(0).setCellValue(xmbh);
row.createCell(1).setCellValue(glfftbean.getXmmc());
row.createCell(2).setCellValue(glfftbean.getQmzjgc());
row.createCell(3).setCellValue(glfftbean.getZcbh());
row.createCell(4).setCellValue(glfftbean.getZcmc());
row.createCell(5).setCellValue(glfftbean.getCbzxbh());
row.createCell(6).setCellValue(glfftbean.getCbzxmc());
row.createCell(7).setCellValue(glfftbean.getFtje());
row.createCell(8).setCellValue(glfftbean.getQzfzcbh());
}else{
row.getCell(0).setCellValue(xmbh);
row.getCell(1).setCellValue(glfftbean.getXmmc());
row.getCell(2).setCellValue(glfftbean.getQmzjgc());
row.getCell(3).setCellValue(glfftbean.getZcbh());
row.getCell(4).setCellValue(glfftbean.getZcmc());
row.getCell(5).setCellValue(glfftbean.getCbzxbh());
row.getCell(6).setCellValue(glfftbean.getCbzxmc());
row.getCell(7).setCellValue(glfftbean.getFtje());
row.getCell(8).setCellValue(glfftbean.getQzfzcbh());
}
for (Cell cell : row) {
cell.setCellStyle(cellStyle);
} }
File file= new File(outputPath);
FileOutputStream fo=new FileOutputStream(file);
workbook.write(fo);
workbook.close();
long fileSize = file.length();
FileInputStream in = new FileInputStream(file);
byte[] buffer = new byte[(int) fileSize];
while ((fileSize = in.read(buffer)) != -1) {
return buffer;
}
in.close();
return buffer;
}catch (Exception e){
String errMsg = "创建文件流失败";
logger.error(errMsg, e);
ServiceException se = new ServiceException(e.getMessage());
se.setErrorCode(-1);
se.setErrorMessage(errMsg);
}
return bytes;
}

删除相关文件:

public static void deleteExcelBeforeExport(String path, String username) {
File file = new File(path);
File[] fileList = file.listFiles();
if (fileList != null) {
for (int i = 0; i < fileList.length; i++) {
File fs = fileList[i];
if (!fs.isDirectory()) {
String[] fileNames = fs.getName().split("_");
if (fileNames.length > 1) {
String fileUserName = fileNames[0];
// --删除包含该用户名的并且后缀的开头为
if (fileUserName.equals(username)) {
String deleteFilePath = path + File.separator + fs.getName();
File deleteFile = new File(deleteFilePath);
deleteFile.delete();
}
}
}
}
} }

结束

思路总结:需要生成文件 ->读取文件 -> 输出文件流 -> 删除文件

属作者原创,如有转载,请表明出处:https://www.cnblogs.com/mobeisanghai/p/12191374.html

java读写Excel模板文件,应用于负载均衡多个服务器的更多相关文章

  1. Chimm.Excel —— 使用Java 操作 excel 模板文件生成 excel 文档

    Chimm.Excel -- 设置模板,填充数据,就完事儿了~ _____ _ _ _____ _ / __ \ | (_) | ___| | | | / \/ |__ _ _ __ ___ _ __ ...

  2. 使用JAVA读写Properties属性文件

     使用JAVA读写Properties属性文件 Properties属性文件在JAVA应用程序中是经常可以看得见的,也是特别重要的一类文件.它用来配置应用程序的一些信息,不过这些信息一般都是比较少的数 ...

  3. JAVA生成EXCEL模板

    JAVA生成excel模板,支持1.必填字段前加 红色 * 2.定义可选值下拉列表 valList3.定义名称并通过名称设置可选值 refName(名称在sheet2,sheet2自动隐藏)4.支持设 ...

  4. 多事之秋-最近在阿里云上遇到的问题:负载均衡失灵、服务器 CPU 100%、被 DDoS 攻击

    昨天 22:00~22:30 左右与 23:30~00:30 左右,有1台服役多年的阿里云负载均衡突然失灵,造成通过这台负载均衡访问博客站点的用户遭遇 502, 503, 504 ,由此给您带来麻烦, ...

  5. C++读写EXCEL文件OLE,java读写excel文件POI 对比

    C++读写EXCEL文件方式比较 有些朋友问代码的问题,将OLE读写的代码分享在这个地方,大家请自己看.http://www.cnblogs.com/destim/p/5476915.html C++ ...

  6. java 读写word java 动态写入 模板文件

    import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import ja ...

  7. java读写excel文件

    近期处理的数据规模比较大,正好又是统计合并的事情,想着借助excel就可以完成了,然后就了解了下java读取excel的事情. 读取的文件主要分两类:xls文件.xlsx文件.xls文件的相关操作用的 ...

  8. 利用java读写Excel文件

    一.读取Excel文件内容 java 代码 public static String readExcel(File file){ StringBuffer sb = new StringBuffer( ...

  9. java实现excel模板导出

    一. 准备工作 1. 点击此下载相关开发工具 2. 将poi-3.8.jxls-core-1.0两个jar包放到工程中,并引用 3. 将excel模板runRecord.xls放到RunRecordB ...

随机推荐

  1. 关于react中antd design pro下面src/models

    1.src/models 在 Ant Design Pro 中,一个完整的前端 UI 交互到服务端处理流程是这样的: 1.UI 组件交互操作: 2.调用 model 的 effect: 3.调用统一管 ...

  2. Beta冲刺 —— 6.1

    这个作业属于哪个课程 软件工程 这个作业要求在哪里 Beta冲刺 这个作业的目标 Beta冲刺 作业正文 正文 github链接 项目地址 其他参考文献 无 一.会议内容 1.讨论并解决每个人存在的问 ...

  3. jchdl - RTL实例 - AndAnd

    https://mp.weixin.qq.com/s/JhUB3M1WhjAyUrN1HPIPTA   AndAnd是三输入与门模块,输出为相与的结果.   参考链接 https://github.c ...

  4. 【Checkpoint】HA模式下结合zookeeper说一下checkpoint流程

    checkpoint过程 配置了HA的HDFS中,有active和standby namenode两个namenode节点.他们的内存中保存了一样的集群元数据信息,这个后续我会详细用一篇文章介绍HA, ...

  5. 【Mybatis】mybatis3入门

    mybatis简介 MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBatis 可 ...

  6. pip安装Python库速度慢的解决方法

    最近在写大数据文本挖掘的考查报告,需要用到 jieba切词,于是在pycharm中安装 jieba 库 首先是在 File—settings中通过搜索安装,然而安了五分钟之后还是失败了 于是通过终端输 ...

  7. JAVASE(九)面向对象特性之 : 继承性、方法重写、关键字super、

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) 1.继承性 1.1 为什么要类的继承性?(继承性的好处) ①减少了代码的冗余,提高了代码的复用性:②更好 ...

  8. CPU亲和度

    CPU亲和度(CPU Affinity),就是将一个进程或者线程强制绑定在CPU的某一个core上运行. 参考:https://www.cnblogs.com/zhangxuan/p/6427533. ...

  9. Java实现 LeetCode 837 新21点(DP)

    837. 新21点 爱丽丝参与一个大致基于纸牌游戏 "21点" 规则的游戏,描述如下: 爱丽丝以 0 分开始,并在她的得分少于 K 分时抽取数字. 抽取时,她从 [1, W] 的范 ...

  10. Java实现 蓝桥杯 算法训练 未名湖边的烦恼

    算法训练 未名湖边的烦恼 时间限制:1.0s 内存限制:256.0MB 问题描述 每年冬天,北大未名湖上都是滑冰的好地方.北大体育组准备了许多冰鞋,可是人太多了,每天下午收工后,常常一双冰鞋都不剩. ...