我的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(00"用于测试的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+3new 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+35.678, priceFormat);   
 sheet.addCell(n);   
   
 i
++;   
 column
=0;   
 l
=new Label(column++, i+3"标题 "+i, detFormat);   
 sheet.addCell(l);   
 d
=new DateTime(column++, i+3new 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+398832, 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 " );   // 有中文必须转码


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值