首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2EE开发 >

实现导出Excel功能!该如何解决

2012-02-10 
实现导出Excel功能!展示报表页面可以预览,预览时提供导出Excel,把报表页面显示的结果以Excel的形式导出。有

实现导出Excel功能!
展示报表页面可以预览,预览时提供导出Excel,把报表页面显示的结果以Excel的形式导出。
有例子贴个例子,谢谢!不要发连接。公司上不了外网。

[解决办法]
额、难道csdn不算外网 - -#
[解决办法]
response.setHeader()
[解决办法]
这是我写的一个到出客户的例子,该方法是我接口的实现类中的方法,需要一个jar包:poi-3.0.2.jar 

Java code
public boolean exportExcel(ExportCustomerDto expDto)            throws Exception    {        boolean isSuccess = false;//开始构造导出Excel文件名称        StringBuffer fileNameBuffer = new StringBuffer();        fileNameBuffer.append(CustomerConstants.EXPORT_CUS_FILENAME);        SimpleDateFormat fmtDate = new SimpleDateFormat("yyyyMMddHHmmss");        fileNameBuffer.append(fmtDate.format(new Date()));        fileNameBuffer.append((int) (10F * (new Random()).nextFloat()));        fileNameBuffer.append(".xls");//构造导出Excel文件名称完成        HSSFWorkbook workbook = new HSSFWorkbook(); // 产生工作簿对象        HSSFSheet sheet = workbook.createSheet(); // 产生工作表对象        // 设置第一个工作表的名称为firstSheet        // 为了工作表能支持中文,设置字符编码为UTF_16        workbook.setSheetName(0, "客户批量导出", HSSFWorkbook.ENCODING_UTF_16);        // 产生一行        HSSFRow row = sheet.createRow((short) 0);        // 产生第一个单元格        String[] tableHead = {"姓名","电话","性别"................};        for (int i = 0; i < tableHead.length; i++)        {            HSSFCell cell = row.createCell((short) i);            // 设置单元格内容为字符串型            cell.setCellType(HSSFCell.CELL_TYPE_STRING);            // 为了能在单元格中写入中文,设置字符编码为UTF_16。            cell.setEncoding(HSSFCell.ENCODING_UTF_16);            // 往第一个单元格中写入信息            cell.setCellValue(tableHead[i]);        }        List list = cusExportDao.cusExportList(expDto);//从数据库查的所有客户List        int rowcount = 0;        for (int j = 0; j < list.size(); j++)        {            ExportCustomerDto dto = (ExportCustomerDto) list.get(j);            rowcount = j + 1;            // 产生一行            HSSFRow row2 = sheet.createRow((short) rowcount);            for (int k = 0; k < tableHead.length; k++)            {                HSSFCell cell2 = row2.createCell((short) k);                // 设置单元格内容为字符串型                cell2.setCellType(HSSFCell.CELL_TYPE_STRING);                // 为了能在单元格中写入中文,设置字符编码为UTF_16。                cell2.setEncoding(HSSFCell.ENCODING_UTF_16);                // 往第一个单元格中写入信息                if (k == 0)                {                    cell2.setCellValue(dto.getCustomerName());                }                if (k == 1)                {                    cell2.setCellValue(dto.getStrCustomerType());                }                if (k == 2)                {                    cell2.setCellValue(dto.getStrSex());                }                if (k == 3)                {                    cell2.setCellValue(dto.getPersonCardId());                }                if (k == 4)                {                    cell2.setCellValue(dto.getTelPhone());                }                if (k == 5)                {                    cell2.setCellValue(dto.getCellPhone());                }                if (k == 6)                {                    cell2.setCellValue(dto.getAddress());                }                if (k == 7)                {                    cell2.setCellValue(dto.getMailCode());                }                if (k == 8)                {                    cell2.setCellValue(dto.getEmail());                }                if (k == 9)                {                    cell2.setCellValue(dto.getViteDate());                }                if (k == 10)                {                    cell2.setCellValue(dto.getSaleGuid());                }                // ////这里要加入要写到EXCEL表格中去的值            }        }        String fullFileName = System.getProperty("java.io.tmpdir") + "\\" + fileNameBuffer.toString();        expDto.setFilepath(fullFileName);        System.out.println(expDto.getFilepath());        FileOutputStream fOut = new FileOutputStream(fullFileName);        workbook.write(fOut);        fOut.flush();        fOut.close();        isSuccess = true;        return isSuccess;    } 


[解决办法]
poi工具包实现生成文件,然后提供下载功能,网上代码很多的
[解决办法]
基本步骤:点击导出-》后台生成excel放在demp临时文件夹--》下载excel

public class Excel {

/**

* 生成EXCEL文件并导出数据

* @param path
* 文件路径
* @param sheetNums
* 创建工作表数量
* @param sheetNames
* 多个工作表对应的名称
* @param titles
* 表头数组
* @param 写入excel中的正文数据
* 表头数组
* @return file
* 返回生成的xls文件
* @throws Exception
*/
public File CreateExcel(String path, int sheetNums, String[] sheetNames, String[] titles, Object[] objects, HttpServletResponse response) throws Exception
{
if(Utils.isNull(path)){
throw new Exception("请指定导出文件的路径!");}
if(Utils.isNull_1(sheetNums)){
throw new Exception("请指定EXCEL工作表数量!");}
if(Utils.isNull(sheetNames)){
throw new Exception("请指定EXCEL工作表名称!");}
if(sheetNums != sheetNames.length){
throw new Exception("工作表数量参数必须与名称参数长度一致!");}
if(Utils.isNull(titles)){
throw new Exception("请为Excel文件指定表头!");}
if(Utils.isNull(objects)){
throw new Exception("请为Excel文件设置正文!");}

// 当前时间字符串组成excel文件名称
String xlsName = path + "tokenlog_" + DateNowStr() + ".xls";
File file = new File(xlsName);

OutputStream ot = new FileOutputStream(file);
// 创建excel文件
WritableWorkbook wwb = Workbook.createWorkbook(ot);

// 设置表头字体
WritableFont wtitlefont = new WritableFont(WritableFont.TIMES, 11, WritableFont.BOLD, false, 
UnderlineStyle.NO_UNDERLINE, Colour.BLACK);
WritableCellFormat titleformat = new WritableCellFormat(wtitlefont);

// 创建工作表
for(int num = 0; num < sheetNums; num++)
{
WritableSheet sheet = wwb.createSheet(sheetNames[num], 0);
// 设置excel表头
int row =0;
int column = 0;
for(String title : titles){
Label label0 = new Label(column, row, title, titleformat);
sheet.addCell(label0);
column ++;
}
// 写入正文
SetSheetCell(sheet, objects[num]);
}

// 提交写入数据并关闭 
wwb.write();
wwb.close();
ot.close();
return file;
}

/**
* 写入正文--可配置
* @param sheet
* @param objects
* @throws RowsExceededException
* @throws WriteException
*/
private void SetSheetCell(WritableSheet sheet, Object objects) throws RowsExceededException, WriteException
{
// 设置正文字体
WritableFont wcellfont = new WritableFont(WritableFont.TIMES, 11, WritableFont.NO_BOLD, false, 
UnderlineStyle.NO_UNDERLINE, Colour.BLACK);
WritableCellFormat cellformat = new WritableCellFormat(wcellfont);
int number = 1001;
HashMap<Integer, String> map = GetXMLConfigProperty.ExcelHeader();
int id = 1;// 记录编号
int row = 1;
int column = 0;
RadiusAuditInfo[] audits = (RadiusAuditInfo[])objects;
for(RadiusAuditInfo audit : audits)
{
if(map.get(number).equals("true")){
Label label1 = new Label(column, row, String.valueOf(id), cellformat);
sheet.addCell(label1); 
column ++;
}
number ++;
if(map.get(number).equals("true")){
Label label2 = new Label(column, row, audit.getResourceid(), cellformat);
sheet.addCell(label2);
column ++;
}
number ++;
if(map.get(number).equals("true")){
Label label3 = new Label(column, row, audit.getResourcename(), cellformat);
sheet.addCell(label3);
column ++;
}
number ++;
if(map.get(number).equals("true")){


Integer type = Integer.parseInt(audit.getLocalname());
String[] localtype = GetXMLConfigProperty.getLocaltype();
String localname = "系统主机";
for (int j = 0; j < localtype.length; j++) {
if (type == j)
localname = localtype[type];
}
Label label4 = new Label(column, row, localname, cellformat);
sheet.addCell(label4);
column ++;
}
number ++;
if(map.get(number).equals("true")){
Label label5 = new Label(column, row, audit.getAddress(), cellformat);
sheet.addCell(label5);
column ++;
}
number ++;
if(map.get(number).equals("true")){
Label label6 = new Label(column, row, audit.getAuthuserid(), cellformat);
sheet.addCell(label6);
column ++;
}
number ++;
if(map.get(number).equals("true")){
Label label7 = new Label(column, row, audit.getId_user(), cellformat);
sheet.addCell(label7);
column ++;
}
number ++;
if(map.get(number).equals("true")){
Label label8 = new Label(column, row, audit.getIsbypass() == 0 ? "否" : "是", cellformat);
sheet.addCell(label8);
column ++;
}
number ++;
if(map.get(number).equals("true")){
Label label9 = new Label(column, row, audit.getEquipno() != null ? audit.getEquipno() : "静态口令", cellformat);
sheet.addCell(label9);
column ++;
}
number ++;
if(map.get(number).equals("true")){
Label label10 = new Label(column, row, audit.getAuthresultcode(), cellformat);
sheet.addCell(label10);
column ++;
}
number ++;
if(map.get(number).equals("true")){
Label label11 = new Label(column, row, audit.getAuthresultcode().equals("00000") ? "认证成功" : "认证失败", cellformat);
sheet.addCell(label11);
column ++;
}
number ++;
if(map.get(number).equals("true")){
Label label12 = new Label(column, row, audit.getRemark(), cellformat);
sheet.addCell(label12);
column ++;
}
row ++;
id ++ ;
column = 0;
number = 1001;
}
}

/**
* 获取当前时间组成的字符串,用来组成excel命令
* @return
*/
public static String DateNowStr(){
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
Date date = new Date();
String dateStr = format.format(date);
String excelName = ((dateStr.replaceAll("-", "")).replaceAll(":", "")).replaceAll("\\s+", "");
return excelName;
}


/**
* 下载文件
* @param filePath
* @param filename
* @param response
* @throws Exception
*/
public static void download(String filePath, String filename, HttpServletResponse response) throws Exception{
// TODO Auto-generated method stub
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
OutputStream fos = null;
InputStream fis = null;

File uploadFile = new File(filePath);
fis = new FileInputStream(uploadFile);
bis = new BufferedInputStream(fis);
fos = response.getOutputStream();
bos = new BufferedOutputStream(fos);
//filePath = URLEncoder.encode(filePath, "UTF-8");

//弹出下载对话框的关键代码
response.setContentType("application/x-download");
response.setHeader("Content-Disposition","attachment;filename="+filename);
int bytesRead = 0;
//都是用输入流进行先读,然后用输出流去写,用的是缓冲输入输出流
byte[] buffer = new byte[8192];
while ((bytesRead = bis.read(buffer, 0, 8192)) != -1) {
try{
bos.write(buffer, 0, bytesRead);


}catch(Exception e){}
}
try{bos.flush();}catch(Exception e){}
try{fis.close();}catch(Exception e){}
try{bis.close();}catch(Exception e){}
try{fos.close();}catch(Exception e){}
try{bos.close();}catch(Exception e){}
}

[解决办法]
别人要预览的功能 
只是下载很容易的 
上面粗略看一下都可以
[解决办法]
预览应该是他报表的功能。。。这个功能是他的程序应该具备的,写一个查询不就可以了。
下载的时候也支持预览。。。。。。
[解决办法]
用jxl和poi jar包都可以导出Excel
下面是jxl包的用法:

Java code
import java.io.File;import java.io.IOException;import java.text.SimpleDateFormat;import java.util.List;import java.util.Random;import com.neusoft.tqms.vo.OrganVO;import com.neusoft.tqms.vo.ParameterVO;import com.neusoft.tqms.vo.TraineesVO;import com.neusoft.tqms.vo.TrainingProjectVO;import com.neusoft.tqms.vo.UserVO;import jxl.Workbook;import jxl.write.Label;import jxl.write.WritableCellFormat;import jxl.write.WritableFont;import jxl.write.WritableSheet;import jxl.write.WritableWorkbook;import jxl.write.WriteException;import jxl.write.biff.RowsExceededException;import jxl.format.Alignment;import jxl.format.Colour;public class Excel {    /**     * 存放文件目录名     */    public String fullDir="";    //定义File对象    private File f=null;    /**     * 定义导出的文件名     */    public String fileName="";    //定义WritableWorkbook对象    private WritableWorkbook book=null;    //定义工作表    private WritableSheet sheet=null;    //标题单元格样式    private WritableCellFormat cellTitle=null;    //头部单元格样式    private WritableCellFormat cellHead=null;    //结果集单元格样式    private WritableCellFormat cellResult=null;    //格式字体    private WritableFont wft=null;    private WritableFont wfh=null;    /**     * 构造函数,初始化Excel     */    public Excel(){        try {            //文件保存目录            String url=Excel.class.getResource("/").toString();            //url:file:/C:/tomcat5.5/webapps/tqms/WEB-INF/classes/            int lastIndex=url.length()-16;            //去掉路径中的"file:/"和"WEB-INF/classes/"            String filePath=url.toString().substring(6,lastIndex)+"export/";                        f=new File(filePath);            //在filePath下创建文件夹            f.mkdirs();            //定义日期格式            SimpleDateFormat sdf = new SimpleDateFormat("yyMMddHHmm");            String nameFirst=sdf.format(new java.util.Date());            Random ra = new Random();            String nameLast = String.valueOf(ra.nextInt(999));            //保存的EXCEL文件名            fileName=nameFirst+nameLast;            //EXCEL存放目录(绝对路径)            fullDir = filePath+fileName+".xls";            //创建目录            f.mkdirs();            //创建WritableWorkbook对象            book=Workbook.createWorkbook(new File(fullDir));            //sheet工作表名称            sheet = book.createSheet("导出数据信息", 0);            //初始化标题单元格            cellTitle = new WritableCellFormat();            //初始化头部单元格            cellHead = new WritableCellFormat();            //初始化结果集单元格            cellResult = new WritableCellFormat();            //定义字体样式            wft = new WritableFont(WritableFont.createFont("宋体"),18,WritableFont.BOLD);            //设置颜色            wft.setColour(Colour.BLUE);            wfh = new WritableFont(WritableFont.createFont("宋体"),14,WritableFont.BOLD);            //为标题和表头分配样式            cellTitle.setFont(wft);            //对齐方式            cellTitle.setAlignment(Alignment.CENTRE);            //头部字体格式            cellHead.setFont(wfh);            //头部对齐格式            cellHead.setAlignment(Alignment.CENTRE);            //正文格式            cellResult.setAlignment(Alignment.CENTRE);            cellResult.setWrap(true);        } catch (IOException e) {            e.printStackTrace();        } catch (WriteException e) {            e.printStackTrace();        }    }    /**     *      * Create date:Apr 4, 2011     * Method name:exportUserData     * Description: [导出数据]     * return:void     */    public void exportUserData(List<UserVO> userList){        int count = userList.size();        try {            //(开始列,开始行,结束列,结束行),合并第一行的第1-8列            sheet.mergeCells(0, 0, 7, 0);            //设置每一列宽度均为20            for(int i=0;i<8;i++){                sheet.setColumnView(i, 20);            }            //标题列            Label la1 = new Label(0,0,"用户信息");            la1.setCellFormat(cellTitle);            Label[] lhead = new Label[8];            //结果集为count行,7列(字段数)            Label[][] lresult = new Label[count][8];            //(列数,行数,单元格内容)            lhead[0] = new Label(0,1,"人员编码");            lhead[1] = new Label(1,1,"机构");            lhead[2] = new Label(2,1,"部门");            lhead[3] = new Label(3,1,"职务");            lhead[4] = new Label(4,1,"姓名");            lhead[5] = new Label(5,1,"性别");            lhead[6] = new Label(6,1,"电话");            lhead[7] = new Label(7,1,"E-MAIL");            for(int i=0;i<count;i++){                UserVO user=userList.get(i);                //(列数,行数,单元格内容)                lresult[i][0] = new Label(0,i+2,user.getUserCode());                //给第二列(机构)赋值                lresult[i][1] = new Label(1,i+2,user.getOrgan());                //给第三列(部门)赋值                lresult[i][2] = new Label(2,i+2,user.getDepartment());                //给第四列(职务)赋值                lresult[i][3] = new Label(3,i+2,user.getPosition());                //给第五列(姓名)赋值                lresult[i][4] = new Label(4,i+2,user.getUserName());                //给第六列(性别)赋值                lresult[i][5] = new Label(5,i+2,user.getUserSex());                //给第七列(电话)赋值                lresult[i][6] = new Label(6,i+2,user.getTelephone());                //给第八列(E-MAIL)赋值                lresult[i][7] = new Label(7,i+2,user.getEmail());                //将字段加入工作表                for(int j=0;j<8;j++){                    //结果集单元格格式                    lresult[i][j].setCellFormat(cellResult);                    //添加到sheet中                    sheet.addCell(lresult[i][j]);                }            }            //将头部标题舔到工作表            sheet.addCell(la1);            for(int k=0;k<8;k++){              //设置标题栏样式                lhead[k].setCellFormat(cellHead);              //将标题舔到工作表                sheet.addCell(lhead[k]);            }            //写入数据            book.write();            //关闭文件            book.close();        } catch (RowsExceededException e) {            e.printStackTrace();        } catch (WriteException e) {            e.printStackTrace();        } catch (IOException e) {            e.printStackTrace();        }    } 

热点排行