当前位置: 首页 > 编程笔记 >

Java程序实现导出Excel的方法(支持IE低版本)

能文华
2023-03-14
本文向大家介绍Java程序实现导出Excel的方法(支持IE低版本),包括了Java程序实现导出Excel的方法(支持IE低版本)的使用技巧和注意事项,需要的朋友参考一下

今天想整理一下自己前段时间遇到的一个导出的问题。

因为项目的需求,要做一部分导出功能。开始的时候用的公司的导出,但是很奇怪有部分模块导出的时候就是会报500错误,发现在删减一些字段后就恢复了正常,当时因为项目紧张,也就临时删减了一些,但也不是长久之计,之后自己在原本的基础上重新修改整理了一下,目前运行还算稳定,就此和大家分享一下。

导出需要三个部分,js,公共方法,后台方法。

js代码

function exportData()
{
    //前台接收的参数
  rwmc = $("#txt_rwmc").val();
   rwlb = $("#com_rwlb").combobox("getValues").join(",");
   
  //调用后台导出功能
  var service = new Service("cx.RybjcxBndService.exprotExcel");
  var str="<RWMC>" + rwmc + "</RWMC><RWLB>" + rwlb + "</RWLB>";
  var res = service.doService(str);
  var oDoc = loadXml(res);
  if (service.getCode() != "2000") {
    showMessage("查询失败:"+service.getMessage());
    return;
  }
  var nodata = oDoc.selectSingleNode("ROOT/NODATA").text;
  if (nodata == "nodata") {
    showMessage("无数据!");
    return;
  }
  // 获取导出信息
  var titleName = oDoc.selectSingleNode("ROOT/TITLE_NAME").text;
  var fileName = oDoc.selectSingleNode("ROOT/FILE_NAME").text;
  var outPutInfo = oDoc.selectSingleNode("ROOT/OUTPUTINFO").text;
  var download_path = oDoc.selectSingleNode("ROOT/DOWNLOAD_PATH").text;
  if (outPutInfo != "") {
    showMessage(outPutInfo);
    return;
  }
  if (confirm("导出成功!确认下载文件吗?\n文件名称为:"+fileName)) {
    var file = fileName;
    var showfile = titleName + ".xls";
    showfile = decodeURIComponent(showfile);
    var idx = document.URL.indexOf("/adp");
    if (idx == -1) {
      alert("无法识别主机地址:" + document.URL);
      return;
    }
    var host = document.URL.substring(0, idx);
    var width = screen.width;
    var height = screen.height;
    debugger;
    // 打开下载页面
    var param = "toolbar=no,location=no,status=yes,resizable=no,scrollbars=yes,top=" + height + ",left=" + width + ",width=100,height=100";
    // ----------------------------------------------------------
    // 此代码块为解决ie6下导出excel失败问题,原因是ie6对window.open(url)支持度不好,
    // 当浏览器为ie6时改用window.location.href
    var isIE=!!window.ActiveXObject;
    var isIE6=isIE&&!window.XMLHttpRequest;
    if (isIE6) {
      window.location.href=host + "/adp/work/gzkp/common/js/download_new.jsp?file=" + file + "&showfile=" + showfile + "&download_path=" + download_path;
    } else {
      window.open(host + "/adp/work/gzkp/common/js/download_new.jsp?file=" + file + "&showfile=" + showfile + "&download_path=" + download_path, "_blank", param);
    }
  }
}

公共类

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低版本)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持小牛知识库。

 类似资料:
  • 本文向大家介绍java实现Excel的导入、导出,包括了java实现Excel的导入、导出的使用技巧和注意事项,需要的朋友参考一下 一、Excel的导入 导入可采用两种方式,一种是JXL,另一种是POI,但前者不能读取高版本的Excel(07以上),后者更具兼容性。由于对两种方式都进行了尝试,就都贴出来分享(若有错误,请给予指正) 方式一、JXL导入  所需jar包 JXL.jar 方式二、POI

  • 本文向大家介绍ASP.NET使用GridView导出Excel实现方法,包括了ASP.NET使用GridView导出Excel实现方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了ASP.NET使用GridView导出Excel实现方法。分享给大家供大家参考。具体实现方法如下: 希望本文所述对大家的asp.net程序设计有所帮助。

  • 本文向大家介绍thinkphp在低版本Nginx 下支持PATHINFO的方法分享,包括了thinkphp在低版本Nginx 下支持PATHINFO的方法分享的使用技巧和注意事项,需要的朋友参考一下 最近在用thinkphp做一个项目,基本完成后部署到nginx服务器上才发觉nginx是不支持pathinfo的那么我们如何来处理呢。 Nginx环境 在Nginx低版本中,是不支持PATHINFO的

  • 本文向大家介绍asp.net+Ligerui实现grid导出Excel和Word的方法,包括了asp.net+Ligerui实现grid导出Excel和Word的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了asp.net+Ligerui实现grid导出Excel和Word的方法。分享给大家供大家参考,具体如下: 下面采用的导EXCEL方法,适合不翻页的grid,而且无需再读一次数据

  • 本文向大家介绍C# 导出Excel的6种简单方法实现,包括了C# 导出Excel的6种简单方法实现的使用技巧和注意事项,需要的朋友参考一下 作者 | Johnson Manohar 译者 | 谭开朗,责编 | 黄浩然 出品 | CSDN(ID:CSDNnews) Syncfusion Excel (XlsIO) 库是一个 .Net Excel 库,它支持用户用 C# 和 VB.NET 以一个非常简

  • 本文向大家介绍java实现的导出Excel工具类实例,包括了java实现的导出Excel工具类实例的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了java实现的导出Excel工具类。分享给大家供大家参考,具体如下: ExcelExportUtil: VerifyUtil: 更多关于java相关内容感兴趣的读者可查看本站专题:《Java操作Excel技巧总结》、《Java+MySQL数据库程