java操作Excel

原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。 http://shuyangyang.blog.51cto.com/1685768/1028421

 项目中使用了Struts,现在想要导出一组数据为Excel文件,那么可以这样:(首先需要jxl.jar包,我的是jxl-2.6.jar)

   
   
   
   
  1. /** 
  2.      * 导出报修单 
  3.      * @param mapping 
  4.      * @param form 
  5.      * @param request 
  6.      * @param response 
  7.      * @return 
  8.      * @throws IOException  
  9.      * @throws WriteException  
  10.      */ 
  11.     public ActionForward print(ActionMapping mapping, ActionForm form, 
  12.             HttpServletRequest request, HttpServletResponse response) throws IOException, WriteException { 
  13.         response.reset();//设置页面不缓存 
  14.         response.setContentType("application/vnd.ms-excel");//设置文件流导出格式 
  15.         List expendInfoList=dao.findByProperty("states"1);//此为查询出数据返回为List 
  16.         ExpendablesfixToExcel ef=new ExpendablesfixToExcel(response.getOutputStream());//此为定义的导出EXCEL类,将输出流传入到构造函数中 
  17.         ef.ebfToExcel(expendInfoList);//调用导出类里的导出方法 
  18.         return null
  19.     } 

 以下为导出方法:

 

   
   
   
   
  1. import java.io.IOException; 
  2. import java.io.OutputStream; 
  3. import java.util.List; 
  4.  
  5. import jxl.Workbook; 
  6. import jxl.write.Label; 
  7. import jxl.write.WritableCellFormat; 
  8. import jxl.write.WritableFont; 
  9. import jxl.write.WritableSheet; 
  10. import jxl.write.WritableWorkbook; 
  11. import jxl.write.WriteException; 
  12.  
  13. import com.ghtn.techschool.entitys.Expendablesfix; 
  14.  
  15. public class ExpendablesfixToExcel { 
  16.  
  17.     OutputStream os;//输出流 
  18.     WritableWorkbook wb;//建立Excel文件 
  19.     WritableSheet ws;//sheet名称 
  20.      
  21.     /** 
  22.      * 构造函数 
  23.      * @param os 
  24.      * @throws IOException 
  25.      */ 
  26.     public ExpendablesfixToExcel(OutputStream os)throws IOException{ 
  27.         this.os=os; 
  28.     } 
  29.      
  30.     /** 
  31.      * 导出Excel方法 
  32.      * @param list 
  33.      * @throws WriteException 
  34.      */ 
  35.     public void ebfToExcel(List<expendablesfix> list) throws WriteException{ 
  36.         //设置样式(这个方法算是一个容器,可以放进去好多属性; 
  37.         //第一个: TIMES是字体大小,这里写的是12;第二个: BOLD是判断是否为斜体,选择true时为斜体; 
  38.         //第三个: ARIAL;第四个: UnderlineStyle.NO_UNDERLINE 下划线; 
  39.         //第五个: jxl.format.Colour.RED 字体颜色是红色的) 
  40.         WritableFont font2 = new WritableFont(WritableFont.TIMES, 12
  41.                 WritableFont.BOLD); 
  42.         WritableCellFormat format2 = new WritableCellFormat(font2); 
  43.         format2.setAlignment(jxl.format.Alignment.CENTRE);//设置居中 
  44.         try
  45.             wb=Workbook.createWorkbook(os); 
  46.             ws=wb.createSheet("报修单"0); 
  47.              
  48.             //第一个是代表列数,  
  49.             //第二是代表行数,  
  50.             //第三个代表要写入的内容  
  51.             //第四个是可选项,是输入这个label里面的样式  
  52.             //然后通过写sheet的方法addCell()把内容写进sheet里面。  
  53.             Label labelA=new Label(0,0,"报修人",format2); 
  54.             ws.addCell(labelA); 
  55.              
  56.             Label labelB=new Label(1,0,"所在部门",format2); 
  57.             ws.addCell(labelB); 
  58.              
  59.             Label labelC=new Label(2,0,"报修日期",format2); 
  60.             ws.addCell(labelC); 
  61.              
  62.             Label labelD=new Label(3,0,"消耗品名称",format2); 
  63.             ws.addCell(labelD); 
  64.              
  65.             Label labelF=new Label(4,0,"消耗品报修描述",format2); 
  66.             ws.addCell(labelF); 
  67.  
  68.             writeRecruit(list);//获取动态内容的方法 
  69.             wb.write();//写入 
  70.             wb.close();//关闭 
  71.         }catch(Exception e){ 
  72.             e.printStackTrace(); 
  73.         } 
  74.     } 
  75.      
  76.     private void writeRecruit(List<expendablesfix> stuList){ 
  77.         if(stuList.size()==0){ 
  78.             return ; 
  79.         } 
  80.         for(int i=0;i<stuList.size();i++){ 
  81.             String person="";//报修人 
  82.             if(null!=stuList.get(i).getBxr()){ 
  83.                 person=stuList.get(i).getBxr().toString(); 
  84.             } 
  85.             Label labelBxr = new Label(0,i+1,person); 
  86.              
  87.             String dept="";//所在部门 
  88.             if(null!=stuList.get(i).getBm()){ 
  89.                 dept=stuList.get(i).getBm().toString(); 
  90.             } 
  91.             Label labelBm=new Label(1,i+1,dept); 
  92.              
  93.             String date="";//报修日期 
  94.             if(null!=stuList.get(i).getBdate()){ 
  95.                 date=stuList.get(i).getBdate().toString(); 
  96.             } 
  97.             Label labelBdate=new Label(2,i+1,date); 
  98.              
  99.             String name="";//消耗品名称 
  100.             if(null!=stuList.get(i).getExpendablesname()){ 
  101.                 name=stuList.get(i).getExpendablesname().toString(); 
  102.             } 
  103.             Label labelName=new Label(3,i+1,name); 
  104.              
  105.             String descrition="";//消耗品报修描述 
  106.             if(null!=stuList.get(i).getBxzk()){ 
  107.                 descrition=stuList.get(i).getBxzk().toString(); 
  108.             } 
  109.             Label labelDescrition=new Label(4,i+1,descrition); 
  110.              
  111.             /* 
  112.              * 统一添加到列表中 
  113.              * */ 
  114.             try
  115.                 ws.addCell(labelBxr); 
  116.                 ws.addCell(labelBm); 
  117.                 ws.addCell(labelBdate); 
  118.                 ws.addCell(labelName); 
  119.                 ws.addCell(labelDescrition); 
  120.             }catch(Exception e){ 
  121.                 e.printStackTrace(); 
  122.             } 
  123.         } 
  124.     } 
  125. </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);

 

下面是一段网友操作的例子:

我写的练习代码如下:(注意里面的图片替换成自己的就可以了)

 

   
   
   
   
  1. import java.io.*; 
  2. import java.util.Random; 
  3. import java.util.Date; 
  4. import jxl.*; 
  5. import jxl.format.UnderlineStyle; 
  6. import jxl.write.*; 
  7. import jxl.write.Number; 
  8. import jxl.write.Boolean; 
  9. public class CreateXL 
  10.     public CreateXL() 
  11.     { 
  12.   
  13.     } 
  14.     public static void main(String[] args) 
  15.     { 
  16.         //读Excel 
  17.         //CreateXL.readExcel("d:/abc.xls"); 
  18.   
  19.         //创建新的Excel 
  20.         CreateXL.writeExcel("d:/new.xls"); 
  21.   
  22.         //更新Excel 
  23.         CreateXL.updateExcel("d:/new.xls"); 
  24.   
  25.     } 
  26.     //jxl暂时不提供修改已经存在的数据表,这里通过一个小办法来达到这个目的,不适合大型数据更新! 
  27.     //这里是通过覆盖原文件来更新的. 
  28.     public static void updateExcel(String filePath) 
  29.     { 
  30.         try 
  31.         { 
  32.             Workbook rwb = Workbook.getWorkbook(new File(filePath)); 
  33.             WritableWorkbook wwb = Workbook.createWorkbook(new File("d:/new.xls"),rwb);//copy 
  34.             WritableSheet ws = wwb.getSheet(0); 
  35.             WritableCell wc = ws.getWritableCell(0,0); 
  36.             //判断单元格的类型,做出相应的转换 
  37.             Label label = (Label)wc; 
  38.             label.setString("The value has been modified"); 
  39.             wwb.write(); 
  40.             wwb.close(); 
  41.             rwb.close(); 
  42.         } 
  43.         catch(Exception e) 
  44.         { 
  45.             e.printStackTrace(); 
  46.         } 
  47.     } 
  48.   
  49.     public static void writeExcel(String filePath) 
  50.     { 
  51.         try 
  52.         { 
  53.             //创建工作薄 
  54.             WritableWorkbook wwb = Workbook.createWorkbook(new File(filePath)); 
  55.   
  56.             //创建工作表 
  57.             WritableSheet ws = wwb.createSheet("Sheet1",0); 
  58.             //System.out.println("create ok!"); 
  59.   
  60.             //添加标签文本 
  61.             Random rnd=new Random((new Date()).getTime()); 
  62.             int forNumber=rnd.nextInt(100); 
  63.             for(int i=0;i<forNumber;i++) 
  64.             { 
  65.                 ws.addCell(new Number(rnd.nextInt(50),rnd.nextInt(50),rnd.nextInt(1000))); 
  66.             } 
  67.   
  68.             //添加图片(注意此处jxl暂时只支持png格式的图片) 
  69.       //0,1分别代表x,y    2,5代表宽和高占的单元格数 
  70.       ws.addImage(new WritableImage(0,1,2,5,new File("png//cs.png"))); 
  71.   
  72.             wwb.write(); 
  73.       wwb.close(); 
  74.         } 
  75.         catch(Exception e) 
  76.         { 
  77.             System.out.println(e.toString()); 
  78.         } 
  79.     } 
  80.     public static void readExcel(String filePath) 
  81.     { 
  82.         /** 
  83.          *后续考虑问题,比如Excel里面的图片以及其他数据类型的读取 
  84.          **/ 
  85.         try 
  86.         { 
  87.             InputStream is=new FileInputStream(filePath); 
  88.             //声名一个工作薄 
  89.             Workbook rwb = Workbook.getWorkbook(is); 
  90.   
  91.             //获得工作薄的个数 
  92.             //rwb.getNumberOfSheets(); 
  93.   
  94.             //在Excel文档中,第一张工作表的缺省索引是0 
  95.             Sheet st = rwb.getSheet("Sheet1"); 
  96.   
  97.             //通用的获取cell值的方式,getCell(int column, int row) 行和列 
  98.             int Rows=st.getRows(); 
  99.             int Cols=st.getColumns(); 
  100.             System.out.println("当前工作表的名字:"+st.getName()); 
  101.             System.out.println("总行数:"+Rows); 
  102.             System.out.println("总列数:"+Cols); 
  103.   
  104.             Cell c; 
  105.             for(int i=0;i<Cols;++i) 
  106.             { 
  107.                 for(int j=0;j<Rows;++j) 
  108.                 { 
  109.                     //getCell(Col,Row)获得单元格的值 
  110.                     System.out.print((st.getCell(i,j)).getContents()+"/t"); 
  111.                 } 
  112.                 System.out.print("/n"); 
  113.             } 
  114.             //操作完成时,关闭对象,释放占用的内存空间 
  115.             rwb.close(); 
  116.         } 
  117.         catch(Exception e) 
  118.         { 
  119.             e.printStackTrace(); 
  120.         } 
  121.     } 
  122. }  

 

你可能感兴趣的:(java,超链接,Excel,文章)