jxl生成表格的具体操作

  1. import java.io.File;  
  2. import java.util.ArrayList;  
  3. import java.util.Date;  
  4. import java.util.List;  
  5.   
  6. import jxl.Workbook;  
  7. import jxl.format.Alignment;  
  8. import jxl.format.Border;  
  9. import jxl.format.BorderLineStyle;  
  10. import jxl.format.Colour;  
  11. import jxl.format.PageOrientation;  
  12. import jxl.format.PaperSize;  
  13. import jxl.format.UnderlineStyle;  
  14. import jxl.format.VerticalAlignment;  
  15. import jxl.write.DateFormat;  
  16. import jxl.write.DateTime;  
  17. import jxl.write.Label;  
  18. import jxl.write.Number;  
  19. import jxl.write.NumberFormat;  
  20. import jxl.write.WritableCellFeatures;  
  21. import jxl.write.WritableCellFormat;  
  22. import jxl.write.WritableFont;  
  23. import jxl.write.WritableImage;  
  24. import jxl.write.WritableSheet;  
  25. import jxl.write.WritableWorkbook;  
  26.   
  27. public class JXLClass {  
  28.     public static String savePath = "D:"+java.io.File.separator+"saveDir";//文档所在目录  
  29.       
  30.     /** 
  31.      * 练习使用JXL生成Excel文件 
  32.      */  
  33.     public static void main(String[] args) {  
  34.          String fileName = System.currentTimeMillis()+".xls";//以当前时间作为Excel的名称:2003版本的  
  35.          String filePath = savePath+ java.io.File.separator + fileName;  
  36.         System.out.println("文件路径:"+filePath);  
  37.         File excelFile = new File(filePath);//文件所在具体路径  
  38.           
  39.         createExcel(excelFile);  
  40.   
  41.     }  
  42.       
  43.     public static void createExcel(File file){  
  44.         System.out.println("生成Excel文件开始了!");  
  45.         try {  
  46.             String[] title={"序号","姓名","年龄","工资","出生日期","婚否","头像"};//标题数组  
  47.               
  48.             //1、创建可以写入的Excel工作簿  
  49.             WritableWorkbook workBook = Workbook.createWorkbook(file);  
  50.               
  51.             //2、创建工作表  
  52.             //createSheet(param1,param2):param1为当前工作表名称,param2表示是第几张表,从0开始  
  53.             WritableSheet sheet = workBook.createSheet("工作表1", 0);//0表示第一张表  
  54.             WritableSheet sheet2 = workBook.createSheet("工作表2", 1);  
  55.             WritableSheet sheet3 = workBook.createSheet("工作表3", 2);  
  56.               
  57.             //3、设置打印属性  
  58.             sheet.getSettings().setOrientation(PageOrientation.LANDSCAPE) ;// 设置为横向打印  
  59.             sheet.getSettings().setPaperSize(PaperSize.A4);//设置纸张A4  
  60.             sheet.getSettings().setFitHeight(297);//打印区高度  
  61.             sheet.getSettings().setFitWidth(210) ;//打印区宽度  
  62.             // 设置边距              
  63.             sheet.getSettings().setTopMargin(0.5) ;  
  64.             sheet.getSettings().setBottomMargin(0.3) ;  
  65.             sheet.getSettings().setLeftMargin(0.1) ;  
  66.             sheet.getSettings().setRightMargin(0.1) ;  
  67.             //设置页脚  
  68.             sheet.getSettings().getFooter().getCentre().appendPageNumber() ;// 为页脚添加页数  
  69.             sheet.getSettings().setFooterMargin(0.07) ;// 设置页脚边距(下)  
  70.              
  71.             //4、设置保护,并加密码 锁定的Cell才会起作用  
  72.             //启用保护并设置密码找回,生成的Excel为只读,在”审阅-更改-撤销工作表保护“模块可取消,取消时要求输入下面设置的密码  
  73.             sheet.getSettings().setProtected(true) ;//启用保护  
  74.             sheet.getSettings().setPassword("123456") ;//设置保护密码  
  75.             // 设置打印标题行  
  76.             sheet.getSettings().setPrintHeaders(true) ;// 启用打印头信息  
  77.               
  78.             //5、合并单元格  
  79.             //mergeCells(int x,int y,int m,int n):合并单元格,表示将  
  80.             //从第x+1列,y+1行到m+1列,n+1行合并 (四个点定义了两个坐标,左上角和右下角)  
  81.             //结果是合并了m-x+1行,n-y+1列,两者乘积就是合并的单元格数量。  
  82.             sheet.mergeCells(0,0,title.length-1,0);//工作表1的第一行合并,显示标题  
  83.             //setRowView(int i,int height); 指定第i行的高度(这个高度好像得是Excel中的20倍,也就是这里设置成200,Excel中高度差不多为10)  
  84.             //有三个参数时,第三个参数表示当前行是否隐藏(当第三个参数为true,高度即便再高也显示不出来。且默认为true)。若是只写两个参数,当前会被隐藏  
  85.             sheet.setRowView(0,500,false);//第一行为合并性的标题行,第二行开始显示title中的内容,第三行为文本内容  
  86.   
  87.             //6、设置标题的样式  
  88.             //WritableFont()参数依次为:字体(宋体、楷体等),大小,字形(常规、加粗等),  
  89.             //是否倾斜(true表示倾斜,false表示不倾斜),下划线样式(这里设置的双下划线),字体颜色(这里为红色)  
  90.             WritableFont titleFont = new WritableFont(WritableFont.ARIAL,14,WritableFont.BOLD,  
  91.                                 true,UnderlineStyle.DOUBLE,Colour.RED);//字体样式定义  
  92.             WritableCellFormat cellFormatForTitle = new WritableCellFormat(titleFont);//单元格样式定义  
  93.             cellFormatForTitle.setAlignment(jxl.format.Alignment.CENTRE); //设置水平方向对齐方式  
  94.             cellFormatForTitle.setVerticalAlignment(VerticalAlignment.CENTRE);//设置垂直方向对齐方式  
  95.             cellFormatForTitle.setWrap(true);//是否自动换行  
  96.             cellFormatForTitle.setBorder(Border.ALL, BorderLineStyle.THIN);//设置边框样式  
  97.             cellFormatForTitle.setBackground(Colour.LIGHT_GREEN);//设置背景色  
  98.             //cellFormat.setIndentation(2);//设置缩进字符个数  
  99.                
  100.             //7、为第一行合并的单元格设置标题  
  101.             Label lab = new Label(0,0,"JXL练习",cellFormatForTitle);  
  102.             //Label(int x,int y,String content,WritableCellFormat wcf):指明单元格的位置和内容,四个参数依次为;第几列、第几行、内容、样式  
  103.             sheet.addCell(lab);//将单元格添加到sheet中  
  104.               
  105.             //8、将title写到Excel中  
  106.             for(int i=0;i<title.length;i++){  
  107.                 //setColumnView(int i,int width):指定第i列的宽度  
  108.                 sheet.setColumnView(i, 20);//设置单元格的宽度:这个宽度与Excel里面的宽度差不多  
  109.                 Label label = new Label(i,1,title[i],cellFormatForTitle);//在第二行中添加文本类单元格  
  110.                 sheet.addCell(label);//将标题添加到sheet中  
  111.             }  
  112.             sheet.setRowView(1,500,false);//标题行行高25  
  113.               
  114.             //9、设置正文的样式  
  115.             //Arial是一套随同多套微软应用软件所分发的无衬线体TrueType字型  
  116.             WritableFont bodyFont = new WritableFont(WritableFont.ARIAL,12,WritableFont.NO_BOLD,  
  117.                     false,UnderlineStyle.NO_UNDERLINE,Colour.BLACK);//字体样式定义:ARIAL,12号,不加粗,不倾斜,没有下划线,黑色  
  118.             WritableCellFormat cellFormatForBody = new WritableCellFormat(bodyFont);//单元格样式定义  
  119.             cellFormatForBody.setAlignment(jxl.format.Alignment.CENTRE); //设置水平方向对齐方式  
  120.             cellFormatForBody.setVerticalAlignment(VerticalAlignment.CENTRE);//设置垂直方向对齐方式  
  121.             cellFormatForBody.setWrap(true);//是否自动换行  
  122.             cellFormatForBody.setBorder(Border.ALL, BorderLineStyle.THIN);//设置边框样式  
  123.             cellFormatForBody.setBackground(Colour.LIGHT_GREEN);//设置背景色  
  124.               
  125.             //10、给正文添加内容  
  126.             //第一列,序号,数字类型,Number():参数依次为:第几列,第几行,显示内容,样式  
  127.             Number number = new Number(0,2,1,cellFormatForBody);  
  128.             sheet.addCell(number);  
  129.               
  130.             //第二列,姓名,基本文字类型  
  131.             Label name = new Label(1,2,"张三",cellFormatForBody);  
  132.             sheet.addCell(name);  
  133.               
  134.             //第三列,年龄,数字类型  
  135.             Number age = new Number(2,2,10,cellFormatForBody);  
  136.             sheet.addCell(age);  
  137.               
  138.             //第四列,工资,带有格式的数字类型  
  139.             NumberFormat nf = new NumberFormat("#.##");//格式  
  140.             WritableCellFormat wcfN = new WritableCellFormat(nf);  
  141.             //设置样式  
  142.             wcfN.setAlignment(Alignment.CENTRE); //设置水平方向对齐方式  
  143.             wcfN.setVerticalAlignment(VerticalAlignment.CENTRE);//设置垂直方向对齐方式  
  144.             wcfN.setWrap(true);//是否自动换行  
  145.             wcfN.setBorder(Border.ALL, BorderLineStyle.THIN);//设置边框样式  
  146.             wcfN.setBackground(Colour.LIGHT_GREEN);//设置背景色  
  147.             Number salary = new Number(3,2,3000.1415926,wcfN);  
  148.             sheet.addCell(salary);  
  149.                   
  150.             //第五列,出生日期,时间类型  
  151.             DateFormat df = new DateFormat("yyyy-MM-dd hh:mm:ss");//定义时间格式  
  152.             WritableCellFormat wcfDF = new WritableCellFormat(df);  
  153.             //设置样式  
  154.             wcfDF.setAlignment(Alignment.CENTRE); //设置水平方向对齐方式  
  155.             wcfDF.setVerticalAlignment(VerticalAlignment.CENTRE);//设置垂直方向对齐方式  
  156.             wcfDF.setWrap(true);//是否自动换行  
  157.             wcfDF.setBorder(Border.ALL, BorderLineStyle.THIN);//设置边框样式  
  158.             wcfDF.setBackground(Colour.LIGHT_GREEN);//设置背景色  
  159.             DateTime birthday = new DateTime(4,2,new Date(),wcfDF);  
  160.             //添加值  
  161.             sheet.addCell(birthday);  
  162.               
  163.             //第六列,婚否,boolean类型  
  164.             //Boolean marry = new Boolean(5, 2, false, cellFormatForBody);  
  165.             //sheet.addCell(marry);  
  166.             //下拉选的格式,只能从给定的数据中选择  
  167.             Label lblColumn  = new Label(5, 2, "请选择",cellFormatForBody);//生成一个待选择的标签  
  168.             WritableCellFeatures wcf2 = new WritableCellFeatures();//待选择集合对象,这是jxl的对象  
  169.             List angerlist = new ArrayList();  
  170.             angerlist.add("已婚");  
  171.             angerlist.add("未婚");  
  172.             wcf2.setDataValidationList(angerlist);//设置jxl对象要选择的集合  
  173.             lblColumn.setCellFeatures(wcf2);//设置到单元格里面去  
  174.             sheet.addCell(lblColumn);//加入sheet表格中  
  175.                   
  176.             //第七列,头像,图片类型:只支持png文件  
  177.             //WritableImage():参数依次为:第几列,第几行,图片需要占据几列,图片需要占据几行,图形文件  
  178.             System.out.print("图片路径:"+(savePath+ java.io.File.separator+"1.png"));  
  179.             WritableImage photo=new WritableImage(6,2,1,1,new File(savePath+ java.io.File.separator+"1.png"));  
  180.             sheet.addImage(photo);  
  181.               
  182.             sheet.setRowView(2,400,false);//正文行高20  
  183.               
  184.             //11、在Excel中写入数据并关闭文件  
  185.             workBook.write();  
  186.             workBook.close();  
  187.               
  188.         } catch (Exception e) {  
  189.             e.printStackTrace();  
  190.         }  
  191.     }  
  192. }  
  193. 说明:
  194. 1、启用了密码保护功能,所以生成的Excel不能编辑,Excel2007可以在”审阅-更改-撤销工作表保护“模块取消保护,取消时要求输入下面设置的密码123456

    1. sheet.getSettings().setProtected(true) ;//启用保护  
    2. sheet.getSettings().setPassword("123456") ;//设置保护密码
  195. 2、设置行高的问题:
    可以使用setRowView(int i,int height)方法来设置行高
    1. sheet.setRowView(0,500,false);  
    2.  这个方法可以有两个参数,也可以有三个。
      第一个参数是要设置行高的行,
      第二个参数是设置行高的高度。这个高度大概得设置成Excel里面行高的20倍才能达到相应的效果。
      第三个参数是boolean类型,是否隐藏,默认为隐藏。要是不调用setRowView方法那么当前行不会隐藏,要是调用了且只写了两个参数,那么会被隐藏。写了三个参数时,true为隐藏,false为不隐藏。设置列宽的setColumnView方法跟这个相同。
    3. 3、图像类型的数据:
    4. WritableImage photo=new WritableImage(6,2,1,1,new File(savePath+ java.io.File.separator+"1.png"));  
    5. 这四个参数分别表示:第几列,第几行,图片需要占据几列,图片需要占据几行,图形文件。需要注意的是第三和第四两个参数,它们并不是图片的像数数值,而是占据几个单元格的意思。
    6. 标题带有下拉框的形式:
      1. Label lblColumn  = new Label(5, 2, "请选择",cellFormatForBody);//生成一个待选择的标签  
      2. WritableCellFeatures wcf2 = new WritableCellFeatures();//待选择集合对象  
      3. List angerlist = new ArrayList();  
      4. angerlist.add("已婚");  
      5. angerlist.add("未婚");  
      6. wcf2.setDataValidationList(angerlist);//设置jxl对象要选择的集合  
      7. lblColumn.setCellFeatures(wcf2);//设置到单元格里面去  
      8. sheet.addCell(lblColumn);//加入sheet表格中  

猜你喜欢

转载自www.cnblogs.com/djxdjx/p/9209017.html