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; }