import jxl.*;
import jxl.write.*;
import java.io.*;
import java.io.File.*;
import java.util.*;

public class excel
{
public static void main(String[] args)
{
String targetfile = "c:/out.xls";//输出的excel文件名
String worksheet = "List";//输出的excel文件工作表名
String[] title = {"ID","NAME","DESCRIB"};//excel工作表的标题

WritableWorkbook workbook;
try
{
//创建可写入的Excel工作薄,运行生成的文件在tomcat/bin下
//workbook = Workbook.createWorkbook(new File("output.xls"));
System.out.println("begin");

OutputStream os=new FileOutputStream(targetfile);
workbook=Workbook.createWorkbook(os);

WritableSheet sheet = workbook.createSheet(worksheet, 0); //添加第一个工作表
//WritableSheet sheet1 = workbook.createSheet("MySheet1", 1); //可添加第二个
工作


jxl.write.Label label;
for (int i=0; i<title.length; i++)
{
//Label(列号,行号 ,内容 )
label = new jxl.write.Label(i, 0, title[i]); //put the title in row1
sheet.addCell(label);
}

//下列添加的对字体等的设置均调试通过,可作参考用

//添加数字
jxl.write.Number number = new jxl.write.Number(3, 4, 3.14159); //put the
number 3.14159 in cell D5
sheet.addCell(number);

//添加带有字型Formatting的对象
jxl.write.WritableFont wf = new
jxl.write.WritableFont(WritableFont.TIMES,10,WritableFont.BOLD,true);
jxl.write.WritableCellFormat wcfF = new jxl.write.WritableCellFormat(wf);
jxl.write.Label labelCF = new jxl.write.Label(4,4,"文本",wcfF);
sheet.addCell(labelCF);

//添加带有字体颜色,带背景颜色 Formatting的对象
jxl.write.WritableFont wfc = new
jxl.write.WritableFont(WritableFont.ARIAL,10,WritableFont.BOLD,false,jxl.for
mat.UnderlineStyle.NO_UNDERLINE,jxl.format.Colour.RED);
jxl.write.WritableCellFormat wcfFC = new jxl.write.WritableCellFormat(wfc);
wcfFC.setBackground(jxl.format.Colour.BLUE);
jxl.write.Label labelCFC = new jxl.write.Label(1,5,"带颜色",wcfFC);
sheet.addCell(labelCFC);

//添加带有formatting的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);
sheet.addCell(labelNF);

//3.添加Boolean对象
jxl.write.Boolean labelB = new jxl.write.Boolean(0,2,false);
sheet.addCell(labelB);

//4.添加DateTime对象
jxl.write.DateTime labelDT = new jxl.write.DateTime(0,3,new
java.util.Date());
sheet.addCell(labelDT);

//添加带有formatting的DateFormat对象
jxl.write.DateFormat df = new jxl.write.DateFormat("ddMMyyyyhh: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);
sheet.addCell(labelDTF);

//和宾单元格
//sheet.mergeCells(int col1,int row1,int col2,int row2);//左上角到右下角
sheet.mergeCells(4,5,8,10);//左上角到右下角
wfc = new
jxl.write.WritableFont(WritableFont.ARIAL,40,WritableFont.BOLD,false,jxl.for
mat.UnderlineStyle.NO_UNDERLINE,jxl.format.Colour.GREEN);
jxl.write.WritableCellFormat wchB = new jxl.write.WritableCellFormat(wfc);
wchB.setAlignment(jxl.format.Alignment.CENTRE);
labelCFC = new jxl.write.Label(4,5,"单元合并",wchB);
sheet.addCell(labelCFC); //


//设置边框
jxl.write.WritableCellFormat wcsB = new jxl.write.WritableCellFormat();
wcsB.setBorder(jxl.format.Border.ALL,jxl.format.BorderLineStyle.THICK);
labelCFC = new jxl.write.Label(0,6,"边框设置",wcsB);
sheet.addCell(labelCFC);
workbook.write();
workbook.close();
}catch(Exception e)
{
e.printStackTrace();
}
System.out.println("end");
Runtime r=Runtime.getRuntime();
Process p=null;
//String cmd[]={"notepad","exec.java"};
String cmd[]={"C:\\Program Files\\Microsoft
Office\\Office\\EXCEL.EXE","out.xls"};
try{
p=r.exec(cmd);
}
catch(Exception e){
System.out.println("error executing: "+cmd[0]);
}
}
}
以下是自己在公司项目中运用过的使用jxl导出报表文件
//调用部分
  int count = 0;
  // 首先循环明细合计
  for (int i = 0; i < object.size(); i++)
  {
   // 统计合计的实体对象
   CustomerGains customerGains1 = (CustomerGains) object.get(i);
   tmptype = customerGains1.getChannel();
   // 合并单元格wsheet.mergeCells(int m,int n,int q,int p)纵坐标1,横坐标1,纵坐标2,横坐标2
   wsheet.mergeCells(0, count, title.length - 1, count);
   wsheet.addCell(new Label(0, count, "所属渠道: " + tmptype, wcfFC));
   count++;
   for (int j = 0; j < title.length; j++)
   {
    wsheet.addCell(new Label(j, count, title[j], wcfFC));
   }
   count++;
   for (int k = 0; k < objectS.size(); k++)
   {
    // 统计明细的实体对象
    CustomerGains customerGains2 = (CustomerGains) objectS.get(k);
    if (customerGains2.getChannel().equals(customerGains1.getChannel()))
    {
     int j = customerGains(wsheet, count, customerGains2, wcfFC, payFund);
     count = j; // 因为跨格存储数据
     count++;
    }
   }
   // 统计合计List
   customerGainsCost(wsheet, count, customerGains1, wcfFC);
   count++;
  }
  customerGainsCostSum(wsheet, count, customerGains, wcfFC);


// 客户利润统计明细
 public int customerGains(WritableSheet wsheet, int i, CustomerGains   customerGains, WritableCellFormat wcfFC, List payFund) throws
RowsExceededException, WriteException
 {
  // 如果利润明细不为空
  int count = i;
  if (customerGains != null)
  {
   if (!customerGains.getFixedCharge().equals(new Double(0.00)))
   {
    int k = 0; // 固定费用跨行的变量
    int h = 0; // 变动费用跨行的变量
    int m = 0; // 跨行结束后下一行数据的行号
    for (int j = 0; j < payFund.size(); j++)
    {
     VSlcustomerpayfund vsp = (VSlcustomerpayfund) payFund.get(j);
     if (vsp.getCustomername().equals(customerGains.getCustomerName()) 
     && vsp.getFeecharacter().equalsIgnoreCase("1501") 
     && vsp.getChannelcode().equals(customerGains.getChannelCode()))
     {
      wsheet.addCell(new Label(6, count + k, vsp.getItemname(), wcfFC));
      k++; // 如果不加一格,就会出现两行数据挤在一行。
      wsheet.addCell(new Label(6, count + k,TypeConver.getStrFormat(vsp.getFund()), wcfFC));
      k++;
     }
     if (vsp.getCustomername().equals(customerGains.getCustomerName()) 
     && vsp.getFeecharacter().equalsIgnoreCase("1502")
     && vsp.getChannelcode().equals(customerGains.getChannelCode()))
     {
      wsheet.addCell(new Label(8, count + h, vsp.getItemname(), wcfFC));
      h++;
      wsheet.addCell(new Label(8, count + h,TypeConver.getStrFormat(vsp.getFund()), wcfFC));
      h++;
     }
    }
    // 固定费用和变动费用的跨行数取最大
    if (k > h)
    {
     m = k - 1 + count;
    }
    else
    {
     m = h - 1 + count;
    }
    wsheet.mergeCells(0, count, 0, m);
    wsheet.addCell(new Label(0, count,customerGains.getCustomerName().toString(), wcfFC));
    wsheet.mergeCells(1, count, 1, m);
    wsheet.addCell(new Label(1, count,customerGains.getStrTotalPrice().toString(), wcfFC));
    wsheet.mergeCells(2, count, 2, m);
    wsheet.addCell(new Label(2, count,customerGains.getStrTotalRecedePrice(), wcfFC));
    wsheet.mergeCells(3, count, 3, m);
    wsheet.addCell(new Label(3, count, customerGains.getStrTotalRealCost(),wcfFC));
    wsheet.mergeCells(4, count, 4, m);
    wsheet.addCell(new Label(4, count, customerGains.getStrTotalGain(),wcfFC));
    wsheet.mergeCells(5, count, 5, m);
    wsheet.addCell(new Label(5, count, customerGains.getStrTotalGainRate(),wcfFC));
    wsheet.mergeCells(7, count, 7, m);
    wsheet.addCell(new Label(7, count,customerGains.getStrFixedChargeRate(), wcfFC));
    wsheet.mergeCells(9, count, 9, m);
    wsheet.addCell(new Label(9, count,customerGains.getStrChangeChargeRate(), wcfFC));
    wsheet.mergeCells(10, count, 10, m);
    wsheet.addCell(new Label(10, count,customerGains.getStrRetainedProfits(), wcfFC));
    wsheet.mergeCells(11, count, 11, m);
    wsheet.addCell(new Label(11, count,customerGains.getStrRetainedProfitsRate(), wcfFC));
    return m;
   }
   else
   {
    wsheet.addCell(new Label(0, count,customerGains.getCustomerName().toString(), wcfFC));
    wsheet.addCell(new Label(1, count, customerGains.getStrTotalPrice(),wcfFC));
    wsheet.addCell(new Label(2, count,customerGains.getStrTotalRecedePrice(), wcfFC));
    wsheet.addCell(new Label(3, count, customerGains.getStrTotalRealCost(),wcfFC));
    wsheet.addCell(new Label(4, count, customerGains.getStrTotalGain(),wcfFC));
    wsheet.addCell(new Label(5, count, customerGains.getStrTotalGainRate(),wcfFC));
    wsheet.addCell(new Label(6, count,TypeConver.getStrFormat(
    customerGains.getFixedCharge()), wcfFC));
    wsheet.addCell(new Label(7, count,customerGains.getStrFixedChargeRate(), wcfFC));
    wsheet.addCell(new Label(8, count,TypeConver.getStrFormat(
    customerGains.getChangeCharge()), wcfFC));
    wsheet.addCell(new Label(9, count,customerGains.getStrChangeChargeRate(), wcfFC));
    wsheet.addCell(new Label(10, count,customerGains.getStrRetainedProfits(), wcfFC));
    wsheet.addCell(new Label(11, count,customerGains.getStrRetainedProfitsRate(), wcfFC));
   }
  }
  return count;
 }