import org.apache.poi.hssf.usermodel.HSSFWorkbook
import org.apache.poi.hssf.usermodel.HSSFCellStyle
import org.apache.poi.hssf.usermodel.HSSFFont
import org.apache.poi.hssf.usermodel.HSSFSheet
import org.apache.poi.hssf.usermodel.HSSFCell
import org.apache.poi.hssf.usermodel.HSSFRow
import org.apache.poi.hssf.util.Region
import java.text.DecimalFormat
import java.io.OutputStream
public class XLSReader {
//主方法
public static void main(String[] args)throws Exception {
HSSFWorkbook book = new HSSFWorkbook();
String str="728,731,745";
String[] str1=str.split(",");
for(int i=0;i<str1.length;i++){
//样式设置
HSSFCellStyle cellStyle = book.createCellStyle();
HSSFCellStyle cellTopStyle = book.createCellStyle();
HSSFFont font = book.createFont();
font.setFontName("方正仿宋简体");
font.setFontHeight((short) 280);
font.setFontHeightInPoints((short) 11);
cellStyle.setFont(font);
cellStyle.setWrapText(true);
cellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);
cellStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);
cellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);
cellStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);
cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//指定单元格垂直居中对齐
//调用方法
exportExcel(str1[i],book,cellTopStyle,cellStyle,i);//传入的参数
}
//弹出下载框
String fileName = new String("订单导出".getBytes(),"iso-8859-1");
response.setCharacterEncoding("gbk");
response.reset();
response.setContentType("application/OCTET-STREAM;charset=gbk");
response.setHeader("pragma", "no-cache");
response.addHeader("Content-Disposition","attachment;filename=" + fileName+ ".xls");
OutputStream os = response.getOutputStream();
book.write(os);
os.flush();
}
//导出方法
public void exportExcel(String id,HSSFWorkbook book,HSSFCellStyle cellTopStyle,HSSFCellStyle cellStyle,int a) throws Exception {
weaver.conn.RecordSet rs=new weaver.conn.RecordSet();
String detailsSql="select (select f.MATERIALSNUMBER from WW_MT_MATERIALS f where f.id=a.MATERIALSCODE)as MATERIALSCODE ,a.MATERIALSNAME,a.MATERIALSSTANDARD,a.MATERIALSUNIT,a.MATERIALSNUMBER,a.PRICE,a.TOTAL,a.CHECKSTANDARD,a.WARRANTYPERIOD,a.WARRANTYRATE from WW_MT_ORDER_DT1 a where a.mainid="+id;
String sql="select a.CONTRACTORDERTIME,a.APPLYCODE,a.ORDERCODE,a.ORDERDATE,a.DATEARRIVED,a.RECEIVER,a.TELEPHONE,a.DELIVERADDRESS,a.remark,a.status,b.SUPPLIERFULLNAME,b.CONTACTMAN,b.CONTACTTEL,b.CONTACTMOBILE,c.subcompanyname||'-'||d.departmentname deptname from WW_MT_ORDER a "+
"left join WW_MT_SUPPLIER b on a.SUPPLIERID=b.id left join hrmsubcompany c on a.APPLYSUBC=c.id left join hrmdepartment d on a.APPLYDEPT=d.id where a.id="+id;
rs.executeSql(sql);
rs.next();
String pfcode = Util.null2String(rs.getString("APPLYCODE")); //批复号
String order_code = Util.null2String(rs.getString("ORDERCODE")); //订单号
String order_date = Util.null2String(rs.getString("ORDERDATE")); //订单生成时间
String date_arrived = Util.null2String(rs.getString("DATEARRIVED")); //到货时间
String supplier_name = Util.null2String(rs.getString("SUPPLIERFULLNAME")); //供应商名称
String contactman = Util.null2String(rs.getString("CONTACTMAN")); //供应商联系人
String contacttel = Util.null2String(rs.getString("CONTACTTEL")); //供应商联系人电话
String contactmobile = Util.null2String(rs.getString("CONTACTMOBILE")); //供应商联系人手机
String deptname = Util.null2String(rs.getString("deptname")); //采购部门
String receiver = Util.null2String(rs.getString("RECEIVER")); //收货人
String telephone = Util.null2String(rs.getString("TELEPHONE")); //收货人电话
String deliver_address = Util.null2String(rs.getString("DELIVERADDRESS")); //收货地址
String remark= Util.null2String(rs.getString("remark")); //备注
String deptid= Util.null2String(rs.getString("APPLYDEPT"));//采购部门
String state =rs.getString("status"); //状态
String CONTRACTORDERTIME =rs.getString("CONTRACTORDERTIME");
HSSFSheet sheet = book.createSheet("导出数据"+id);
book.setSheetName(0+a, "导出数据"+id, (short) 1);//注意设置页签的时候下表从0开始
//sheet.setDefaultColumnWidth((short) 10);
//设置列宽
sheet.setColumnWidth((short)0, (short)1000);
sheet.setColumnWidth((short)1, (short)2600);
sheet.setColumnWidth((short)2, (short)3000);
sheet.setColumnWidth((short)3, (short)2600);
sheet.setColumnWidth((short)4, (short)3300);
sheet.setColumnWidth((short)5, (short)1600);
sheet.setColumnWidth((short)6, (short)2300);
sheet.setColumnWidth((short)7, (short)2700);
sheet.setColumnWidth((short)8, (short)2700);
sheet.setColumnWidth((short)9, (short)2700);
sheet.setColumnWidth((short)10, (short)2000);
sheet.setColumnWidth((short)11, (short)2000);
int row = 5; //下标从5行开始
int cellsize = 11; //最大列
HSSFCell headerTopCell = null;
HSSFCell headerCell = null;
HSSFCell headerCellTwo = null;
HSSFCell headerCellThree = null;
HSSFCell headerCellData = null;
HSSFCell headerCellSix = null;
HSSFRow headerTop = sheet.createRow((short) 0);
HSSFRow headerRow = sheet.createRow((short) 1);
HSSFRow headerRowTwo = sheet.createRow((short) 2);
HSSFRow headerRowThree = sheet.createRow((short) 3);
HSSFRow headerRowSix = sheet.createRow((short) 4);
HSSFRow headerDataRow = null;
for (int i = 0; i <= cellsize; i++) {
headerTopCell = headerTop.createCell((short) i);
headerTopCell.setCellStyle(cellTopStyle);
headerTopCell.setEncoding(HSSFCell.ENCODING_UTF_16);
headerCell = headerRow.createCell((short) i);
headerCell.setCellStyle(cellStyle);
headerCell.setEncoding(HSSFCell.ENCODING_UTF_16);
headerCellTwo = headerRowTwo.createCell((short) i);
headerCellTwo.setCellStyle(cellStyle);
headerCellTwo.setEncoding(HSSFCell.ENCODING_UTF_16);
headerCellThree = headerRowThree.createCell((short) i);
headerCellThree.setCellStyle(cellStyle);
headerCellThree.setEncoding(HSSFCell.ENCODING_UTF_16);
headerCellSix = headerRowSix.createCell((short) i);
headerCellSix.setCellStyle(cellStyle);
headerCellSix.setEncoding(HSSFCell.ENCODING_UTF_16);
}
sheet.addMergedRegion(new Region(0, (short) 0, 0, (short) cellsize));//合并第一行标题所有列
//new Region 起始行,起始列,结束行,结束列
//合并单元格
sheet.addMergedRegion(new Region(1, (short) 7, 1, (short) 8));//批复号内容
sheet.addMergedRegion(new Region(1, (short) 10, 1, (short) 11));//订单号内容
sheet.addMergedRegion(new Region(2, (short) 0, 2, (short) 1));//订单时间
sheet.addMergedRegion(new Region(2, (short) 2, 2, (short) 5));//订单时间 内容
sheet.addMergedRegion(new Region(2, (short) 6, 2, (short) 7));//到货时间
sheet.addMergedRegion(new Region(2, (short) 8, 2, (short) cellsize));//到货时间 内容
sheet.addMergedRegion(new Region(3, (short) 0, 3, (short) 1));//合并供应商名称
sheet.addMergedRegion(new Region(3, (short) 2, 3, (short) 5));//合并供应商名称 内容
sheet.addMergedRegion(new Region(3, (short) 7, 3, (short) 8));//合并联系人内容
sheet.addMergedRegion(new Region(3, (short) 10, 3, (short) 11));//合并联系电话内容 占2列
//第一行标题
headerTop.getCell((short) 0).setCellValue("物资采购订单");
//第二行标题
headerRow.getCell((short) 6).setCellValue("采购申请单:");
headerRow.getCell((short) 7).setCellValue(pfcode);
headerRow.getCell((short) 9).setCellValue("订单号:");
headerRow.getCell((short) 10).setCellValue(order_code);
//第三行标题
headerRowTwo.getCell((short) 0).setCellValue("订单时间:");
headerRowTwo.getCell((short) 2).setCellValue(order_date);
headerRowTwo.getCell((short) 6).setCellValue("到货时间:");
headerRowTwo.getCell((short) 8).setCellValue(date_arrived);
//第四行标题
headerRowThree.getCell((short) 0).setCellValue("供应商名称:");
headerRowThree.getCell((short) 2).setCellValue(supplier_name);
headerRowThree.getCell((short) 6).setCellValue("联系人:");
headerRowThree.getCell((short) 7).setCellValue(contactman);
headerRowThree.getCell((short) 9).setCellValue("联系电话:");
headerRowThree.getCell((short) 10).setCellValue(contactmobile);
//第5行 //new Region 起始行,起始列,结束行,结束列
sheet.addMergedRegion(new Region(4, (short) 0, 4, (short) 1));
headerRowSix.getCell((short)0).setCellValue("序号");
//headerRowSix.getCell((short)1).setCellValue("物资编码");
//headerRowSix.getCell((short)2).setCellValue("品牌");
sheet.addMergedRegion(new Region(4, (short) 2, 4, (short) 3));//物资名称
headerRowSix.getCell((short)2).setCellValue("物资名称");
headerRowSix.getCell((short)4).setCellValue("规格");
headerRowSix.getCell((short)5).setCellValue("单位");
headerRowSix.getCell((short)6).setCellValue("配置数量");
headerRowSix.getCell((short)7).setCellValue("单价");
headerRowSix.getCell((short)8).setCellValue("金额");
//headerRowSix.getCell((short)9).setCellValue("验收标准");
sheet.addMergedRegion(new Region(4, (short) 8, 4, (short) 9));
headerRowSix.getCell((short)10).setCellValue("保质期(月)");
headerRowSix.getCell((short)11).setCellValue("保质金比率(%)");
//第8行开始显示数据
rs.executeSql(detailsSql);
double money = 0.00;
double count = 0.00;
int num = 1;
while(rs.next()){
sheet.addMergedRegion(new Region(row, (short) 0, row, (short) 1));//
sheet.addMergedRegion(new Region(row, (short) 2, row, (short) 3));//物资名称
sheet.addMergedRegion(new Region(row, (short) 8, row, (short) 9));//
headerDataRow = sheet.createRow((short) row);
for (int i = 0; i <= cellsize; i++) {
headerCellData = headerDataRow.createCell((short) i);
headerCellData.setCellStyle(cellStyle);
headerCellData.setEncoding(HSSFCell.ENCODING_UTF_16);
}
headerDataRow.getCell((short) 0).setCellValue(num++);//序号
//headerDataRow.getCell((short) 1).setCellValue(Util.null2String(rs.getString("MATERIALSCODE")));//物资编码
//headerDataRow.getCell((short) 2).setCellValue(Util.null2String(rs.getString("brandname")));//品牌
headerDataRow.getCell((short) 2).setCellValue(Util.null2String(rs.getString("MATERIALSNAME")));//物资名称
headerDataRow.getCell((short) 4).setCellValue(Util.null2String(rs.getString("MATERIALSSTANDARD")));//规格
headerDataRow.getCell((short) 5).setCellValue(Util.null2String(rs.getString("MATERIALSUNIT")));//单位
headerDataRow.getCell((short) 6).setCellValue(Util.null2String(rs.getString("MATERIALSNUMBER")));//配置数量
headerDataRow.getCell((short) 7).setCellValue(Util.null2String(rs.getString("PRICE")));//单价
headerDataRow.getCell((short) 8).setCellValue(Util.null2String(rs.getString("TOTAL")));//金额
//headerDataRow.getCell((short) 9).setCellValue(Util.null2String(rs.getString("CHECKSTANDARD")));//验收标准
headerDataRow.getCell((short) 10).setCellValue(Util.null2String(rs.getString("WARRANTYPERIOD")));//保质期(月)
headerDataRow.getCell((short) 11).setCellValue(Util.null2String(rs.getString("WARRANTYRATE")));//保质金比率(%)
row++;
}
HSSFRow headerEnd = sheet.createRow((short) row);
for(int i=0;i<=cellsize;i++){
HSSFCell headerCellEnd = headerEnd.createCell((short) i);
headerCellEnd.setCellStyle(cellStyle);
headerCellEnd.setEncoding(HSSFCell.ENCODING_UTF_16);
}
String datasql="select sum(d.MATERIALSNUMBER) as amount,sum(d.TOTAL) as total from WW_MT_ORDER_DT1 d where d.MAINID="+id;
rs.execute(datasql);
rs.next();
sheet.addMergedRegion(new Region(row, (short) 0, row, (short) 5));
headerEnd.getCell((short)0).setCellValue("合计数量:");
headerEnd.getCell((short)6).setCellValue(rs.getString("amount"));
headerEnd.getCell((short)7).setCellValue("合计金额:");
sheet.addMergedRegion(new Region(row, (short) 8, row, (short) 9));
headerEnd.getCell((short)8).setCellValue(rs.getString("total")+"元");
row++;
sheet.setRowBreak(5);
HSSFRow headerRowLastSix = sheet.createRow((short) row);
for (int i = 0; i <= cellsize; i++) {
headerCell = headerRowLastSix.createCell((short) i);
headerCell.setCellStyle(cellStyle);
headerCell.setEncoding(HSSFCell.ENCODING_UTF_16);
}
sheet.addMergedRegion(new Region(row, (short) 0, row, (short) 1));//备注
sheet.addMergedRegion(new Region(row, (short) 2, row, (short) 11));//备注内容
//备注
headerRowLastSix.getCell((short) 0).setCellValue("备注:");
headerRowLastSix.getCell((short) 2).setCellValue(remark);
row++;
HSSFRow headerRowLastFive = sheet.createRow((short) row);
HSSFRow headerRowLastFour = sheet.createRow((short) row+1);
HSSFRow headerRowLastThree = sheet.createRow((short) row+2);
HSSFRow headerRowLastTwo = sheet.createRow((short) row+3);
HSSFRow headerRowLastOne = sheet.createRow((short) row+4);
for (int i = 0; i <= cellsize; i++) {
headerCell = headerRowLastFive.createCell((short) i);
headerCell.setCellStyle(cellStyle);
headerCell.setEncoding(HSSFCell.ENCODING_UTF_16);
headerCell = headerRowLastFour.createCell((short) i);
headerCell.setCellStyle(cellStyle);
headerCell.setEncoding(HSSFCell.ENCODING_UTF_16);
headerCell = headerRowLastThree.createCell((short) i);
headerCell.setCellStyle(cellStyle);
headerCell.setEncoding(HSSFCell.ENCODING_UTF_16);
headerCell = headerRowLastTwo.createCell((short) i);
headerCell.setCellStyle(cellStyle);
headerCell.setEncoding(HSSFCell.ENCODING_UTF_16);
headerCell = headerRowLastOne.createCell((short) i);
headerCell.setCellStyle(cellStyle);
headerCell.setEncoding(HSSFCell.ENCODING_UTF_16);
}
sheet.addMergedRegion(new Region(row, (short) 0, row, (short) 1));//收货单位
sheet.addMergedRegion(new Region(row, (short) 2, row, (short) 11));//收货单位内容
//new Region 起始行,起始列,结束行,结束列
//合并单元格
sheet.addMergedRegion(new Region(row+1, (short) 0, row+1, (short) 1));//收货单位
sheet.addMergedRegion(new Region(row+1, (short) 2, row+1, (short) 3));//收货单位
sheet.addMergedRegion(new Region(row+1, (short) 5, row+1, (short) 6));//收货单位
sheet.addMergedRegion(new Region(row+2, (short) 0, row+2, (short) 1));//收货单位
sheet.addMergedRegion(new Region(row+2, (short) 2, row+2, (short) 6));//收货单位内容
sheet.addMergedRegion(new Region(row+3, (short) 0, row+3, (short) 1));//申请单位
sheet.addMergedRegion(new Region(row+3, (short) 2, row+3, (short) 3));//申请单位 内容
sheet.addMergedRegion(new Region(row+3, (short) 5, row+3, (short) 6));//电话 内容
sheet.addMergedRegion(new Region(row+4, (short) 0, row+4, (short) 1));//采购单位
sheet.addMergedRegion(new Region(row+4, (short) 2, row+4, (short) 3));//采购单位 内容
sheet.addMergedRegion(new Region(row+4, (short) 5, row+4, (short) 6));//联系方式 内容
//第一行标题
headerRowLastFive.getCell((short) 0).setCellValue("收货单位:");
headerRowLastFive.getCell((short) 2).setCellValue(deptname);
//第二行标题
headerRowLastFour.getCell((short) 0).setCellValue("收货人:");
headerRowLastFour.getCell((short) 2).setCellValue(receiver);
headerRowLastFour.getCell((short) 4).setCellValue("电话");
headerRowLastFour.getCell((short) 5).setCellValue(telephone);
//第三行标题
headerRowLastThree.getCell((short) 0).setCellValue("收货地址:");
headerRowLastThree.getCell((short) 2).setCellValue(deliver_address);
//第四行
headerRowLastTwo.getCell((short) 0).setCellValue("申请单位:");
headerRowLastTwo.getCell((short) 2).setCellValue(deptname);
headerRowLastTwo.getCell((short) 4).setCellValue("电话");
headerRowLastTwo.getCell((short) 5).setCellValue(telephone);
//第五行
headerRowLastOne.getCell((short) 0).setCellValue("采购单位:");
headerRowLastOne.getCell((short) 2).setCellValue(deptname);
headerRowLastOne.getCell((short) 4).setCellValue("联系方式");
headerRowLastOne.getCell((short) 5).setCellValue(telephone);
}
}
//类型判断
public String formatCell(HSSFCell cell) {
if (cell == null) {
return "";
}
switch (cell.getCellType()) {
case HSSFCell.CELL_TYPE_NUMERIC:
//日期格式的处理
if (HSSFDateUtil.isCellDateFormatted(cell)) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
return sdf.format(HSSFDateUtil.getJavaDate(cell.getNumericCellValue())).toString();
}
return String.valueOf(cell.getNumericCellValue());
//字符串
case HSSFCell.CELL_TYPE_STRING:
return cell.getStringCellValue();
// 公式
case HSSFCell.CELL_TYPE_FORMULA:
return cell.getCellFormula();
// 空白
case HSSFCell.CELL_TYPE_BLANK:
return "";
// 布尔取值
case HSSFCell.CELL_TYPE_BOOLEAN:
return cell.getBooleanCellValue() + "";
//错误类型
case HSSFCell.CELL_TYPE_ERROR:
return cell.getErrorCellValue() + "";
}
return "";
}