`
liuzm
  • 浏览: 98410 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

java操作Excel(轻松制作报表)

    博客分类:
  • JAVA
阅读更多
在项目中,经常要把数据写成Excel.
所以在这里将介绍java 写Excel 基础操作
想对Excel进行之前,要引进一个包(jxl.jar)。本文章已提供下载
本文章写了二个例子,一个是对静态写入Excel 二是读出数据库的数据写入Excel
代码如下:
第一步 写一个 ExcelOpt 类 
public class ExcelOpt {
    /**
      * 生成一个Excel文件 jxl
         * @param fileName  要生成的Excel文件名 
         * @jxl.jar 版本:2.6
         */  
        public static void writeExcel(String fileName){   
            WritableWorkbook wwb = null;   
            try {   
                //首先要使用Workbook类的工厂方法创建一个可写入的工作薄(Workbook)对象   
                wwb = Workbook.createWorkbook(new File(fileName));
              
            } catch (IOException e) {   
                e.printStackTrace();   
            }   
            if(wwb!=null){   
                //创建一个可写入的工作表   
                //Workbook的createSheet方法有两个参数,第一个是工作表的名称,第二个是工作表在工作薄中的位置   
                WritableSheet ws = wwb.createSheet("工作表名称", 0);   
                   
                //下面开始添加单元格 
               
               
               
             //静态开始  
               // 静态的插入
                for(int i=0;i<10;i++){   
                    for(int j=0;j<5;j++){   
                        //这里需要注意的是,在Excel中,第一个参数表示列,第二个表示行   
                    Label labelC = new Label(j, i, "这是第"+(i+1)+"行,第"+(j+1)+"列");
                        try {   
                            //将生成的单元格添加到工作表中   
                            ws.addCell(labelC);   
                        } catch (RowsExceededException e) {   
                            e.printStackTrace();   
                        } catch (WriteException e) {   
                            e.printStackTrace();   
                        }   
      
                    }   
                }
               
       // 静态结束
            
      // 动态开始 如果想参考动态的,就把静态块注释点
                // 动态的插入表格
//                int j=0; //Excel中 第一行是从0开始
//                Dao dao = new Dao();// 自己写的一个dao
//                List list = dao.voteList(); // 自己写一个你要从数据库读出数据的list
//                Label a = new Label(0,0,"ID"); //这里需要注意的是,在Excel中,第一个参数表示列,第二个表示行   
//                Label b = new Label(1,0,"标题");
//                try {
//                    ws.addCell(a);
//                    ws.addCell(b);
//                } catch (RowsExceededException e1) {
//                    // TODO Auto-generated catch block
//                    e1.printStackTrace();
//                } catch (WriteException e1) {
//                    // TODO Auto-generated catch block
//                    e1.printStackTrace();
//                }
//           
//                for(int i=0;i<list.size();i++){
//                    Hashtable table =(Hashtable) list.get(i);
//                   
//                        Label label = new Label(j,i+1,table.get("id").toString());
//                        Label labela = new Label(j+1,i+1,table.get("title").toString());
//                        try {
//                            ws.addCell(label);
//                            ws.addCell(labela);
//                        } catch (RowsExceededException e) {
//                            // TODO Auto-generated catch block
//                            e.printStackTrace();
//                        } catch (WriteException e) {
//                            // TODO Auto-generated catch block
//                            e.printStackTrace();
//                    }
//                }
//      
               
// 动态结束               
            try {   
                //从内存中写入文件中   
                    wwb.write();   
                //关闭资源,释放内存   
                wwb.close();   
                } catch (IOException e) {   
                    e.printStackTrace();   
                } catch (WriteException e) {   
             e.printStackTrace();   
                }   
        }     
        }
       
       
        /**  
         *   生成一个Excel文件POI
         *   @param   inputFile   输入模板文件路径  
         *   @param   outputFile   输入文件存放于服务器路径  
         *   @param   dataList   待导出数据  
         *   @throws   Exception  
         *   @roseuid:  
         */

public static void exportExcelFile(String inputFile,String outputFile,List dataList) throws Exception{
      //用模板文件构造poi  
      POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream(inputFile));
      //创建模板工作表  
      HSSFWorkbook templatewb = new HSSFWorkbook(fs);
      //直接取模板第一个sheet对象  
      HSSFSheet templateSheet = templatewb.getSheetAt(1);
      //得到模板的第一个sheet的第一行对象   为了得到模板样式  
      HSSFRow templateRow = templateSheet.getRow(0);

      //HSSFSheet   timplateSheet   =   templatewb.getSheetAt(1);  
      //取得Excel文件的总列数  
      int columns = templateSheet.getRow((short) 0)
        .getPhysicalNumberOfCells();
    //  Debug.println("columns   is   :   " + columns);  //=========================
      //创建样式数组  
      HSSFCellStyle styleArray[] = new HSSFCellStyle[columns];

      //一次性创建所有列的样式放在数组里  
      for (int s = 0; s < columns; s++) {
       //得到数组实例  
       styleArray[s] = templatewb.createCellStyle();
      }
      //循环对每一个单元格进行赋值    
      //定位行  
      for (int rowId = 1; rowId < dataList.size(); rowId++) {
       //依次取第rowId行数据   每一个数据是valueList  
       List valueList = (List) dataList.get(rowId - 1);
       //定位列  
       for (int columnId = 0; columnId < columns; columnId++) {
        //依次取出对应与colunmId列的值  
        //每一个单元格的值  
        String dataValue = (String) valueList.get(columnId);
        //取出colunmId列的的style  
        //模板每一列的样式  
        HSSFCellStyle style = styleArray[columnId];
        //取模板第colunmId列的单元格对象  
        //模板单元格对象  
        HSSFCell templateCell = templateRow.getCell((short) columnId);
        //创建一个新的rowId行   行对象  
        //新建的行对象    
        HSSFRow hssfRow = templateSheet.createRow(rowId);
        //创建新的rowId行   columnId列   单元格对象  
        //新建的单元格对象  
        HSSFCell cell = hssfRow.createCell((short) columnId);
        //如果对应的模板单元格   样式为非锁定  
        if (templateCell.getCellStyle().getLocked() == false) {
         //设置此列style为非锁定  
         style.setLocked(false);
         //设置到新的单元格上  
         cell.setCellStyle(style);
        }
        //否则样式为锁定  
        else {
         //设置此列style为锁定  
         style.setLocked(true);
         //设置到新单元格上  
         cell.setCellStyle(style);
        }
        //设置编码  
        cell.setEncoding(HSSFCell.ENCODING_UTF_16);
        //Debug.println("dataValue   :   "   +   dataValue);  
        //设置值   统一为String  
        cell.setCellValue(dataValue);
       }
      }
      //设置输入流  
      FileOutputStream fOut = new FileOutputStream(outputFile);
      //将模板的内容写到输出文件上  
      templatewb.write(fOut);
      fOut.flush();

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

     }

}


第二步  写个main 测试



public static void main(String[] args) {
       
        String liu ="d:\\liuzm.xls";  //写入的路径
        ExcelOpt t = new ExcelOpt();
        t.writeExcel(liu);
   
    }

本篇文章来源于 :刘志猛博客 原文链接:http://www.liuzm.com/article/java/969.htm
http://www.liuzm.com
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics