当前位置: 代码迷 >> Java Web开发 >> 怎么用jxl实现导出Excel表,客户端可以导出并保存在自己电脑
  详细解决方案

怎么用jxl实现导出Excel表,客户端可以导出并保存在自己电脑

热度:201   发布时间:2016-04-17 00:52:55.0
如何用jxl实现导出Excel表,客户端可以导出并保存在自己电脑。
用jxl做了个查询并将结果通过Excel导出的功能,但对输入输出流那一部分知识掌握不够,一直无法完成客户端查询导出并保存的功能。
Java code
package com.util;import java.io.BufferedInputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.OutputStream;import java.io.IOException;import java.util.HashMap;import java.util.Vector;import javax.servlet.ServletContext;import javax.servlet.ServletOutputStream;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;import jxl.Workbook;import jxl.WorkbookSettings;import jxl.format.Colour;import jxl.format.UnderlineStyle;import jxl.read.biff.BiffException;import jxl.write.Label;import jxl.write.WritableFont;import jxl.write.WritableWorkbook;import jxl.write.WriteException;import jxl.write.biff.RowsExceededException;import com.xamedical.base.Prescription;import com.xamedical.common.Format;import com.xamedical.common.Globa;import com.xamedical.common.UID;import com.xamedical.system.District;import com.xamedical.system.SysUserUnit;import com.xamedical.system.SysPara;import com.xamedical.system.Unit;public class Excel {    private Globa globa;    private HttpServletRequest request;    private HttpServletResponse response;    private HttpSession session;    private ServletContext application;    public Excel(Globa globa) {        this.globa = globa;        this.request = globa.request;        this.response = globa.response;        this.session = globa.session;        this.application = globa.application;    }        public void output() {        String strFileId = UID.getID();        //File fExcel = new File(application.getRealPath("") + "\\excel\\" + strFileId + ".xls");        String filename = "方剂.xls"        try {                                    //输出                        OutputStream os = response.getOutputStream();            response.setHeader( "Content-Disposition", "attachment;filename="  + new String(filename.getBytes(),"ISO8859-1"));            response.setContentType("application/msexcel");                             WritableWorkbook  wwb = Workbook.createWorkbook(os);            jxl.write.WritableSheet ws = wwb.createSheet("复合查询结果", 0);            WritableFont wfSongBlack = new WritableFont(WritableFont.createFont("宋体"), 12, WritableFont.NO_BOLD,                     false, UnderlineStyle.NO_UNDERLINE, Colour.BLACK);            jxl.write.WritableCellFormat wcfSongBlack = new jxl.write.WritableCellFormat(wfSongBlack);//获取需要导出的方剂记录集合            Vector<Prescription> content = (Vector<Prescription>)session.getAttribute("content");            try {                Label l;                String composition;                String[] array;                for(int i=0;i<content.size();i++) {                    l = new Label(0,i,content.get(i).getStrName(),wcfSongBlack);                    ws.addCell(l);                    //分割方剂组成字符串,得到中药的一个字符串数组。                    composition = content.get(i).getStrComposition();                    composition = composition.replaceAll(",|。", "");                    array = composition.split("\\d+g|.钱|.两");                        for(int j=0;j<array.length;j++) {                            l = new Label(j+1,i,array[j],wcfSongBlack);                            ws.addCell(l);                        }                    }                            } catch(WriteException we) {                we.printStackTrace();            }                        wwb.write();//写入excel对象            wwb.close();//关闭可写入的Excel对象            os.close();                                }catch (IOException ioe) {            ioe.printStackTrace();        }            }}


输出结果全是乱码(R_>乨lS_R_抪臑獋}v/冇?)Y[r)Y臇輂巶竒^g3*N?B),而且没有按设置好的单元格输出。
  相关解决方案