Java程序?qū)崿F(xiàn)導(dǎo)出Excel的方法(支持IE低版本)
今天想整理一下自己前段時(shí)間遇到的一個(gè)導(dǎo)出的問(wèn)題。
因?yàn)轫?xiàng)目的需求,要做一部分導(dǎo)出功能。開(kāi)始的時(shí)候用的公司的導(dǎo)出,但是很奇怪有部分模塊導(dǎo)出的時(shí)候就是會(huì)報(bào)500錯(cuò)誤,發(fā)現(xiàn)在刪減一些字段后就恢復(fù)了正常,當(dāng)時(shí)因?yàn)轫?xiàng)目緊張,也就臨時(shí)刪減了一些,但也不是長(zhǎng)久之計(jì),之后自己在原本的基礎(chǔ)上重新修改整理了一下,目前運(yùn)行還算穩(wěn)定,就此和大家分享一下。
導(dǎo)出需要三個(gè)部分,js,公共方法,后臺(tái)方法。
js代碼
function exportData() { //前臺(tái)接收的參數(shù) rwmc = $("#txt_rwmc").val(); rwlb = $("#com_rwlb").combobox("getValues").join(","); //調(diào)用后臺(tái)導(dǎo)出功能 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("無(wú)數(shù)據(jù)!"); return; } // 獲取導(dǎo)出信息 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("導(dǎo)出成功!確認(rèn)下載文件嗎?\n文件名稱為:"+fileName)) { var file = fileName; var showfile = titleName + ".xls"; showfile = decodeURIComponent(showfile); var idx = document.URL.indexOf("/adp"); if (idx == -1) { alert("無(wú)法識(shí)別主機(jī)地址:" + document.URL); return; } var host = document.URL.substring(0, idx); var width = screen.width; var height = screen.height; debugger; // 打開(kāi)下載頁(yè)面 var param = "toolbar=no,location=no,status=yes,resizable=no,scrollbars=yes,top=" + height + ",left=" + width + ",width=100,height=100"; // ---------------------------------------------------------- // 此代碼塊為解決ie6下導(dǎo)出excel失敗問(wèn)題,原因是ie6對(duì)window.open(url)支持度不好, // 當(dāng)瀏覽器為ie6時(shí)改用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); } } }
公共類(lèi)
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: 轉(zhuǎn)換String字符串為EXCEL文檔</p> * <p>Copyright: Copyright (c) 2004</p> * <p>Company: DC</p> * @author FENGZG * @version 1.0 * 時(shí)間: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 導(dǎo)出列標(biāo)題 * @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(); // 給工作表列定義列寬(實(shí)際應(yīng)用自己更改列數(shù)) for (short i = 0; i <= colNum; i++) { sheet.setColumnWidth(i, (short) 4000); } // 創(chuàng)建單元格樣式 HSSFCellStyle cellHeadStyle = wb.createCellStyle(); // 指定單元格居中對(duì)齊 cellHeadStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 指定單元格垂直居中對(duì)齊 cellHeadStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); // 指定當(dāng)單元格內(nèi)容顯示不下時(shí)自動(dòng)換行 cellHeadStyle.setWrapText(true); // 設(shè)置單元格字體 HSSFFont headFont = wb.createFont(); headFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); headFont.setFontName("宋體"); headFont.setFontHeight((short) 200); cellHeadStyle.setFont(headFont); // 創(chuàng)建報(bào)表頭部 Date dt=new Date(); SimpleDateFormat sdt=new SimpleDateFormat("yyyyMMddhhmmssS"); String sfm = czryDm + "_" + sdt.format(dt); // 設(shè)置列頭 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 = ""; //設(shè)置表格樣式 HSSFCellStyle cellStyle = wb.createCellStyle(); // 指定單元格居中對(duì)齊 cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 指定單元格垂直居中對(duì)齊 cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); // 指定當(dāng)單元格內(nèi)容顯示不下時(shí)自動(dòng)換行 cellStyle.setWrapText(true); // 設(shè)置單元格字體 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()); } } } //設(shè)置導(dǎo)出路徑,此處需要注意如果是Linux系統(tǒng)需要手動(dòng)建路徑,(此處的原因有人比較清楚的話還請(qǐng)指教)引用新建的文件路徑 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()); } } }
后臺(tái)代碼
/** * 導(dǎo)出功能 * @param xdo 前臺(tái)傳參 * @param czryDm 操作人員代碼 * @return 生成的XLS信息 * @throws Exception 異常說(shuō)明 */ public String exportExcel(XMLDataObject args,String czryDm) throws Exception { //接收前臺(tái)傳遞的查詢參數(shù) 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); //導(dǎo)出的列標(biāo)題 String[] titles = {"任務(wù)序號(hào)","任務(wù)名稱"}; //實(shí)例化公共類(lèi) CreateExcel excel = new CreateExcel(); return excel.newToExcel(sql.toString(), czryDm,titles,"Exlcel表頭"); }
以上這篇Java程序?qū)崿F(xiàn)導(dǎo)出Excel的方法(支持IE低版本)就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- Java數(shù)據(jù)導(dǎo)出功能之導(dǎo)出Excel文件實(shí)例
- JavaWeb導(dǎo)出Excel文件并彈出下載框
- JavaWeb動(dòng)態(tài)導(dǎo)出Excel可彈出下載
- Java FineReport報(bào)表工具導(dǎo)出EXCEL的四種方式
- java導(dǎo)出大批量(百萬(wàn)以上)數(shù)據(jù)的excel文件
- Java根據(jù)模板導(dǎo)出Excel報(bào)表并復(fù)制模板生成多個(gè)Sheet頁(yè)
- java實(shí)現(xiàn)把對(duì)象數(shù)組通過(guò)excel方式導(dǎo)出的功能
- java實(shí)現(xiàn)Excel的導(dǎo)入、導(dǎo)出
- java常用工具類(lèi)之Excel操作類(lèi)及依賴包下載
- java實(shí)現(xiàn)excel導(dǎo)入數(shù)據(jù)的工具類(lèi)
- 在java poi導(dǎo)入Excel通用工具類(lèi)示例詳解
- java實(shí)現(xiàn)的導(dǎo)出Excel工具類(lèi)實(shí)例
相關(guān)文章
SpringBoot+ShardingSphereJDBC實(shí)現(xiàn)讀寫(xiě)分離詳情
這篇文章主要介紹了SpringBoot+ShardingSphereJDBC實(shí)現(xiàn)讀寫(xiě)分離詳情,通過(guò)用??MySQL??進(jìn)行一主一從的主從復(fù)制展開(kāi)全文內(nèi)容,需要的朋友可以參考一下2022-08-08JFreeChart插件實(shí)現(xiàn)的折線圖效果實(shí)例
這篇文章主要介紹了JFreeChart插件實(shí)現(xiàn)的折線圖效果,結(jié)合實(shí)例形式分析了基于JFreeChart繪制折線圖的相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2016-08-08IDEA啟動(dòng)Tomcat報(bào)Unrecognized option: --add-opens=java
這篇文章主要為大家介紹了解決IDEA啟動(dòng)Tomcat報(bào)Unrecognized option: --add-opens=java.base/java.lang=ALL-UNNAMED的方法,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下2023-08-08淺談Java設(shè)置PPT幻燈片背景——純色、漸變、圖片背景
這篇文章主要介紹了Java設(shè)置PPT幻燈片背景——純色、漸變、圖片背景,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-03-03Mybatis如何根據(jù)List批量查詢List結(jié)果
這篇文章主要介紹了Mybatis如何根據(jù)List批量查詢List結(jié)果,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-03-03