项目中使用了Struts,现在想要导出一组数据为Excel文件,那么可以这样:(首先需要jxl.jar包,我的是jxl-2.6.jar)
-
-
-
-
-
-
-
-
-
-
- public ActionForward print(ActionMapping mapping, ActionForm form,
- HttpServletRequest request, HttpServletResponse response) throws IOException, WriteException {
- response.reset();
- response.setContentType("application/vnd.ms-excel");
- List expendInfoList=dao.findByProperty("states", 1);
- ExpendablesfixToExcel ef=new ExpendablesfixToExcel(response.getOutputStream());
- ef.ebfToExcel(expendInfoList);
- return null;
- }
以下为导出方法:
- import java.io.IOException;
- import java.io.OutputStream;
- import java.util.List;
-
- 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 com.ghtn.techschool.entitys.Expendablesfix;
-
- public class ExpendablesfixToExcel {
-
- OutputStream os;
- WritableWorkbook wb;
- WritableSheet ws;
-
-
-
-
-
-
- public ExpendablesfixToExcel(OutputStream os)throws IOException{
- this.os=os;
- }
-
-
-
-
-
-
- public void ebfToExcel(List<expendablesfix> list) throws WriteException{
-
-
-
-
- WritableFont font2 = new WritableFont(WritableFont.TIMES, 12,
- WritableFont.BOLD);
- WritableCellFormat format2 = new WritableCellFormat(font2);
- format2.setAlignment(jxl.format.Alignment.CENTRE);
- try{
- wb=Workbook.createWorkbook(os);
- ws=wb.createSheet("报修单", 0);
-
-
-
-
-
-
- Label labelA=new Label(0,0,"报修人",format2);
- ws.addCell(labelA);
-
- Label labelB=new Label(1,0,"所在部门",format2);
- ws.addCell(labelB);
-
- Label labelC=new Label(2,0,"报修日期",format2);
- ws.addCell(labelC);
-
- Label labelD=new Label(3,0,"消耗品名称",format2);
- ws.addCell(labelD);
-
- Label labelF=new Label(4,0,"消耗品报修描述",format2);
- ws.addCell(labelF);
-
- writeRecruit(list);
- wb.write();
- wb.close();
- }catch(Exception e){
- e.printStackTrace();
- }
- }
-
- private void writeRecruit(List<expendablesfix> stuList){
- if(stuList.size()==0){
- return ;
- }
- for(int i=0;i<stuList.size();i++){
- String person="";
- if(null!=stuList.get(i).getBxr()){
- person=stuList.get(i).getBxr().toString();
- }
- Label labelBxr = new Label(0,i+1,person);
-
- String dept="";
- if(null!=stuList.get(i).getBm()){
- dept=stuList.get(i).getBm().toString();
- }
- Label labelBm=new Label(1,i+1,dept);
-
- String date="";
- if(null!=stuList.get(i).getBdate()){
- date=stuList.get(i).getBdate().toString();
- }
- Label labelBdate=new Label(2,i+1,date);
-
- String name="";
- if(null!=stuList.get(i).getExpendablesname()){
- name=stuList.get(i).getExpendablesname().toString();
- }
- Label labelName=new Label(3,i+1,name);
-
- String descrition="";
- if(null!=stuList.get(i).getBxzk()){
- descrition=stuList.get(i).getBxzk().toString();
- }
- Label labelDescrition=new Label(4,i+1,descrition);
-
-
-
-
- try{
- ws.addCell(labelBxr);
- ws.addCell(labelBm);
- ws.addCell(labelBdate);
- ws.addCell(labelName);
- ws.addCell(labelDescrition);
- }catch(Exception e){
- e.printStackTrace();
- }
- }
- }
- }
- </expendablesfix></expendablesfix>
写入数据的时候注意的格式
(1)添加的字体样式 jxl.write.WritableFont wf = new jxl.write.WritableFont(WritableFont.TIMES, 18, WritableFont.BOLD, true);
WritableFont()方法里参数说明:
这个方法算是一个容器,可以放进去好多属性
第一个: TIMES是字体大小,他写的是18
第二个: BOLD是判断是否为斜体,选择true时为斜体
第三个: ARIAL
第四个: UnderlineStyle.NO_UNDERLINE 下划线
第五个: jxl.format.Colour.RED 字体颜色是红色的
jxl.write.WritableCellFormat wcfF = new jxl.write.WritableCellFormat(wf);
jxl.write.Label labelC = new jxl.write.Label(0, 0, "This is a Label cell",wcfF);
ws.addCell(labelC);
在Label()方法里面有三个参数
第一个是代表列数,
第二是代表行数,
第三个代表要写入的内容
第四个是可选项,是输入这个label里面的样式
然后通过写sheet的方法addCell()把内容写进sheet里面。
(2)添加带有formatting的Number对象 jxl.write.NumberFormat nf = new jxl.write.NumberFormat("#.##");
(3)添加Number对象 (3.1)显示number对象数据的格式 jxl.write.NumberFormat nf = new jxl.write.NumberFormat("#.##");
jxl.write.WritableCellFormat wcfN = new jxl.write.WritableCellFormat(nf);
jxl.write.Number labelNF = new jxl.write.Number(1, 1, 3.1415926, wcfN);
ws.addCell(labelNF);
Number()方法参数说明:
前两上表示输入的位置
第三个表示输入的内容
(4)添加Boolean对象 jxl.write.Boolean labelB = new jxl.write.Boolean(0, 2, false);
ws.addCell(labelB);
(5)添加DateTime对象 jxl.write.DateTime labelDT = new jxl.write.DateTime(0, 3, new java.util.Date());
ws.addCell(labelDT);
DateTime()方法的参数说明
前两个表示输入的位置
第三个表示输入的当前时间
(6)添加带有formatting的DateFormat对象 这个显示当前时间的所有信息,包括年月日小时分秒
jxl.write.DateFormat df = new jxl.write.DateFormat("dd MM yyyy hh:mm:ss");
jxl.write.WritableCellFormat wcfDF = new jxl.write.WritableCellFormat(df);
jxl.write.DateTime labelDTF = new jxl.write.DateTime(1, 3, new java.util.Date(), wcfDF);
ws.addCell(labelDTF);
(7)添加带有字体颜色Formatting的对象
jxl.write.WritableFont wfc = new jxl.write.WritableFont(WritableFont.ARIAL, 10, WritableFont.NO_BOLD, false,UnderlineStyle.NO_UNDERLINE, jxl.format.Colour.RED);
jxl.write.WritableCellFormat wcfFC = new jxl.write.WritableCellFormat(wfc);
import="jxl.format.*
jxl.write.WritableFont wfc = new jxl.write.WritableFont(WritableFont.ARIAL,20,WritableFont.BOLD,false,UnderlineStyle.NO_UNDERLINE,jxl.format.Colour.GREEN);
(8)设置单元格样式
jxl.write.WritableCellFormat wcfFC = new jxl.write.WritableCellFormat(wfc);
wcfFC.setBackGround(jxl.format.Colour.RED);//设置单元格的颜色为红色
wcfFC = new jxl.write.Label(6,0,"i love china",wcfFC);
下面是一段网友操作的例子:
我写的练习代码如下:(注意里面的图片替换成自己的就可以了)
- import java.io.*;
- import java.util.Random;
- import java.util.Date;
- import jxl.*;
- import jxl.format.UnderlineStyle;
- import jxl.write.*;
- import jxl.write.Number;
- import jxl.write.Boolean;
- public class CreateXL
- {
- public CreateXL()
- {
-
- }
- public static void main(String[] args)
- {
-
-
-
-
- CreateXL.writeExcel("d:/new.xls");
-
-
- CreateXL.updateExcel("d:/new.xls");
-
- }
-
-
- public static void updateExcel(String filePath)
- {
- try
- {
- Workbook rwb = Workbook.getWorkbook(new File(filePath));
- WritableWorkbook wwb = Workbook.createWorkbook(new File("d:/new.xls"),rwb);
- WritableSheet ws = wwb.getSheet(0);
- WritableCell wc = ws.getWritableCell(0,0);
-
- Label label = (Label)wc;
- label.setString("The value has been modified");
- wwb.write();
- wwb.close();
- rwb.close();
- }
- catch(Exception e)
- {
- e.printStackTrace();
- }
- }
-
- public static void writeExcel(String filePath)
- {
- try
- {
-
- WritableWorkbook wwb = Workbook.createWorkbook(new File(filePath));
-
-
- WritableSheet ws = wwb.createSheet("Sheet1",0);
-
-
-
- Random rnd=new Random((new Date()).getTime());
- int forNumber=rnd.nextInt(100);
- for(int i=0;i<forNumber;i++)
- {
- ws.addCell(new Number(rnd.nextInt(50),rnd.nextInt(50),rnd.nextInt(1000)));
- }
-
-
-
- ws.addImage(new WritableImage(0,1,2,5,new File("png//cs.png")));
-
- wwb.write();
- wwb.close();
- }
- catch(Exception e)
- {
- System.out.println(e.toString());
- }
- }
- public static void readExcel(String filePath)
- {
-
-
-
- try
- {
- InputStream is=new FileInputStream(filePath);
-
- Workbook rwb = Workbook.getWorkbook(is);
-
-
-
-
-
- Sheet st = rwb.getSheet("Sheet1");
-
-
- int Rows=st.getRows();
- int Cols=st.getColumns();
- System.out.println("当前工作表的名字:"+st.getName());
- System.out.println("总行数:"+Rows);
- System.out.println("总列数:"+Cols);
-
- Cell c;
- for(int i=0;i<Cols;++i)
- {
- for(int j=0;j<Rows;++j)
- {
-
- System.out.print((st.getCell(i,j)).getContents()+"/t");
- }
- System.out.print("/n");
- }
-
- rwb.close();
- }
- catch(Exception e)
- {
- e.printStackTrace();
- }
- }
- }
本文转自shyy8712872 51CTO博客,原文链接:http://blog.51cto.com/shuyangyang/1028421,如需转载请自行联系原作者