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);
}
}
}
公共類
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í)例化公共類
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常用工具類之Excel操作類及依賴包下載
- java實(shí)現(xiàn)excel導(dǎo)入數(shù)據(jù)的工具類
- 在java poi導(dǎo)入Excel通用工具類示例詳解
- java實(shí)現(xiàn)的導(dǎo)出Excel工具類實(shí)例
相關(guān)文章
Java向數(shù)據(jù)庫(kù)中插入數(shù)據(jù)后獲取自增ID的常用方法
有時(shí)候因?yàn)樾略龅男枨笮枰@取剛剛新增的數(shù)據(jù)的自增的主鍵ID,下面這篇文章主要給大家介紹了關(guān)于Java向數(shù)據(jù)庫(kù)中插入數(shù)據(jù)后獲取自增ID的常用方法,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-11-11
Java使用JSqlParser解析SQL語(yǔ)句應(yīng)用場(chǎng)景
JSqlParser是一個(gè)功能全面的Java庫(kù),用于解析SQL語(yǔ)句,支持多種SQL方言,它可以輕松集成到Java項(xiàng)目中,并提供靈活的操作方式,本文介紹Java使用JSqlParser解析SQL語(yǔ)句總結(jié),感興趣的朋友一起看看吧2024-09-09
SpringBoot發(fā)送異步郵件流程與實(shí)現(xiàn)詳解
這篇文章主要介紹了SpringBoot發(fā)送異步郵件流程與實(shí)現(xiàn)詳解,Servlet階段郵件發(fā)送非常的復(fù)雜,如果現(xiàn)代化的Java開(kāi)發(fā)是那個(gè)樣子該有多糟糕,現(xiàn)在SpringBoot中集成好了郵件發(fā)送的東西,而且操作十分簡(jiǎn)單容易上手,需要的朋友可以參考下2024-01-01
IDEA JarEditor編輯jar包方式(直接新增,修改,刪除jar包內(nèi)的class文件)
文章主要介紹了如何使用IDEA的JarEditor插件直接修改jar包內(nèi)的class文件,而不需要手動(dòng)解壓、反編譯和重新打包,通過(guò)該插件,可以更方便地進(jìn)行jar包的修改和測(cè)試2025-01-01
Java實(shí)現(xiàn)簡(jiǎn)單文字驗(yàn)證碼以及人機(jī)驗(yàn)證
人機(jī)驗(yàn)證技術(shù)的發(fā)展也在不斷進(jìn)化,從最初的簡(jiǎn)單驗(yàn)證碼到現(xiàn)在的人工智能驅(qū)動(dòng)的高級(jí)驗(yàn)證系統(tǒng),下面這篇文章主要介紹了Java實(shí)現(xiàn)簡(jiǎn)單文字驗(yàn)證碼以及人機(jī)驗(yàn)證的相關(guān)資料,需要的朋友可以參考下2025-04-04
解決restlet client報(bào)錯(cuò)No response.Is the cer
這篇文章主要介紹了解決restlet client報(bào)錯(cuò)No response.Is the certificate valid? Click here to check.問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-01-01

