评论

收藏

[办公软件] java操作Excel(从我的CSDN搬过来的)

电脑办公 电脑办公 发布于:2021-06-24 13:13 | 阅读数:547 | 评论:0

项目中使用了Struts,现在想要导出一组数据为Excel文件,那么可以这样:(首先需要jxl.jar包,我的是jxl-2.6.jar)
/**     导出报修单     @param mapping    * @param form     @param request     @param response    * @return     @throws IOException    @throws WriteException     */   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);//此为查询出数据返回为List     ExpendablesfixToExcel ef=new ExpendablesfixToExcel(response.getOutputStream());//此为定义的导出EXCEL类,将输出流传入到构造函数中     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;//建立Excel文件   WritableSheet ws;//sheet名称      /     构造函数     @param os    * @throws IOException    */   public ExpendablesfixToExcel(OutputStream os)throws IOException{     this.os=os;   }      /     导出Excel方法     @param list    * @throws WriteException    /   public void ebfToExcel(List<expendablesfix> list) throws WriteException{     //设置样式(这个方法算是一个容器,可以放进去好多属性;     //第一个: TIMES是字体大小,这里写的是12;第二个: BOLD是判断是否为斜体,选择true时为斜体;     //第三个: ARIAL;第四个: UnderlineStyle.NO_UNDERLINE 下划线;     //第五个: jxl.format.Colour.RED 字体颜色是红色的)     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里面的样式        //然后通过写sheet的方法addCell()把内容写进sheet里面。        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)   {     //读Excel     //CreateXL.readExcel("d:/abc.xls");       //创建新的Excel     CreateXL.writeExcel("d:/new.xls");       //更新Excel     CreateXL.updateExcel("d:/new.xls");     }   //jxl暂时不提供修改已经存在的数据表,这里通过一个小办法来达到这个目的,不适合大型数据更新!   //这里是通过覆盖原文件来更新的.   public static void updateExcel(String filePath)   {     try     {       Workbook rwb = Workbook.getWorkbook(new File(filePath));       WritableWorkbook wwb = Workbook.createWorkbook(new File("d:/new.xls"),rwb);//copy       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);       //System.out.println("create ok!");         //添加标签文本       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)));       }         //添加图片(注意此处jxl暂时只支持png格式的图片)     //0,1分别代表x,y  2,5代表宽和高占的单元格数     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)   {     /      *后续考虑问题,比如Excel里面的图片以及其他数据类型的读取      /     try     {       InputStream is=new FileInputStream(filePath);       //声名一个工作薄       Workbook rwb = Workbook.getWorkbook(is);         //获得工作薄的个数       //rwb.getNumberOfSheets();         //在Excel文档中,第一张工作表的缺省索引是0       Sheet st = rwb.getSheet("Sheet1");         //通用的获取cell值的方式,getCell(int column, int row) 行和列       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)         {           //getCell(Col,Row)获得单元格的值           System.out.print((st.getCell(i,j)).getContents()+"/t");         }         System.out.print("/n");       }       //操作完成时,关闭对象,释放占用的内存空间       rwb.close();     }     catch(Exception e)     {       e.printStackTrace();     }   } }
关注下面的标签,发现更多相似文章