我的Jxl使用总结

创建或读取一个工作薄

 创建一个工作薄:

// 创建Excel工作表 指定名称和位置
           String fileName = File.separator +"POS全场折扣-批次:"+batchid;  //文件名
// createExcel文件
String filePath = FileUtil.POS_root + File.separator +"全场POS折扣信息-批次号:"+batchid;//路径
if (!new File(filePath).exists()) {
new File(filePath).mkdirs();
}
filePath += fileName + ".xls";
OutputStream os = new FileOutputStream(filePath);

//创建一个工作薄
WritableWorkbook wb = Workbook.createWorkbook(os);
// 创建Excel工作表 指定sheet的名称和位置
WritableSheet sheet = wb.createSheet("POS折扣信息", 0);

   WritableCellFormat center = new WritableCellFormat(); 
center.setAlignment(Alignment.CENTRE); //字体在单元格居中
sheet.addCell(new Label(2, 2, "POS折扣批次号(BatchID):",center));

//new Label(a, b, 单元格显示文本,center)  a,b从0开始,a为列,b为行
sheet.mergeCells(a, b, c, d);//(a,b)为起始单元格的列和行,(c,d)为结束单元格的列和行

 

          wb.write();
wb.close();
os.close();

          // 下载excel文件
OutputStream os2 = response.getOutputStream();
try {
File f = new File(filePath);
response.setContentType("application/vnd.ms-excel; charset=GB2312");// 文件内容乱码
response.setHeader("Content-Disposition", "attachment;filename="
+ URLEncoder.encode(f.getName(), "UTF-8"));


byte buffer[] = new byte[4096];
FileInputStream fin = new FileInputStream(f);
int size;
while ((size = fin.read(buffer)) != -1) {
os2.write(buffer, 0, size);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
os2.close();
}

引用的包:

import java.io.File;
import java.io.FileOutputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import jxl.Cell;
import jxl.CellView;
import jxl.Workbook;
import jxl.format.UnderlineStyle;
import jxl.write.Alignment;
import jxl.write.Label;
import jxl.write.WritableCellFormat;
import jxl.write.WritableFont;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;

 

//标题格式
//构造格式:ARIAL字体、10号、粗体、非斜体、无下划线、黑色
   WritableFont header = new WritableFont(WritableFont.createFont("微软雅黑"),10,WritableFont.BOLD,
       false,UnderlineStyle.NO_UNDERLINE,jxl.format.Colour.BLACK); 
   WritableCellFormat heaerline = new WritableCellFormat(header);
  //文字垂直居中对齐
   heaerline.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE); 
  //文字水平居中对齐 
   heaerline.setAlignment(jxl.format.Alignment.CENTRE);   
//内容格式
sheet.setColumnView(1, 20);;// 第 第二列 的宽度20
   WritableCellFormat center = new WritableCellFormat(); 
center.setAlignment(Alignment.CENTRE); 
sheet.addCell(new Label(2, 2, "POS折扣批次号(BatchID):",heaerline));
sheet.mergeCells(2, 2, 5, 2);

 

 

以下内容转载:

API总结

 

1、创建或读取一个工作薄 Workbook

 

创建一个工作薄,就是整个Excel文档,

         WritableWorkbook wwb = Workbook.createWorkbook(os);

其中os为一个文件输出流。当然还有很多其他的入参,比如File等。

 

Workbook不但能用来创建工作薄,也可以读取现有的工作薄,比如:

         Workbook.getWorkbook(java.io.File file);

Workbook是一个很重要工具类,里面方法基本上都是static的,使用方便。

 

2、创建工作表 Sheet

 

创建工作表的方式是通过上面创建的WritableWorkbook对象来操作。

创建一个工作表:

         createSheet(java.lang.String name, int index),

两个参数分别是工作表名字和插入位置,这个位置从0开始,比如:

         WritableSheet sheet = wwb.createSheet("演员表", 0);

 

3、创建标签 Label

 

实际上标签这里的意思就是工作表的单元格,这个单元格多种,分别对应不同的类,比如jxl.write.Boolean、jxl.write.Boolean等。

         Label label = new Label(col, row, title);

三个参数分别表示col+1列,row+1行,标题内容是title。

 

将标签加入到工作表中

         sheet.addCell(label);

 

4、填充数据

 

数据填充这块稍微复杂点,涉及到数据单元格的格式问题。

 

a)、填充数字

        jxl.write.Number numb = new jxl.write.Number(1, 1, 250); 
        sheet.addCell(numb);

 

b)、填充格式化的数字

        jxl.write.NumberFormat nf = new jxl.write.NumberFormat("#.##"); 
        jxl.write.WritableCellFormat wcf = new jxl.write.WritableCellFormat(nf); 
        jxl.write.Number n = new jxl.write.Number(2, 1, 2.451, wcf); 
        sheet.addCell(n);

 

c)、填充日期

        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); 
        String newdate = sdf.format(new Date()); 
        label = new Label(2, 2, newdate); 
        sheet.addCell(label);

 

d)、填充文本

        label = new Label(3, 3, "周星驰"); 
        sheet.addCell(label);

 

e)、填充boolean值

        jxl.write.Boolean bool = new jxl.write.Boolean(4, 1, true); 
        sheet.addCell(bool);

 

5、合并单元格

 

 通过writablesheet.mergeCells(int x,int y,int m,int n);来实现的。

 表示将从第x+1列,y+1行到m+1列,n+1行合并 (四个点定义了两个坐标,左上角和右下角)

 结果是合并了m-x+1行,n-y+1列,两者乘积就是合并的单元格数量。

 

        sheet.mergeCells(0, 6, 3, 8); 
        label = new Label(0, 6, "合并了12个单元格"); 
        sheet.addCell(label);

 

6、添加单元格的式样

 

主要是改变单元格背景、字体、颜色等等。

        WritableCellFormat wc = new WritableCellFormat(); 
        // 设置居中 
        wc.setAlignment(Alignment.CENTRE); 
        // 设置边框线 
        wc.setBorder(Border.ALL, BorderLineStyle.THIN); 
        // 设置单元格的背景颜色 
        wc.setBackground(jxl.format.Colour.RED); 
        label = new Label(1, 5, "字体", wc); 
        sheet.addCell(label);

 

7、设置单元格字体

 

        // 设置字体 
        jxl.write.WritableFont wfont = new jxl.write.WritableFont(WritableFont.createFont("楷书"), 20); 
        WritableCellFormat font = new WritableCellFormat(wfont); 
        label = new Label(2, 6, "楷书", font); 
        sheet.addCell(label);

 

8、将工作写成文件

 

        // 写入数据 
        wwb.write(); 
        // 关闭文件 
        wwb.close();

 

9、行列的批量操作

 

        //获取所有的工作表 
        jxl.write.WritableSheet[] sheetList = wwb.getSheets(); 
        //获取第1列所有的单元格 
        jxl.Cell[] cellc = sheet.getColumn(0); 
        //获取第1行所有的单元格 
        jxl.Cell[] cellr = sheet.getRow(0); 
        //获取第1行第1列的单元格 
        Cell c = sheet.getCell(0, 0);

 

10、获取单元格的值

 

        //获取单元格的值,不管什么单元格,返回都是字符串 
        String value = c.getContents();

 

 

WritableWorkbook workbook = Workbook.createWorkbook(tempFile);   
WritableSheet sheet = workbook.createSheet("TestCreateExcel", 0);    
  
//一些临时变量,用于写到excel中   
Label l=null;   
jxl.write.Number n=null;   
jxl.write.DateTime d=null;   
  
//预定义的一些字体和格式,同一个Excel中最好不要有太多格式   
 WritableFont headerFont = new WritableFont(WritableFont.ARIAL, 12, WritableFont.BOLD, 
    false, Underlinestyle.NO_UNDERLINE, jxl.format.Colour.BLUE);    
 WritableCellFormat headerFormat = new WritableCellFormat (headerFont);    
   
 WritableFont titleFont = new WritableFont(WritableFont.ARIAL, 10, WritableFont.NO_BOLD,
     false, Underlinestyle.NO_UNDERLINE, jxl.format.Colour.RED);    
 WritableCellFormat titleFormat = new WritableCellFormat (titleFont);    
   
 WritableFont detFont = new WritableFont(WritableFont.ARIAL, 10, WritableFont.NO_BOLD, 
    false, Underlinestyle.NO_UNDERLINE, jxl.format.Colour.BLACK);    
 WritableCellFormat detFormat = new WritableCellFormat (detFont);    
   
 NumberFormat nf=new NumberFormat("0.00000"); //用于Number的格式   
 WritableCellFormat priceFormat = new WritableCellFormat (detFont, nf);    
   
 DateFormat df=new DateFormat("yyyy-MM-dd");//用于日期的   
 WritableCellFormat dateFormat = new WritableCellFormat (detFont, df);    
   
 //剩下的事情,就是用上面的内容和格式创建一些单元格,再加到sheet中   
 l=new Label(0, 0, "用于测试的Excel文件", headerFormat);   
 sheet.addCell(l);   
   
 //add Title   
 int column=0;   
 l=new Label(column++, 2, "标题", titleFormat);   
 sheet.addCell(l);   
 l=new Label(column++, 2, "日期", titleFormat);   
 sheet.addCell(l);   
 l=new Label(column++, 2, "货币", titleFormat);   
 sheet.addCell(l);   
 l=new Label(column++, 2, "价格", titleFormat);   
 sheet.addCell(l);   
   
 //add detail   
 int i=0;   
 column=0;   
 l=new Label(column++, i+3, "标题 "+i, detFormat);   
 sheet.addCell(l);   
 d=new DateTime(column++, i+3, new java.util.Date(), dateFormat);   
 sheet.addCell(d);   
 l=new Label(column++, i+3, "CNY", detFormat);   
 sheet.addCell(l);   
 n=new jxl.write.Number(column++, i+3, 5.678, priceFormat);   
 sheet.addCell(n);   
   
 i++;   
 column=0;   
 l=new Label(column++, i+3, "标题 "+i, detFormat);   
 sheet.addCell(l);   
 d=new DateTime(column++, i+3, new java.util.Date(), dateFormat);   
 sheet.addCell(d);   
 l=new Label(column++, i+3, "SGD", detFormat);   
 sheet.addCell(l);   
 n=new jxl.write.Number(column++, i+3, 98832, priceFormat);   
 sheet.addCell(n);   
   
 //设置列的宽度   
 column=0;   
 sheet.setColumnView(column++, 20);   
 sheet.setColumnView(column++, 20);   
 sheet.setColumnView(column++, 10);   
 sheet.setColumnView(column++, 20);   
   
 workbook.write();   
 workbook.close();   

我正在做的项目里定义了很多样式,好像速度也不算慢,还有一些其他方面的定义,补充到下面:

    //构造格式:ARIAL字体、10号、粗体、非斜体、无下划线、黑色
    WritableFont fmtx2TotalCaption = new WritableFont(WritableFont.ARIAL,10,WritableFont.BOLD,
        false,UnderlineStyle.NO_UNDERLINE,jxl.format.Colour.BLACK); 
    WritableCellFormat totalx2Format = new WritableCellFormat(fmtx2TotalCaption);
   //文字垂直居中对齐
    totalx2Format.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE); 
   //文字水平居中对齐 
    totalx2Format.setAlignment(jxl.format.Alignment.CENTRE);   
    //边框深蓝色
    totalx2Format.setBorder(jxl.format.Border.ALL,jxl.format.BorderLineStyle.THIN,
        jxl.format.Colour.DARK_BLUE);
    //设置底色为冰蓝
    totalx2Format.setBackground(jxl.format.Colour.ICE_BLUE); 

 
    sheet.mergeCells(0, row, 8, row);  //合并单元格,row 到 row 行,0 到 8 列

    sheet.setRowView(row, 600);// 第 row 行的高度

另外就是要在 Action(servlet) 中这么写,IE就会直接弹出保存文件的对话框(注意要占用当前窗口):

    String title = "XXXX统计";
    OutputStream out = response.getOutputStream();
    WritableWorkbook wb = Workbook.createWorkbook(out);
    response.setContentType("aplication/vnd.ms-excel");
    response.addHeader("Content-Disposition","inline; filename=" + new String(title.getBytes("GB2312"),"ISO8859_1") + ".xls");  //有中文必须转码

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值