java excel poi.jar_java实现excel的生成,利用poi jar包实现excel的生成

利用工具就是站在牛人的肩膀上。现在看看利用poi jar包达成的效果吧

e92e4475b16a4d3a8eb44c4d5bb8629f.png

内容给注释掉了,简单的实现了标题以及表格标题和内容的实现(包括不一样的格式)

直接上传代码吧

/**

* 生成excel 包括订单细节

* @param path excel路径(所在的目录)

* @param ids id的字符串,用逗号隔开。

*/

private static void createExcelTwo(String path,AList list){

SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd-HHmmss");

String date="_"+sdf.format(new Date());

String fileTwoName="OrderDetails"+date+".xls";

String excelTwo=path+"\\"+fileTwoName;

try {

File fileOne = new File(excelTwo);// 创建第一个excel文件对象

FileOutputStream fOut = null;

// 创建一个新的HSSFWorkbook对象

HSSFWorkbook workbook = new HSSFWorkbook();

// 创建一个Excel的工作表,可以指定工作表的名字

HSSFSheet sheet = workbook.createSheet("订单明细");

workbook.setSheetName(0, "订单明细",(short)1);//解决sheet名中文乱码问题

// 创建字体,红色、粗体

HSSFFont font = workbook.createFont();

font.setColor(HSSFFont.COLOR_NORMAL);

font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);

font.setFontHeight((short)5);;

font.setFontName("宋体");

font.setFontHeightInPoints((short) 20);

// 创建单元格的格式,如居中、左对齐等(标题样式)

HSSFCellStyle style = workbook.createCellStyle(); // 样式对象

style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 垂直

style.setAlignment(HSSFCellStyle.ALIGN_CENTER);// 水平

style.setFont(font);

//表头字体

HSSFFont fontContent = workbook.createFont();

fontContent.setColor(HSSFFont.COLOR_NORMAL);

fontContent.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);

fontContent.setFontHeight((short)5);;

fontContent.setFontName("宋体");

fontContent.setFontHeightInPoints((short) 10);

//表格内容字体

HSSFFont fontSubstance = workbook.createFont();

fontSubstance.setColor(HSSFFont.COLOR_NORMAL);

fontSubstance.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL);

fontSubstance.setFontHeight((short)5);;

fontSubstance.setFontName("宋体");

fontSubstance.setFontHeightInPoints((short) 10);

//表格外部样式

HSSFCellStyle styleContent = workbook.createCellStyle(); // 样式对象

styleContent.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 垂直

styleContent.setAlignment(HSSFCellStyle.ALIGN_CENTER);// 水平

styleContent.setFont(fontContent);

//表格内容样式

HSSFCellStyle styleSubstance = workbook.createCellStyle(); // 样式对象

styleSubstance.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);// 垂直

styleSubstance.setAlignment(HSSFCellStyle.ALIGN_CENTER);// 水平

styleSubstance.setFont(fontSubstance);

HSSFRow row = sheet.createRow((short) 0);

//合并单元格,前提是单元格要有(前3行10列合并)

sheet.addMergedRegion(new Region(0, (short) 0, 2, (short) 9));

HSSFCell ce = row.createCell((short) 0);

ce.setEncoding(HSSFCell.ENCODING_UTF_16);// 中文处理

ce.setCellValue("订单明细"); // 表格的第一行第一列显示的数据

ce.setCellStyle(style); // 样式,居中

HSSFRow row2 = sheet.createRow((short) 3); //表格第4行

ImpApiReturn.createExcelCell(row2,0,1,styleContent,"订单ID");

ImpApiReturn.createExcelCell(row2,1,1,styleContent,"订单编号");

ImpApiReturn.createExcelCell(row2,2,1,styleContent,"客户ID");

ImpApiReturn.createExcelCell(row2,3,1,styleContent,"客户名称");

ImpApiReturn.createExcelCell(row2,4,1,styleContent,"部门名称");

ImpApiReturn.createExcelCell(row2,5,1,styleContent,"产品名称");

ImpApiReturn.createExcelCell(row2,6,1,styleContent,"销售日期");

ImpApiReturn.createExcelCell(row2,7,1,styleContent,"合同金额");

ImpApiReturn.createExcelCell(row2,8,1,styleContent,"税率");

ImpApiReturn.createExcelCell(row2,9,1,styleContent,"税后金额");

for(int i=0;i

HSSFRow rows = sheet.createRow((short) i+4);//表格内容是从第5行开始,每循环一次增加一行

//订单id

ImpApiReturn.createExcelCell(rows,0,1,styleSubstance,list.get(i).get("id")+"");

//订单编号

ImpApiReturn.createExcelCell(rows,1,1,styleSubstance,list.get(i).get("order_no")+"");

//客户ID

ImpApiReturn.createExcelCell(rows,2,1,styleSubstance,list.get(i).get("customer_id")+"");

//客户名称

ImpApiReturn.createExcelCell(rows,3,1,styleSubstance,list.get(i).get("customerName")+"");

//部门名称

ImpApiReturn.createExcelCell(rows,4,1,styleSubstance,list.get(i).get("deptname")+"");

//产品名称

ImpApiReturn.createExcelCell(rows,5,1,styleSubstance,list.get(i).get("product")+"");

//销售日期

ImpApiReturn.createExcelCell(rows,6,1,styleSubstance,list.get(i).get("order_date")+"");

//合同金额

ImpApiReturn.createExcelCell(rows,7,1,styleSubstance,list.get(i).get("contract_money")+"");

//税率

ImpApiReturn.createExcelCell(rows,8,1,styleSubstance,list.get(i).get("customer_rate")+"");

//税后金额

ImpApiReturn.createExcelCell(rows,9,1,styleSubstance,"税后金额:8.88");

//更新订单的导出状态 改为已导出

DataHelper.Execute(LoadUtil.LoadTable("oms_order"),"update ds_oms_order set import_state=2 where id=%s", list.get(i).get("id"));

}

fOut = new FileOutputStream(fileOne);

workbook.write(fOut);

fOut.flush();

fOut.close();// 操作结束,关闭文件

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

}

/**

* 创建excel单元格

*

* @param rows

* @param col

* @param code

* @param style

* @param contents

*/

public static void createExcelCell(HSSFRow rows, int col, int code,

HSSFCellStyle style, String contents) {

HSSFCell cell1 = rows.createCell((short) col);

cell1.setEncoding((short)code);

cell1.setCellValue(contents);

cell1.setCellStyle(style);

}

代码里的注释写的也比较详细了。

下面简单讲解下:

一:excel里面有三种不同的格式。1.订单明细 2.一排标题3.表格内容。所以要设置三种不同的字体。也就有不同的三种样式。

二:创建excel步骤:1.创建输出流,将内容输出到excel文件中:File fileOne = new File(excelTwo);// 创建第一个excel文件对象

FileOutputStream fOut = null;

2.创建excel实体    HSSFWorkbook workbook = new HSSFWorkbook();

3.创建sheet实体    HSSFSheet sheet = workbook.createSheet("订单明细");

解决sheet 中文乱码问题:  workbook.setSheetName(0, "订单明细",(short)1);//解决sheet名中文乱码问题

4.然后创建行row       HSSFRow row = sheet.createRow((short) 0); //第一行

5.由行来创建该行的列(即单元格)   HSSFCell ce = row.createCell((short) 0);   //第一行的第一列

6.比如你想合并n个单元格 :sheet.addMergedRegion(new Region(0, (short) 0, 2, (short) 9));

sheet为sheet实体,四个参数解释下:0从0行开始,//参数为int

(short)0从0列开始//类型为short

2 到第三行//参数为int

(short)9为到第10列//参数为short

上述就是将0到三行,0到10列合并为一个单元格。就是我的"订单明细"

7,设置好单元格后,接下来就是给单元格设置样式,设置内容等。可以参照代码里面

8.将该excel对象用流输出到excel文件中去 fOut = new FileOutputStream(fileOne);

workbook.write(fOut);

fOut.flush();

fOut.close();// 操作结束,关闭流

Ok,基本就这些了。如有错误或者不够好的地方,欢迎讨论

关于poi jar包下载地址:

https://download..net/download/echohuangshihuxue/10613610

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值