使用JXL JExcelApi 生成Excel文档,并且设置字体、颜、背景等
2009-05-20 11:38
package l;
import java.io.File;
import java.io.IOException;
import jxl.Workbook;
import jxl.format.Border;
import jxl.format.Colour;
import jxl.format.UnderlineStyle;
import jxl.format.BorderLineStyle;
import jxl.write.Formula;
import jxl.write.Label;
import jxl.write.Number;
import jxl.write.WritableCell;
import jxl.write.WritableCellFormat;
import jxl.write.WritableFont;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
public class TestExcel {
public static void writeExcel(File file){
  try {
    //创建一个Excel文档
    WritableWorkbook workbook = ateWorkbook(file);
  //创建一个Sheet
    WritableSheet sheet = ateSheet("Report-1", 0);
    //是否显示网格
    Settings().setShowGridLines(true);
  //设置列宽
    Settings().setDefaultColumnWidth(9);
  //设置行高
    Settings().setDefaultRowHeight(500);
   
    Label label = new Label(1,1,"This is a Lable");
    sheet.addCell(label);   
  //设置字体
    WritableFont font = new WritableFont(WritableFont.ARIAL,20,WritableFont.BOLD,false,UnderlineStyle.NO_UNDERLINE,Colour.RED);
    WritableCellFormat cFormat = new WritableCellFormat(font);
  //设置背景
    cFormat.setBackground(Colour.LIGHT_BLUE);
    Label label2 = new Label(5,13,"hello new Label",cFormat);
    sheet.addCell(label2);
    WritableSheet sheet2 = ateSheet("report-2", 1);
   
    WritableCellFormat newFormat = new WritableCellFormat();
    newFormat.setBorder(Border.ALL, BorderLineStyle.DOUBLE);
    Label label3 = new Label(3,6,"border",newFormat);
    sheet.addCell(label3);
   
    Formula l3 = new Formula(10,10,"=SUM(C4:C5)");
   
    //公式暂未成功,本来准备计算l1l2的和,并显示到l3,未成功
    //WritableCell cell = l3.copyTo(2, 5);
    Number l1 = new Number(2,3,3);
    Number l2 = new Number(2,4,4);
    sheet.addCell(l1);
    sheet.addCell(l2);
    //sheet.addCell(cell);
    workbook.write();
    workbook.close();
  } catch (IOException e) {
    e.printStackTrace();
  } catch (WriteException e) {
    e.printStackTrace();
  }
}

public static void main(String args[]){
  File file = new File("d:/test.xls");
  writeExcel(file);
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
jxl写入excel时格式处理 右对齐 粗体颜等等
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
File tempFile=new File("d:/temp/output.xls");
WritableWorkbook workbook =&ateWorkbook(tempFile);   
WritableSheet sheet =&ateSheet("TestCreateExcel", 0);   
 
//一些临时变量,用于写到excel   
Label l=null;   
jxl.write.Number n=null;   
jxl.write.DateTime d=null;   
 
//html设置字体颜属性预定义的一些字体和格式,同一个Excel中最好不要有太多格式   
 WritableFont headerFont = new WritableFont(WritableFont.ARIAL, 12, WritableFont.BOLD, 
    falseUnderlinestyle.NO_UNDERLINE, jxl.format.Colour.BLUE);   
 WritableCellFormat headerFormat = new WritableCellFormat (headerFont);   
   
 WritableFont titleFont = new WritableFont(WritableFont.ARIAL, 10, WritableFont.NO_BOLD,
     falseUnderlinestyle.NO_UNDERLINE, jxl.format.Colour.RED);   
 WritableCellFormat titleFormat = new WritableCellFormat (titleFont);   
   
 WritableFont detFont = new WritableFont(WritableFont.ARIAL, 10, WritableFont.NO_BOLD, 
    falseUnderlinestyle.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); 

 
    Cells(0, row, 8, row);  //合并单元格,row  row 行, 

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