[版权申明:本文系作者原创,转载请注明出处]
文章出处:http://blog.csdn.net/sdksdk0/article/details/53393453
作者:朱培 ID:sdksdk0


这篇文章主要分享的是使用apache的poi来实现数据导出到excel的功能,这里提供三种解决方案。你可以使用最原始最简单的一步步添加样式或者数据,你也可以通过一个模板来进行模板化的导出,也可以对百万级数据进行到处。现在很多人提供导出功能是不支持大数据量的导出的,我记得有的朋友导出3-4万条数据系统就挂掉了。所以对于大量数据导出,本文也提供解决方案。

1、POI解决的问题

关于POI的简介,我这里就不再提及,你可以参考这篇文章:http://blog.csdn.net/sdksdk0/article/details/52557755。

JXL,POI都是操作excel
Excel一些企业小的应用都直接用excel来实现,例如:工资报表,人员名单,进销存
作为数据的备份和恢复(导入、导出)

Jxl它只能操作excel 2003版本,它导入导出数据量小时性能很高
POI 它可以操作office系列软件word、excel、ppt、visio(画网络布局、家装),在早期版本中它在导出海量数据时,容易崩溃。在新版本中它解决了这个海量数据时,进行了优化,解决了这个问题。我们现在一般是使用3.0版本之后的。

目前常见读写Excel的工具类开源javaAPI有两种方式,
一个是JXL(Java Excel API) 官网地址:http://jexcelapi.sourceforge.net/
一个是Apache的POI(Poor Obfuscation Implementation)官网地址:http://poi.apache.org/

POI支持微软的OLE2格式文件Office 2003及以下版本;同时支持微软的OOXML(Office Open XML)标准,也就是Office 2007以上版本。JXL只能实现对Excel 2003以下版本的支持。

POI使用HFFS对象操作OLE2格式Excel,文件后缀为.xls的;使用XSSF、SXSSF对象操作OOXML格式Excel,文件后缀为.xlsx的。

对于OLE2版本的Excel,一个Sheet工作表它的行最多支持到65536行,列支持到256列;
对于OOXML版本的Excel,一个Sheet工作表它的行支持到1048576行,列支持到65536列。

2.POI的入门

当然咯,如果你的是maven工程,需要先把坐标导进来。不然怎么运行呢,你说是吧,哈哈!

 <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>3.9</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>3.9</version></dependency>

如果你的是普通的工程,那么自己导个jar包进去吧!

使用poi只需要7个步骤,非常简单。

//基本使用

@Testpublic void HSSF() throws IOException{//1.创建一个工作簿Workbook wb=new HSSFWorkbook();//2.创建一个工作表sheetSheet  sheet=wb.createSheet();//3.创建一个行对象Row  nRow=sheet.createRow(4); //从0开始//4、创建一个单元格对象,指定列Cell nCell=nRow.createCell(4);//5、设置内容nCell.setCellValue("指令汇科技");//6.保存OutputStream stream=new FileOutputStream(new File("D:\\test1.xls")); wb.write(stream);//7.关闭stream.close();}

前面的这种方式导出来的excel表格都是非常原始的,非常简陋的,那么我们想添加一些样式怎么办呢?
so,我们可以使用下面这种方式:我们可以使用CellStyle来设置样式。

 @Testpublic void HSSF1() throws IOException{//1.创建一个工作簿Workbook wb=new HSSFWorkbook();//2.创建一个工作表sheetSheet  sheet=wb.createSheet();//3.创建一个行对象Row  nRow=sheet.createRow(4); //从0开始//4、创建一个单元格对象,指定列Cell nCell=nRow.createCell(4);//5、设置内容nCell.setCellValue("指令汇科技");CellStyle titleStyle=wb.createCellStyle();Font font = wb.createFont();font.setFontName("微软雅黑");  //设置字体类型font.setFontHeightInPoints((short) 26);  //设置字体大小titleStyle.setFont(font);nCell.setCellStyle(titleStyle);//6.保存OutputStream stream=new FileOutputStream(new File("D:\\test1.xls")); wb.write(stream);//7.关闭stream.close();}

3.报表打印

说到这里,我就需要打印一个如下图所示的表。

这些数据我都是从数据库里面查询出来的,和我的业务是有关系的咯,这个如何从数据库里面把这些数据查出来我就不说了,这里假设你已经有这些数据了,(真正感兴趣的,可以去下载我的这个项目源码查看哦,文末提供下载地址)。

关于把这个报表打印出来,这里我提供3种方式

方案1

就是直接在代码里面设置表格的列宽、样式等。

1、创建一个工作簿:

    Workbook wb=new HSSFWorkbook();

2、…反正就是前面说的那7个步骤啦!。

这里我要说的是添加样式。

对于大标题:例如我这里是2016年11月出货表。

 //大标题的样式public CellStyle bigTitle(Workbook wb,CellStyle nStyle,Font font){font.setFontName("宋体");font.setFontHeightInPoints((short) 16); //字体加粗font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);//横向居中nStyle.setAlignment(CellStyle.ALIGN_CENTER);//纵向居中nStyle.setVerticalAlignment(CellStyle.VERTICAL_CENTER);     //单元格垂直居中nStyle.setFont(font);return nStyle;}

然后代在码中进行调用:

    //大标题,合并单元格sheet.addMergedRegion(new CellRangeAddress(0,0,1,9));  //开始行,结束行,开始列,结束列//合并单元格的内容写在合并前第一个单元格中nRow=sheet.createRow(rowNo++);nRow.setHeightInPoints(36);nCell=nRow.createCell(1);nCell.setCellValue(inputDate.replace("-0", "年").replaceFirst("-", "年")+"月份出货表");nCell.setCellStyle(this.bigTitle(wb, nStyle, font));

然后是标题栏,就是我的那个客户、订单号这些内容哈!

    //标题样式public CellStyle Title(Workbook wb,CellStyle nStyle,Font font){font.setFontName("黑体");font.setFontHeightInPoints((short) 12); //横向居中nStyle.setAlignment(CellStyle.ALIGN_CENTER);//纵向居中nStyle.setVerticalAlignment(CellStyle.VERTICAL_CENTER);     //单元格垂直居中//表格线nStyle.setBorderTop(CellStyle.BORDER_THICK);            //粗实线nStyle.setBorderBottom(CellStyle.BORDER_THIN);          //实线nStyle.setBorderLeft(CellStyle.BORDER_THIN);            nStyle.setBorderRight(CellStyle.BORDER_THIN);           nStyle.setFont(font);return nStyle;}

在代码中调用:

 String[] title=new     String[]{"客户","订单号","货号","数量","工厂","附件","工厂交期","船期","贸易条款"  };nRow=sheet.createRow(rowNo++);nRow.setHeightInPoints(26.25f);//初始化nStyle=wb.createCellStyle();font=wb.createFont();for(int  i=0;i<title.length;i++){nCell=nRow.createCell(i+1);nCell.setCellValue(title[i]);nCell.setCellStyle(this.Title(wb, nStyle, font));}

接下来是内容,这里的填充数据都是从数据库中查询出来的:

//文字样式public CellStyle Text(Workbook wb,CellStyle nStyle,Font font){font.setFontName("Times New Roman");font.setFontHeightInPoints((short) 10); //横向居中nStyle.setAlignment(CellStyle.ALIGN_CENTER);//纵向居中nStyle.setVerticalAlignment(CellStyle.VERTICAL_CENTER);     //单元格垂直居中//表格线nStyle.setBorderBottom(CellStyle.BORDER_THIN);          //实线nStyle.setBorderLeft(CellStyle.BORDER_THIN);            nStyle.setBorderRight(CellStyle.BORDER_THIN);           //实线nStyle.setFont(font);return nStyle;}

填充数据:

 //初始化nStyle=wb.createCellStyle();font=wb.createFont();//换行for(int j=0;j<dataList.size();j++){OutProductVO op=dataList.get(j);colNo=1;nRow=sheet.createRow(rowNo++);nCell=nRow.createCell(colNo++);nCell.setCellValue(op.getCustomName());nCell.setCellStyle(this.Text(wb, nStyle, font));nCell=nRow.createCell(colNo++);nCell.setCellValue(op.getProductNo());nCell.setCellStyle(this.Text(wb, nStyle, font));nCell=nRow.createCell(colNo++);nCell.setCellValue(op.getContractNo());nCell.setCellStyle(this.Text(wb, nStyle, font));nCell=nRow.createCell(colNo++);nCell.setCellValue(op.getCnumber());nCell.setCellStyle(this.Text(wb, nStyle, font));nCell=nRow.createCell(colNo++);nCell.setCellValue(op.getFactoryName());nCell.setCellStyle(this.Text(wb, nStyle, font));nCell=nRow.createCell(colNo++);nCell.setCellValue(op.getExts());nCell.setCellStyle(this.Text(wb, nStyle, font));nCell=nRow.createCell(colNo++);nCell.setCellValue(op.getDeliveryPeriod());nCell.setCellStyle(this.Text(wb, nStyle, font));nCell=nRow.createCell(colNo++);nCell.setCellValue(op.getSpipTime());nCell.setCellStyle(this.Text(wb, nStyle, font));nCell=nRow.createCell(colNo++);nCell.setCellValue(op.getTradeTerms());nCell.setCellStyle(this.Text(wb, nStyle, font));}

最后提供一个下载的方法:

    //下载DownloadUtil dUtil=new DownloadUtil();ByteArrayOutputStream os=new ByteArrayOutputStream();wb.write(os);dUtil.download(os, response, "出货表.xls");

完整代码如下:

 //方案1@RequestMapping("/cargo/outproduct/print.action")public void print(String inputDate,HttpServletResponse  response) throws IOException{List<OutProductVO> dataList = outProductService.find(inputDate);Workbook wb=new HSSFWorkbook();Sheet sheet = wb.createSheet();Row nRow=null;Cell nCell=null;//行号int  rowNo=0;//列号int colNo=1;//声明样式对象和字体对象CellStyle nStyle=wb.createCellStyle();Font font = wb.createFont();//列宽sheet.setColumnWidth(0,2*300);sheet.setColumnWidth(1,26*300);sheet.setColumnWidth(2,12*300);sheet.setColumnWidth(3,29*300);sheet.setColumnWidth(4,10*300);sheet.setColumnWidth(5,12*300);sheet.setColumnWidth(6,8*300);sheet.setColumnWidth(7,10*300);sheet.setColumnWidth(8,10*300);sheet.setColumnWidth(9,9*300);//大标题,合并单元格sheet.addMergedRegion(new CellRangeAddress(0,0,1,9));  //开始行,结束行,开始列,结束列//合并单元格的内容写在合并前第一个单元格中nRow=sheet.createRow(rowNo++);nRow.setHeightInPoints(36);nCell=nRow.createCell(1);nCell.setCellValue(inputDate.replace("-0", "年").replaceFirst("-", "年")+"月份出货表");nCell.setCellStyle(this.bigTitle(wb, nStyle, font));String[] title=new  String[]{"客户","订单号","货号","数量","工厂","附件","工厂交期","船期","贸易条款"  };nRow=sheet.createRow(rowNo++);nRow.setHeightInPoints(26.25f);//初始化nStyle=wb.createCellStyle();font=wb.createFont();for(int  i=0;i<title.length;i++){nCell=nRow.createCell(i+1);nCell.setCellValue(title[i]);nCell.setCellStyle(this.Title(wb, nStyle, font));}//初始化nStyle=wb.createCellStyle();font=wb.createFont();//换行for(int j=0;j<dataList.size();j++){OutProductVO op=dataList.get(j);colNo=1;nRow=sheet.createRow(rowNo++);nCell=nRow.createCell(colNo++);nCell.setCellValue(op.getCustomName());nCell.setCellStyle(this.Text(wb, nStyle, font));nCell=nRow.createCell(colNo++);nCell.setCellValue(op.getProductNo());nCell.setCellStyle(this.Text(wb, nStyle, font));nCell=nRow.createCell(colNo++);nCell.setCellValue(op.getContractNo());nCell.setCellStyle(this.Text(wb, nStyle, font));nCell=nRow.createCell(colNo++);nCell.setCellValue(op.getCnumber());nCell.setCellStyle(this.Text(wb, nStyle, font));nCell=nRow.createCell(colNo++);nCell.setCellValue(op.getFactoryName());nCell.setCellStyle(this.Text(wb, nStyle, font));nCell=nRow.createCell(colNo++);nCell.setCellValue(op.getExts());nCell.setCellStyle(this.Text(wb, nStyle, font));nCell=nRow.createCell(colNo++);nCell.setCellValue(op.getDeliveryPeriod());nCell.setCellStyle(this.Text(wb, nStyle, font));nCell=nRow.createCell(colNo++);nCell.setCellValue(op.getSpipTime());nCell.setCellStyle(this.Text(wb, nStyle, font));nCell=nRow.createCell(colNo++);nCell.setCellValue(op.getTradeTerms());nCell.setCellStyle(this.Text(wb, nStyle, font));}//OutputStream  os=new FileOutputStream(new File("D:\\outProduct.xls"));/*wb.write(os);os.flush();os.close();*///下载DownloadUtil dUtil=new DownloadUtil();ByteArrayOutputStream os=new ByteArrayOutputStream();wb.write(os);dUtil.download(os, response, "出货表.xls");}//大标题的样式public CellStyle bigTitle(Workbook wb,CellStyle nStyle,Font font){font.setFontName("宋体");font.setFontHeightInPoints((short) 16); //字体加粗font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);//横向居中nStyle.setAlignment(CellStyle.ALIGN_CENTER);//纵向居中nStyle.setVerticalAlignment(CellStyle.VERTICAL_CENTER);     //单元格垂直居中nStyle.setFont(font);return nStyle;}//标题样式public CellStyle Title(Workbook wb,CellStyle nStyle,Font font){font.setFontName("黑体");font.setFontHeightInPoints((short) 12); //横向居中nStyle.setAlignment(CellStyle.ALIGN_CENTER);//纵向居中nStyle.setVerticalAlignment(CellStyle.VERTICAL_CENTER);     //单元格垂直居中//表格线nStyle.setBorderTop(CellStyle.BORDER_THICK);            //粗实线nStyle.setBorderBottom(CellStyle.BORDER_THIN);          //实线nStyle.setBorderLeft(CellStyle.BORDER_THIN);            //比较粗实线nStyle.setBorderRight(CellStyle.BORDER_THIN);           //实线nStyle.setFont(font);return nStyle;}//文字样式public CellStyle Text(Workbook wb,CellStyle nStyle,Font font){font.setFontName("Times New Roman");font.setFontHeightInPoints((short) 10); //横向居中nStyle.setAlignment(CellStyle.ALIGN_CENTER);//纵向居中nStyle.setVerticalAlignment(CellStyle.VERTICAL_CENTER);     //单元格垂直居中//表格线nStyle.setBorderBottom(CellStyle.BORDER_THIN);          //实线nStyle.setBorderLeft(CellStyle.BORDER_THIN);            //比较粗实线nStyle.setBorderRight(CellStyle.BORDER_THIN);           //实线nStyle.setFont(font);return nStyle;}

方案2

前面提到的方法是要一个个的设置样式,感觉还是比较复杂的,那么如果我们提前做好一个模板,然后把通过代码看来读取模板的excel文件中的样式,然后按照这种模板的格式再去填充数据的话,效果应该会更好一点的噢!

1、首先要获取模板文件的路径,就是你把这个文件放在哪里了。

 //获取模板存放的路径String path=request.getSession().getServletContext().getRealPath("/")+"/make/xlsprint/";InputStream  is=new FileInputStream(new File(path+"出货表.xls"));

2、获取模板上的单元格样式

nRow=sheet.getRow(2);

3、获取需要的样式。getCell()指的就是从第几列获取。我们是从0开始计算的。

    //客户的样式nCell=nRow.getCell(1);CellStyle customStyle=nCell.getCellStyle();//订单的样式nCell=nRow.getCell(2);CellStyle contractNoStyle=nCell.getCellStyle();//货号的样式nCell=nRow.getCell(3);CellStyle productNoStyle=nCell.getCellStyle();//数量的样式nCell=nRow.getCell(4);CellStyle numStyle=nCell.getCellStyle();//生产厂家的样式nCell=nRow.getCell(5);CellStyle factoryStyle=nCell.getCellStyle();//日期的样式nCell=nRow.getCell(6);CellStyle dateStyle=nCell.getCellStyle();//贸易条款nCell=nRow.getCell(8);CellStyle tradeStyle=nCell.getCellStyle();

4、把样式设置到表格的值中。

nCell.setCellStyle(customStyle);

完整代码如下:

    //方案2//模板@RequestMapping("/cargo/outproduct/printTemple.action")public void printTemple(String inputDate,HttpServletRequest request,HttpServletResponse  response) throws IOException{List<OutProductVO> dataList = outProductService.find(inputDate);//获取模板存放的路径String path=request.getSession().getServletContext().getRealPath("/")+"/make/xlsprint/";InputStream  is=new FileInputStream(new File(path+"出货表.xls"));Workbook wb=new HSSFWorkbook(is);Sheet sheet = wb.getSheetAt(0);Row nRow=null;Cell nCell=null;//行号int  rowNo=0;//列号int colNo=1;//获取模板上的单元格样式nRow=sheet.getRow(2);//客户的样式nCell=nRow.getCell(1);CellStyle customStyle=nCell.getCellStyle();//订单的样式nCell=nRow.getCell(2);CellStyle contractNoStyle=nCell.getCellStyle();//货号的样式nCell=nRow.getCell(3);CellStyle productNoStyle=nCell.getCellStyle();//数量的样式nCell=nRow.getCell(4);CellStyle numStyle=nCell.getCellStyle();//生产厂家的样式nCell=nRow.getCell(5);CellStyle factoryStyle=nCell.getCellStyle();//日期的样式nCell=nRow.getCell(6);CellStyle dateStyle=nCell.getCellStyle();//贸易条款nCell=nRow.getCell(8);CellStyle tradeStyle=nCell.getCellStyle();//大标题nRow=sheet.getRow(rowNo++);  //获取一个行对象nCell=nRow.getCell(colNo);  //获取一个单元格对象nCell.setCellValue(inputDate.replace("-0", "年").replaceFirst("-", "年")+"月份出货表");//跳过静态表格头rowNo++;//换行for(int j=0;j<dataList.size();j++){OutProductVO op=dataList.get(j);colNo=1;nRow=sheet.createRow(rowNo++);nCell=nRow.createCell(colNo++);nCell.setCellValue(op.getCustomName());nCell.setCellStyle(customStyle);nCell=nRow.createCell(colNo++);nCell.setCellValue(op.getContractNo());nCell.setCellStyle(contractNoStyle);nCell=nRow.createCell(colNo++);nCell.setCellValue(op.getProductNo());nCell.setCellStyle(productNoStyle);nCell=nRow.createCell(colNo++);nCell.setCellValue(op.getCnumber());nCell.setCellStyle(numStyle);nCell=nRow.createCell(colNo++);nCell.setCellValue(op.getFactoryName());nCell.setCellStyle(factoryStyle);nCell=nRow.createCell(colNo++);nCell.setCellValue(op.getDeliveryPeriod());nCell.setCellStyle(dateStyle);nCell=nRow.createCell(colNo++);nCell.setCellValue(op.getSpipTime());nCell.setCellStyle(dateStyle);nCell=nRow.createCell(colNo++);nCell.setCellValue(op.getTradeTerms());nCell.setCellStyle(tradeStyle);}//下载DownloadUtil dUtil=new DownloadUtil();ByteArrayOutputStream os=new ByteArrayOutputStream();wb.write(os);dUtil.download(os, response, "出货表.xls");os.flush();os.close();}

方案3

嗯,好吧,你可能觉得上面这个模板方式还挺好的,好吧,那我们再来做一个优化!我在开篇就提到了,有的朋友导出数据3-4万的时候系统就撑不下去了,所以我们对于百万级的数据导出还需要进行优化。其实非常简单。
我们前面导出的数据是一个xls的文件,熟悉word的朋友都知道,office1997-2003版本的excel是xls版本的。我们同样还有2007及其以上的版本,是xlsx格式的后缀文件。所以我们可以把文件导出为xlsx的文件。

修改:

 Workbook wb=new HSSFWorkbook(is);Sheet sheet = wb.getSheetAt(0);

 Workbook wb=new XSSFWorkbook(is);  //2007版本Sheet sheet = wb.getSheetAt(0);

就可以了,是不是非常简单,哈哈,当然咯,你的这个模板文件也需要换成xlsx的文件噢,导出文件也需要换成xlsx格式的。

4、excel数据批量导入

如果有需要的朋友,也可以尝试一下批量导入功能。

    //导入@RequestMapping("/basicinfo/factory/importInfo.action")public String importInfo() throws InvalidFormatException, IOException{/** 开发步骤:* 1、读取xls文件;创建模板,设置所有单元格为文本类型,然后黏贴数据到editplus,再黏贴到excel中,这样就不怕读取类型错误。* 2、拼接成sql* 3、批量插入*///实现自动识别读取的xls版本,创建其对应的对象; 2003 HSSFWorkbook对象;2007 XSSFWorkbook对象String sql = "";File file = new File("c:\\7F28E200.xlsx");Workbook wb = new WorkbookFactory().create(file);       //自动识别excel版本Sheet sheet = wb.getSheetAt(0);Row nRow = sheet.getRow(1);Cell nCell = null;//是否标题行,标题行还可以多列int beginRowNo = 0;                             //开始行int endRowNo =  sheet.getLastRowNum();          //结束行int beginColNo = 0;                             //开始列int endColNo = nRow.getLastCellNum();           //结束列StringBuffer sBuf = new StringBuffer();for(int i=beginRowNo;i<endRowNo;i++){nRow = sheet.getRow(i);                     //行对象//          //          for(int j=beginColNo;j<endColNo;j++){//              nCell = nRow.getCell(j++);              //单元格//              System.out.println(nCell.toString());//          }beginColNo = 0;                             //开始列
`// `       sBuf.append("insert into factory_c (FACTORY_ID,FULL_NAME,FACTORY_NAME,CONTACTS,PHONE,MOBILE,FAX,INSPECTOR,CNOTE,ORDER_NO,STATE,CREATE_BY,CREATE_DEPT,CREATE_TIME) ");sBuf.append("values(");nCell = nRow.getCell(beginColNo++); if(nCell==null){sBuf.append("''");}else{sBuf.append("'").append(UtilFuns.convertNull(nCell.getStringCellValue())).append("'");}sBuf.append(",");nCell = nRow.getCell(beginColNo++);     if(nCell==null){sBuf.append("''");}else{sBuf.append("'").append(UtilFuns.convertNull(nCell.getStringCellValue())).append("'");}sBuf.append(",");nCell = nRow.getCell(beginColNo++);     if(nCell==null){sBuf.append("''");}else{sBuf.append("'").append(UtilFuns.convertNull(nCell.getStringCellValue())).append("'");}sBuf.append(",");nCell = nRow.getCell(beginColNo++);     if(nCell==null){sBuf.append("''");}else{sBuf.append("'").append(UtilFuns.convertNull(nCell.getStringCellValue())).append("'");}sBuf.append(",");nCell = nRow.getCell(beginColNo++);     if(nCell==null){sBuf.append("''");}else{sBuf.append("'").append(UtilFuns.convertNull(nCell.getStringCellValue())).append("'");}sBuf.append(",");nCell = nRow.getCell(beginColNo++);     if(nCell==null){sBuf.append("''");}else{sBuf.append("'").append(UtilFuns.convertNull(nCell.getStringCellValue())).append("'");}sBuf.append(",");nCell = nRow.getCell(beginColNo++);     if(nCell==null){sBuf.append("''");}else{sBuf.append("'").append(UtilFuns.convertNull(nCell.getStringCellValue())).append("'");}sBuf.append(",");nCell = nRow.getCell(beginColNo++);     if(nCell==null){sBuf.append("''");}else{sBuf.append("'").append(UtilFuns.convertNull(nCell.getStringCellValue())).append("'");}sBuf.append(",");nCell = nRow.getCell(beginColNo++);     if(nCell==null){sBuf.append("''");}else{sBuf.append("'").append(UtilFuns.convertNull(nCell.getStringCellValue())).append("'");}sBuf.append(",");//orderNonCell = nRow.getCell(beginColNo++);     if(nCell==null){sBuf.append("null");}else{sBuf.append(UtilFuns.convertNull(nCell.getStringCellValue()));}sBuf.append(",");//statenCell = nRow.getCell(beginColNo++);     if(nCell==null){sBuf.append("null");}else{sBuf.append(UtilFuns.convertNull(nCell.getStringCellValue()));}sBuf.append(",");nCell = nRow.getCell(beginColNo++);     if(nCell==null){sBuf.append("''");}else{sBuf.append("'").append(UtilFuns.convertNull(nCell.getStringCellValue())).append("'");}sBuf.append(",");nCell = nRow.getCell(beginColNo++);     if(nCell==null){sBuf.append("''");}else{sBuf.append("'").append(UtilFuns.convertNull(nCell.getStringCellValue())).append("'");}sBuf.append(",");nCell = nRow.getCell(beginColNo++);     if(nCell==null){sBuf.append("NULL");}else{sBuf.append("'").append(UtilFuns.convertNull(nCell.getStringCellValue())).append("'");}sBuf.append(");");}for(String s : sBuf.toString().split(";")){System.out.println(s);}sqlDao.batchSQL(sBuf.toString().split(";"));        //执行insert sqlreturn "redirect:/basicinfo/factory/list.action";}

关于POI的文件下载你也可以参考这篇文章:http://blog.csdn.net/article/detailssdksdk0//52557755

源码下载:https://github.com/sdksdk0/JK

关于poi的一些基本操作方法和api文档下载地址:http://download.csdn.net/detail/sdksdk0/9696976

使用POI实现报表打印功能相关推荐

  1. 能实现报表打印功能的报表软件有哪些?

    ​虽然表格制作软件可以在电脑显示屏上展示,但许多时候更需要纸张的直观展示分析,这就考验了报表工具的表格制作软件打印功能,表格制作软件离不开打印,打印就少不了要批量.因此本文旨在从多参打印,分页打印,缩 ...

  2. 【转】VS2013自带报表+打印功能

    VS自带报表控件和打印功能,这样就给我们这些编程者带来了很大的方便.下面就将我做程序的一些小经历来跟大家一起分享一下. 1,我们右击U层所在文件夹添加"新建项". 2,在弹出的的添 ...

  3. 使用JasperReport报表工具,做出Java项目报表打印功能(一)

    一:介绍 JasperReport是一个强大.灵活的报表生成工具,能够展示丰富的页面内容,并将之转换成PDF,HTML,或者XML格式.该库完全由Java写成,可以用于在各种Java应用程序,包括J2 ...

  4. 安卓手机连接IP100蓝牙打印机实现打印功能

    最近要做两个Android demo .第一个要求用手机蓝牙连接打印机实现手填报表打印功能,第二个是手机蓝牙连接的手持设备,需求同步里面的数据,同步成功后要删除设备里面的数据. 先开始玩的是佳能IP ...

  5. 明宇报表连接mysql_五种主流web报表对比:批量报表打印

    阅读提示: 文章中与FineReport软件使用的相关内容,基于软件的V7.0旧版本编写,不代表软件最新的使用方式. FineReport最新版免费试用:https://www.finereport. ...

  6. 使用FastReport.net 报表在网页上实现打印功能

    这些年的工作当中,最早是在8年前接触到FastReport这个报表工具,从名字上来看,直译过来就是快速报表,正所谓天下武功,唯快不破,FastReport报表早些年确实是制作报表的不二之选,8年前的工 ...

  7. php报表数据打印机,通过打印机打印带打印功能的php表

    我有以下php表,我如何只在php表中添加打印功能?点击一个按钮,下面的表格通过打印机打印,我试过'CTRL P',我只得到页面的html部分示例页眉,页脚,导航栏,而不是结果php结果 echo & ...

  8. PDF报表打印 -- Jasper Report

    一. PDF报表打印概述 1 概述 在企业级应用开发中,报表生成.报表打印下载是其重要的一个环节.在之前的课程中我们已经学习了报表中比较重要的一种:Excel报表.其实除了Excel报表之外,PDF报 ...

  9. 利用XML实现通用WEB报表打印(转载)

    原文地址: http://www.microsoft.com/china/community/Column/65.mspx 利用XML实现通用WEB报表打印 卢彦 方案适用性 . 1. 远程数据打印. ...

  10. Web打印的解决方案之普通报表打印

    做过很多的Web项目,大多数在打印页面内容的时候,采用的都是通过Javascript调用系统内置的打印方法进行打印,也就是调用PrintControl.ExecWB(?,?)实现直接打印和打印预览功能 ...

最新文章

  1. 清华大学开源迁移学习算法库:基于PyTorch实现,支持轻松调用已有算法
  2. 简述linux各个组成部分的定义及功能,Mariadb的架构及相关概念
  3. go语言使用redis —— redigo
  4. centos7 nat模式配置静态ip_Centos7设置静态IP后无法上网的解决方法
  5. nz-input-group is not a known element的解决方法
  6. react学习(4)----两个全选中就是key值一样了
  7. 概率论与数理统计思维导图知识框架_考研概率论与数理统计 综合题型秘籍思维导图① 随机变量1~3章 [21考研上岸之旅]...
  8. 几级工作台做石头高墙_创造与魔法:建筑新手入门攻略,家园建材怎么做
  9. 国庆节前梳理一下需要自己干的工作
  10. 不同方式遍历Map集合
  11. 三星为什么能超越SONY在世界崛起?
  12. 一个WinForm程序的生与死
  13. Elasticsearch-head插件安装
  14. 怎样消掉计算机桌面阴影,怎么去掉桌面阴影 电脑桌面图标出现蓝色阴影怎么办...
  15. 【PAT】PAT那些破事
  16. ORA-29913,ORA-29400,KUP-00554,KUP-01005,KUP-01007 oracle外部表报错解决记录
  17. 商汤科技发布新一代SensePass工业级可视人脸识别门禁全新升级
  18. mcnpf5输出结果_MCNP学习笔记-计数卡F6
  19. Linux各种安装软件包的方式
  20. 第五章 彩色图像处理

热门文章

  1. ENSP-----ISIS协议
  2. 商场收银系统服务器安装在哪里,收银系统怎么安装?详细步骤分享
  3. 五笔字型初学者常见问题答疑
  4. Java生成png文件字体不清晰_导出pdf图片字体模糊
  5. Delphi 德尔菲法
  6. PCB Layout 设计流程
  7. 疲劳检测(Fatigue Detection Algorithm)
  8. ECS Windows 系统蓝屏 (BSOD) 以及停止响应 (Hang) 的处理
  9. 运用ArcGIS对图像进行二值化处理
  10. MAX30102心率血样模块在STM32F103芯片的程序说明