ajie

          Java天下社區(qū) http://www.javatx.cn 歡迎大家上來交流Java技術(shù)
          posts - 4, comments - 8, trackbacks - 0, articles - 0
            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          Excel文檔生成解決方案 (JAVA Servlet)

          Posted on 2005-12-18 00:45 ajie 閱讀(1496) 評論(0)  編輯  收藏
          用到開源軟件POI,詳細(xì)見以下URL:
          http://jakarta.apache.org/poi/index.html

          /**
           * 該類演示了POI的應(yīng)用
           * 版權(quán) 本文版權(quán)屬Java天下
           * Created on 2005-7-22
           
          */

          package bss.servlet;
          import javax.servlet.http.*;
          import javax.servlet.*;
          import org.apache.poi.hssf.usermodel.HSSFCell;
          import org.apache.poi.hssf.usermodel.HSSFRow;
          import org.apache.poi.hssf.usermodel.HSSFSheet;
          import org.apache.poi.hssf.usermodel.HSSFWorkbook;
          import java.io.FileOutputStream;
          import java.sql.CallableStatement;
          import java.sql.Connection;
          import java.sql.DriverManager;
          import java.sql.ResultSet;
          import java.sql.Types;
          import java.util.HashMap;
          import java.util.Iterator;
          import java.util.Vector;
          import java.util.Map;
          import java.text.SimpleDateFormat;
          import java.util.Calendar;
          /**
           * 
          @author ljfan
           * 
           * TODO To change the template for this generated type comment go to Window -
           * Preferences - Java - Code Style - Code Templates
           
          */

          public class IVR_Excel extends HttpServlet {
              
              
          //文檔標(biāo)題數(shù)組名 
              private final static String sTitleArray[]  = "群發(fā)批次""產(chǎn)品代碼""目的省份""目的城市" };
              
          //記錄集列名
              private final static String sColumnArray[] = "push_id""pid""province""gwcity" };
              
              
          /*
               * 按一定的規(guī)則生成文件名
               * 規(guī)則為 IVRExcel_YYYY-MM-dd-mm-SSS.xls
               
          */

              
              
          private static String generateFileName () {
                  String sFileName 
          = "IVRExcel_";
                  SimpleDateFormat sdf 
          = new SimpleDateFormat ("yyyy-MM-dd-HH-mm-SSS");
                  Calendar c 
          = Calendar.getInstance();
                  sFileName 
          += sdf.format(c.getTime());
                  sFileName 
          += ".xls";
                  
          return sFileName;
              }

              
              
          /**
               * 將記錄信息導(dǎo)出為xls格式文件.
               * 
               * 
          @param fieldTitles
               *            工作表的字段標(biāo)題數(shù)組(首行)
               * 
          @param propertyNames
               *            每行記錄對應(yīng)的值對象的屬性名稱數(shù)組
               * 
          @param records
               *            記錄集map, 其中key為記錄集中的列名, value為對應(yīng)列名的值(vector)
               * 
          @param fileName
               *            導(dǎo)出文件的名稱
               
          */

              
          public static void exportXLSFile(String[] fieldTitles,
                      String[] propertyNames, Map records, String fileName) 
          {
                  
          if (fieldTitles.length != propertyNames.length) {
                      
          throw new IllegalArgumentException("工作表的字段標(biāo)題列數(shù)必須和值對象的屬性數(shù)相等!");
                  }

                  HSSFWorkbook workbook 
          = new HSSFWorkbook();
                  HSSFSheet sheet 
          = workbook.createSheet();
                  
          //設(shè)置標(biāo)題
                  HSSFRow row = sheet.createRow(0);
                  
          for (int k = 0; k < fieldTitles.length; k++{
                      HSSFCell cell[] 
          = new HSSFCell[fieldTitles.length];
                      cell[k] 
          = row.createCell((short) k);
                      cell[k].setEncoding(HSSFCell.ENCODING_UTF_16);
                      cell[k].setCellType(HSSFCell.CELL_TYPE_STRING);
                      cell[k].setCellValue(fieldTitles[k]);
                  }

                  
          //寫入數(shù)據(jù)庫中的記錄集數(shù)據(jù)
                  
          //取得記錄集行數(shù)
                  Iterator iter = records.values().iterator();
                  Vector v1 
          = (Vector) iter.next();
                  
          int rowNum = v1.size() + 1;
                  
                  
          for (int i = 1; i < rowNum; i++{
                      HSSFRow _row 
          = sheet.createRow(i);
                      
          for (int j = 0; j < propertyNames.length; j++{
                          Vector value 
          = (Vector) records.get(propertyNames[j]);
                          HSSFCell cell[] 
          = new HSSFCell[propertyNames.length];
                          cell[j] 
          = _row.createCell((short) j);
                          cell[j].setEncoding(HSSFCell.ENCODING_UTF_16);
                          cell[j].setCellType(HSSFCell.CELL_TYPE_STRING);
                          cell[j].setCellValue((String) value.get(i 
          - 1));
                      }

                  }

                  
          try {
                      String outputFile 
          = fileName;
                      FileOutputStream fOut 
          = new FileOutputStream(outputFile);
                      workbook.write(fOut);
                      fOut.flush();
                      fOut.close();
                  }
           catch (Exception e) {
                      System.out.println(e.getMessage());
                  }

              }

              
          public void doGet(HttpServletRequest req, HttpServletResponse resp)
                      
          throws ServletException {
                  
          long start = System.currentTimeMillis();
                  
                  String sRootDir 
          = this.getServletConfig().getServletContext().getRealPath(
                 req.getServletPath());
                  System.out.println(sRootDir);
               
                  
          /*
                * 得到根路徑
                * servlet部署名為ExcelServlet
                
          */

                  
                  sRootDir 
          = sRootDir.substring(0, sRootDir.indexOf("ExcelServlet"));
               
                  
          //先在服務(wù)器根目錄下建Excel目錄
                  sRootDir += "Excel\\";
               sRootDir 
          = sRootDir.replace("\\""\\\\");
               String sOutputPath 
          = generateFileName();
               System.out.println(sRootDir);
               sOutputPath 
          = sRootDir + sOutputPath;
               System.out.println(sOutputPath);
                  
                  
          /*
                   * 獲取URL帶的參數(shù) 
                   * param1 : PushID 
                   * param2 : Province 
                   * param3 : Pid 
                   * param4 : Opp
                   * param5 : StartDate 
                   * param6 : EndDate
                   
          */

                  
                  
          int iID = 0;
                  
          int iOpp = 0;
                  
          if (req.getParameter("ID"!= null{
                      
          try {
                          iID 
          = Integer.parseInt(req.getParameter("ID"));
                      }
           catch (Exception e) {
                          iID 
          = 0;
                      }

                  }

                  
          if (req.getParameter("opp"!= null{
                      
          try {
                          iOpp 
          = Integer.parseInt(req.getParameter("opp"));
                      }
           catch (Exception e) {
                          iOpp 
          = 0;
                      }

                  }

                  String sPid 
          = req.getParameter("pid").trim();
                  String sProvince 
          = req.getParameter("province").trim();
                  String sStartDate 
          = req.getParameter("StartDate");
                  
          if (sStartDate == null)
                      sStartDate 
          = "";
                  String sEndDate 
          = req.getParameter("EndDate");
                  
          if (sEndDate == null)
                      sEndDate 
          = "";
                  
                  
          //get data from DB
                  Map DBMap = getFromDB(iID, sProvince, sPid, iOpp, sStartDate, sEndDate );
                  
                  exportXLSFile(sTitleArray, sColumnArray, DBMap, sOutputPath);
                  
                  
          long end = System.currentTimeMillis();
                  System.out.println(
          "Excel文檔已經(jīng)生成,共花費(fèi): " + (end-start) +" ms");
               
              }

              
           
          public void doPost(HttpServletRequest res, HttpServletResponse resp)
                      
          throws ServletException {
                  doGet(res, resp);
              }

              
              
          public static Map getFromDB(int iID, String sProvince, String sPid, int iOpp, String sStartDate, String sEndDate) {
                  Map map 
          = new HashMap();
                  
                  Connection con 
          = null;
                  CallableStatement cstmt 
          = null;
                  ResultSet rs 
          = null;
                  String sDBURL 
          = "172.16.18.113";
                  String sDBName 
          = "DetailQuery";
                  String sLoginNameUser 
          = "*****";
                  String sPasswordUser 
          = "*****";
                  String sTitles[] 
          = "群發(fā)批次""產(chǎn)品代碼""目的省份""目的城市" };
                  String sColumn[] 
          = "push_id""pid""province""gwcity" };
                  Vector v[] 
          = new Vector[sColumn.length];
                  
          for (int i = 0; i < sColumn.length; i++{
                      v[i] 
          = new Vector();
                  }

                  
          //get ResultSet from db
                  try {
                      Class.forName(
          "com.microsoft.jdbc.sqlserver.SQLServerDriver");
                      con 
          = DriverManager.getConnection("jdbc:microsoft:sqlserver://"
                              
          + sDBURL + ":1433;Databasename=" + sDBName, sLoginNameUser,
                              sPasswordUser);
                      cstmt 
          = con
                              .prepareCall(
          "{? = call RED_P_SMSPUSH_Query_IVR_main_demo (?, ?, ?, ?, ?, ?)}");
                      cstmt.registerOutParameter(
          1, Types.INTEGER);
                      cstmt.setInt(
          2, iID);
                   cstmt.setString(
          3, sProvince);
                   cstmt.setString(
          4, sPid);
                   cstmt.setInt(
          5, iOpp);
                   cstmt.setString(
          6, sStartDate);
                   cstmt.setString(
          7, sEndDate);
                   cstmt.execute();
                   rs 
          = cstmt.getResultSet();
                      
          while (rs.next()) {
                         
          for (int i = 0; i < sColumn.length; i++{
                             v[i].add(rs.getString(sColumn[i]));
                         }

                      }

                      
                      
          for (int i = 0; i < sColumn.length; i++{
                          map.put(sColumn[i], v[i]);
                      }

                      rs.close();
                      cstmt.close();
                      con.close();
                  }
           catch (Exception e) {
                      System.out.println(e.getMessage());
                  }

                  
          return map;
              }

              
              
          // for simple test
              
              
          /*
              public static void main (String args[]) {
              
                  String sFileName = IVR_Excel.generateFileName();
                  System.out.println(sFileName);
                  int iID = 0;
                  int iOpp = 0;
                  String sProvince = "all";
                  String sPid = "all";
                  String sStartDate = "2005-7-1";
                  String sEndDate = "2005-7-21";
                  
                  //get data from DB
                  Map DBMap = getFromDB(iID, sProvince, sPid, iOpp, sStartDate, sEndDate );
                  exportXLSFile(sTitleArray, sColumnArray, DBMap, "Test.xls");
              
                  System.out.println("已經(jīng)成功生成Excle文檔");
              }
              
          */

              
          }




          Java天下社區(qū)
          http://www.javatx.cn
          歡迎大家上來交流Java技術(shù)。

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 阳城县| 关岭| 普陀区| 漾濞| 延寿县| 宁城县| 沾益县| 永福县| 德惠市| 金乡县| 彰化市| 嫩江县| 息烽县| 天气| 威远县| 海口市| 绥宁县| 岑巩县| 吉木萨尔县| 水富县| 黄平县| 徐州市| 满洲里市| 平顶山市| 庆安县| 玛沁县| 孟津县| 玛纳斯县| 海丰县| 潍坊市| 甘德县| 珲春市| 香格里拉县| 石阡县| 平武县| 泽库县| 偏关县| 虹口区| 营口市| 新郑市| 肇东市|