永发信息网

java导出复杂Excel报表求帮助

答案:2  悬赏:0  手机版
解决时间 2021-01-27 23:16
  • 提问者网友:斑駁影
  • 2021-01-26 23:38
java导出复杂Excel报表求帮助
最佳答案
  • 五星知识达人网友:酒者煙囻
  • 2021-01-27 00:55
就是使用poi工具,你自己去下载poi.jar吧。
public class CreateXL
{
 public static String xlsFile="test.xls"; //产生的Excel文件的名称
 public static void main(String args[])
 {
  try
  {
   HSSFWorkbook workbook = new HSSFWorkbook(); //产生工作簿对象
   HSSFSheet sheet = workbook.createSheet(); //产生工作表对象
   //设置第一个工作表的名称为firstSheet
   //为了工作表能支持中文,设置字符编码为UTF_16
   workbook.setSheetName(0,"firstSheet",HSSFWorkbook.ENCODING_UTF_16);
   //产生一行
   HSSFRow row = sheet.createRow((short)0);
   //产生第一个单元格
   HSSFCell cell = row.createCell((short) 0);
   //设置单元格内容为字符串型
   cell.setCellType(HSSFCell.CELL_TYPE_STRING);
   //为了能在单元格中写入中文,设置字符编码为UTF_16。
   cell.setEncoding(HSSFCell.ENCODING_UTF_16);
   //往第一个单元格中写入信息
   cell.setCellValue("测试成功");
   FileOutputStream fOut = new FileOutputStream(xlsFile);
   workbook.write(fOut);
   fOut.flush();
   fOut.close();
   System.out.println("文件生成...");
   //以下语句读取生成的Excel文件内容
   FileInputStream fIn=new FileInputStream(xlsFile);
   HSSFWorkbook readWorkBook= new HSSFWorkbook(fIn);
   HSSFSheet readSheet= readWorkBook.getSheet("firstSheet");
   HSSFRow readRow =readSheet.getRow(0);
   HSSFCell readCell = readRow.getCell((short)0);
   System.out.println("第一个单元是:" + readCell.getStringCellValue());
  }
  catch(Exception e)
  {
   System.out.println(e);
  }
 }
}
  与数据库结合使用

  使用POI,结合JDBC编程技术,我们就可以方便地将数据库中的数据导出生成Excel报表。其关键代码如下:



public static void resultSetToExcel(ResultSet rs,String xlsName,String sheetName) throws Exception
{
 HSSFWorkbook workbook = new HSSFWorkbook();
 HSSFSheet sheet = workbook.createSheet();
 workbook.setSheetName(0,sheetName,HSSFWorkbook.ENCODING_UTF_16);
 HSSFRow row= sheet.createRow((short)0);;
 HSSFCell cell;
 ResultSetMetaData md=rs.getMetaData();
 int nColumn=md.getColumnCount();
 //写入各个字段的名称
 for(int i=1;i<=nColumn;i++)
 {
  cell = row.createCell((short)(i-1));
  cell.setCellType(HSSFCell.CELL_TYPE_STRING);
  cell.setEncoding(HSSFCell.ENCODING_UTF_16);
  cell.setCellValue(md.getColumnLabel(i));
 }

 int iRow=1;
 //写入各条记录,每条记录对应Excel中的一行
 while(rs.next())
 {row= sheet.createRow((short)iRow);;
  for(int j=1;j<=nColumn;j++)
  {
   cell = row.createCell((short)(j-1));
   cell.setCellType(HSSFCell.CELL_TYPE_STRING);
   cell.setEncoding(HSSFCell.ENCODING_UTF_16);
   cell.setCellValue(rs.getObject(j).toString());
  }
  iRow++;
 }
 FileOutputStream fOut = new FileOutputStream(xlsName);
 workbook.write(fOut);
 fOut.flush();
 fOut.close();
 JOptionPane.showMessageDialog(null,"导出数据成功!");
}
全部回答
  • 1楼网友:玩家
  • 2021-01-27 01:50
前台
new ext.button({
 text:'导出excel',
 handler:function(){
 var appwindow = window.open("getexecl.do"); //调action得到数据生成execl格式的数据,response发往前台 
 appwindow.focus();
 }
})


后台: filename是导出的文件名,heads是excel表头,datalist是数据
public void createexcelstream(httpservletresponse response,string filename,string[] heads,list<string[]> datalist){ 
 try{
 outputstream os = response.getoutputstream(); 
 writableworkbook wbook = workbook.createworkbook(os); 
 writablesheet wsheet = wbook.createsheet(filename, 0); 
 for(int i=0 ; i<heads.length ; i++) {
 label label =new label(i,0 ,heads[i]);
 wsheet.addcell(label); 
 }
 for(int i=0 ;i<datalist.size();i++) {
 for(int j=0 ; j<datalist.get(i).length ; j++){
 label label =new label(j,i+1 ,datalist.get(i)[j]);
 wsheet.addcell(label); 
 }
 }
 response.setheader("content-disposition","attachment;" +
 "filename="+ new string(filename.getbytes("gbk"), "iso_8859_1") +".xls"); 
 response.setcontenttype("application/vnd.ms-excel"); 
 wbook.write(); 
 wbook.close(); 
 os.close();
 }catch(exception e){
 e.printstacktrace();
 }
 } }
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯