使用大数据的poi处理对象:SxssfWorkBook
特点:使用一部分对象(100行) 释放一部分对象
注意事项:
1.不支持模板打印
2.不支持太多的样式(64000)
一些字体样式
Font font = wb.createFont();
font.setFontName("黑体");
font.setFontHeightInPoints((short)12);
style.setFont(font);
style.setAlignment(HorizontalAlignment.CENTER); //横向居中
style.setVerticalAlignment(VerticalAlignment.CENTER); //纵向居中
style.setBorderTop(BorderStyle.THIN); //上细线
style.setBorderBottom(BorderStyle.THIN); //下细线
style.setBorderLeft(BorderStyle.THIN); //左细线
style.setBorderRight(BorderStyle.THIN); //右细线
// 根据时间去数据库查询数据 List<对象>
List<ContractProductVo> voList=contractProductService.findByInputDate(companyId,inputDate);
// 使用poi将数据写入excel
// 创建工作薄
Workbook wb=new SXSSFWorkbook(); 大数据提供下载
// 创建工作表
Sheet st = wb.createSheet();
// 统一设置列宽
st.setColumnWidth(1,26*256);
st.setColumnWidth(2,12*256);
st.setColumnWidth(3,29*256);
st.setColumnWidth(4,12*256);
st.setColumnWidth(5,15*256);
st.setColumnWidth(6,10*256);
st.setColumnWidth(7,10*256);
st.setColumnWidth(8,8*256);
// 基本参数设置
int rowIndex=0;
Row row=null;
Cell cell=null;
// 创建行
row=st.createRow(rowIndex++); //0 0+1
//设置行高
row.setHeightInPoints(36f);
// 创建单元格
cell=row.createCell(1);
// 放入内容 2015-01 2015-11
String value = inputDate.replaceAll("-0", "-").replaceAll("-", "年");
cell.setCellValue(value+"月份出货表");
// 设置单元格的样式
cell.setCellStyle(bigTitle(wb));
// 合并单元格
st.addMergedRegion(new CellRangeAddress(0,0,1,8));
// 创建第二行的小标题
row=st.createRow(rowIndex++); //1 1+1
row.setHeightInPoints(26.25f);
// 创建单元格
String[] arr={"","单元格1","单元格1","单元格1","单元格1","单元格1","单元格1","单元格1","单元格1"};
for(int i=1;i<arr.length;i++){
cell=row.createCell(i);
cell.setCellValue(arr[i]);
cell.setCellStyle(title(wb));
}
// 创建所有的数据行
for (ContractProductVo vo : voList) {
for(int i=0;i<5000;i++){
// 创建行
row=st.createRow(rowIndex++);
// 行高
row.setHeightInPoints(24f);
// 单元格
cell=row.createCell(1);
// 设置内容
cell.setCellValue(vo.getCustomName());
// 单元格
cell=row.createCell(2);
// 设置内容
cell.setCellValue(vo.getContractNo());
// 单元格
cell=row.createCell(3);
// 设置内容
cell.setCellValue(vo.getProductNo());
// 单元格
cell=row.createCell(4);
// 设置内容
cell.setCellValue(vo.getCnumber());
// 单元格
cell=row.createCell(5);
// 设置内容
cell.setCellValue(vo.getFactoryName());
// 单元格
cell=row.createCell(6);
// 设置内容
cell.setCellValue(vo.getDeliveryPeriod());
// 单元格
cell=row.createCell(7);
// 设置内容
cell.setCellValue(vo.getShipTime());
// 单元格
cell=row.createCell(8);
// 设置内容
cell.setCellValue(vo.getTradeTerms());
// 设置样式
//cell.setCellStyle(text(wb));
}
}
// 提供excel下载给用户
// 工具类
ByteArrayOutputStream os = new ByteArrayOutputStream();
wb.write(os);
new DownloadUtil().download(os,response,"出货表.xlsx");
}
大数据读取报表
1:
public class ExcelParse {
public void parse (String path) throws Exception {
//解析器
SheetHandler hl = new SheetHandler();
//1.根据 Excel 获取 OPCPackage 对象
OPCPackage pkg = OPCPackage.open(path, PackageAccess.READ);
try {
//2.创建 XSSFReader 对象
XSSFReader reader = new XSSFReader(pkg);
//3.获取 SharedStringsTable 对象
SharedStringsTable sst = reader.getSharedStringsTable();
//4.获取 StylesTable 对象
StylesTable styles = reader.getStylesTable();
XMLReader parser = XMLReaderFactory.createXMLReader();
// 处理公共属性
parser.setContentHandler(new XSSFSheetXMLHandler(styles,sst, hl,
false));
XSSFReader.SheetIterator sheets = (XSSFReader.SheetIterator)
reader.getSheetsData();
//逐行读取逐行解析
while (sheets.hasNext()) {
InputStream sheetstream = sheets.next();
InputSource sheetSource = new InputSource(sheetstream);
try {
parser.parse(sheetSource);
} finally {
sheetstream.close();
}
}
} finally {
pkg.close();
}
}
}
2:
// 处理业务
public class SheetHandler implements XSSFSheetXMLHandler.SheetContentsHandler{
/*
* 1 创建要封装的对象 vo
* 2 过程:将excel中的数据封装给vo对象
* 3 封装完数据打印该对象
*
* */
private ContractProductVo vo;
/*
* 从哪一行开始
* i:行数
*
* */
@Override
public void startRow(int i) {
if(i>=2){
//创建要封装的对象 vo
vo=new ContractProductVo();
}
}
/*
* 代表此行结束
*
* */
@Override
public void endRow(int i) {
//打印对象---保存数据到数据库
System.out.println(vo);
}
/*
* 每一行的单元格数据
* cell:单元格的标号
* cellValue:单元格中的内容
* xssfComment:注释
* */
@Override
public void cell(String cell, String cellValue, XSSFComment xssfComment) {
String name=cell.substring(0,1);
if(vo!=null) switch (name) {
case "B": {
vo.setCustomName(cellValue);
break;
}
case "C": {
vo.setContractNo(cellValue);
break;
}
case "D": {
vo.setProductNo(cellValue);
break;
}
case "E": {
vo.setCnumber(Integer.parseInt(cellValue));
break;
}
case "F": {
vo.setFactoryName(cellValue);
break;
}
case "G": {
try {
vo.setDeliveryPeriod(new SimpleDateFormat("yyyy-MM-dd").parse(cellValue));
} catch (ParseException e) {
e.printStackTrace();
}
break;
}
case "H": {
try {
vo.setShipTime(new SimpleDateFormat("yyyy-MM-dd").parse(cellValue));
} catch (ParseException e) {
e.printStackTrace();
}
break;
}
case "I": {
vo.setTradeTerms(cellValue);
break;
}
}
}
}
3:
public class Demo {
public static void main(String[] args) throws Exception {
new ExcelParse().parse("D:\\测试.xlsx");
}
}