时间:2021-05-20
今天想整理一下自己前段时间遇到的一个导出的问题。
因为项目的需求,要做一部分导出功能。开始的时候用的公司的导出,但是很奇怪有部分模块导出的时候就是会报500错误,发现在删减一些字段后就恢复了正常,当时因为项目紧张,也就临时删减了一些,但也不是长久之计,之后自己在原本的基础上重新修改整理了一下,目前运行还算稳定,就此和大家分享一下。
导出需要三个部分,js,公共方法,后台方法。
js代码
公共类
package ctais.business.gzkp.common;import java.io.File;import java.io.FileInputStream;import java.text.SimpleDateFormat;import java.util.Date;import org.apache.poi2.hssf.usermodel.HSSFCell;import org.apache.poi2.hssf.usermodel.HSSFCellStyle;import org.apache.poi2.hssf.usermodel.HSSFFont;import org.apache.poi2.hssf.usermodel.HSSFRow;import org.apache.poi2.hssf.usermodel.HSSFSheet;import org.apache.poi2.hssf.usermodel.HSSFWorkbook;import ctais.business.dashboard.service.ExportExcel;import ctais.config.Config;import ctais.services.data.DataWindow;import ctais.services.xml.XMLDataObject;import ctais.services.xml.XMLParser;import ctais.util.StringEx;import jxl.Workbook;import jxl.format.Alignment;import jxl.write.Label;import jxl.write.WritableCellFormat;import jxl.write.WritableFont;import jxl.write.WritableSheet;import jxl.write.WritableWorkbook;/** * <p>Title: 生成EXCEL文件</p> * <p>Description: 转换String字符串为EXCEL文档</p> * <p>Copyright: Copyright (c) 2004</p> * <p>Company: DC</p> * @author FENGZG * @version 1.0 * 时间:2015-12-28 */public class CreateExcel { private final static String CONFIG_FILE_PATH = Config.CTAIS_HOME; WritableWorkbook wwb = null; XMLDataObject xdo = null; public CreateExcel(){ } /** * 生成EXCEL * @param sql 查询SQL * @param czryDm 操作人员代码 * @param titles 导出列标题 * @param exlTitle excel表头 * @return * @throws Exception */ public String newToExcel(String sql,String czryDm,String[] titles,String exlTitle) throws Exception { try { HSSFWorkbook wb = new HSSFWorkbook(); HSSFSheet sheet = wb.createSheet(); ExportExcel exportExcel = new ExportExcel(wb, sheet); StringBuffer sffer = new StringBuffer(); //int colNum = 30; DataWindow dw = DataWindow.dynamicCreate(sql.toString()); dw.setConnectionName(Icomm.GZKPJNDI); long dwRet = dw.retrieve(); if (dwRet <= 0) { sffer.append("<NODATA>nodata</NODATA>"); return sffer.toString(); } else { sffer.append("<NODATA></NODATA>"); } int colNum = dw.getColumnCount(); // 给工作表列定义列宽(实际应用自己更改列数) for (short i = 0; i <= colNum; i++) { sheet.setColumnWidth(i, (short) 4000); } // 创建单元格样式 HSSFCellStyle cellHeadStyle = wb.createCellStyle(); // 指定单元格居中对齐 cellHeadStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 指定单元格垂直居中对齐 cellHeadStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); // 指定当单元格内容显示不下时自动换行 cellHeadStyle.setWrapText(true); // 设置单元格字体 HSSFFont headFont = wb.createFont(); headFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); headFont.setFontName("宋体"); headFont.setFontHeight((short) 200); cellHeadStyle.setFont(headFont); // 创建报表头部 Date dt=new Date(); SimpleDateFormat sdt=new SimpleDateFormat("yyyyMMddhhmmssS"); String sfm = czryDm + "_" + sdt.format(dt); // 设置列头 exportExcel.createNormalHead(exlTitle, colNum-1); HSSFRow row1 = sheet.createRow(1); for(int i = 0; i < titles.length; i ++) { HSSFCell cell = row1.createCell((short)i); cell.setEncoding(HSSFCell.ENCODING_UTF_16); cell.setCellStyle(cellHeadStyle); cell.setCellValue(titles[i]); } Object value = ""; //设置表格样式 HSSFCellStyle cellStyle = wb.createCellStyle(); // 指定单元格居中对齐 cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 指定单元格垂直居中对齐 cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); // 指定当单元格内容显示不下时自动换行 cellStyle.setWrapText(true); // 设置单元格字体 HSSFFont font = wb.createFont(); font.setBoldweight(HSSFFont.SS_NONE); font.setFontName("宋体"); font.setFontHeight((short) 200); cellStyle.setFont(font); for(int i = 0 ; i < dw.getRowCount(); i++) { HSSFRow row = sheet.createRow(i + 2); for(int j = 1; j <= dw.getColumnCount(); j++) { HSSFCell cell = row.createCell((short)(j-1)); cell.setEncoding(HSSFCell.ENCODING_UTF_16); cell.setCellStyle(cellStyle); value = dw.getItemAny(i, j-1); if(value == null) { cell.setCellValue(""); } else { cell.setCellValue(value.toString()); } } } //设置导出路径,此处需要注意如果是Linux系统需要手动建路径,(此处的原因有人比较清楚的话还请指教)引用新建的文件路径 String path = "/export/"; File file = new File(path); if(!file.exists()) { file.mkdirs(); } String fileName = sfm+".xls"; //String pth = path.trim() + File.separator + fileName; String pth = path.trim() + fileName; pth = pth.trim(); String outPutInfo = exportExcel.outputExcel(pth); sffer.append("<TITLE_NAME>" + sfm + "</TITLE_NAME>"); sffer.append("<DOWNLOAD_PATH>" + path + "</DOWNLOAD_PATH>"); sffer.append("<FILE_NAME>" + fileName + "</FILE_NAME>"); sffer.append("<OUTPUTINFO>" + outPutInfo + "</OUTPUTINFO>"); return sffer.toString(); } catch (Exception e) { e.printStackTrace(); throw new Exception(e.getMessage()); } }}后台代码
/** * 导出功能 * @param xdo 前台传参 * @param czryDm 操作人员代码 * @return 生成的XLS信息 * @throws Exception 异常说明 */ public String exportExcel(XMLDataObject args,String czryDm) throws Exception { //接收前台传递的查询参数 String rwmc = StringEx.sNull(args.getItemValue("RWMC")); String rwlb = StringEx.sNull(args.getItemValue("RWLB")); if(null != rwmc && !"".equals(rwmc)) { sqlWhere.append(" AND A.RWMC LIKE '%"+rwmc+"%' "); } if(null != rwlb && !"".equals(rwlb)) { sqlWhere.append(" AND A.RWLB_DM = '"+rwlb+"' "); } StringBuilder sql = new StringBuilder(); //拼接查询SQL sql.append("SELECT RWXH,RWMC FROM RWXX") .append(sqlWhere).append(" ORDER BY RWXH ) ").append(sqlisWhere); //导出的列标题 String[] titles = {"任务序号","任务名称"}; //实例化公共类 CreateExcel excel = new CreateExcel(); return excel.newToExcel(sql.toString(), czryDm,titles,"Exlcel表头"); }以上这篇Java程序实现导出Excel的方法(支持IE低版本)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
以excel为例,其高版本程序存在低版本不支持的功能、格式和函数,因此存为低版本格式时,为了保存后不出现问题就会出现可进行兼容性检查。 MicrosoftEx
本文实例讲述了js自定义trim函数实现删除两端空格功能。分享给大家供大家参考,具体如下:兼容IE低版本浏览器,以及其他一些低版本脚本的浏览器js中本身是没有t
背景:大部分浏览器已经实现了json对象转字符串的原生api支持,那在较低版本浏览器浏览器——如大家最喜爱的IE6——里如何实现呢?首先运行以下方法,测试各种情
word兼容模式的原因有: 1、适应低版本的需要。如果word文档升级了高版本,其中的一些功能是低版本没有的。如果使用低版本系统打开,就需要开启兼容模式。
1.现象:字节流向浏览器输出中文,可能会乱码(IE低版本)privatevoidbyteMethod(HttpServletResponseresponse)t