• Scala使用POI生成Excel的Servlet


      1 lass PatentAnalysisExportExcelResult(requestContext: RequestContext,
      2   patentAnalysisResult: PatentAnalysisResult) extends ActionResult(requestContext) with Disposable {
      3   val fieldMap = Map[String, String](("ad_year", "申请日"),
      4     ("pd_year", "公开公告日"),
      5     ("paid", "申请人"),
      6     ("inid", "发明人"),
      7     ("ic_subclass", "IPC小类"),
      8     ("ic_supergroup", "IPC大组"),
      9     ("ic", "IPC小组"),
     10     ("co", "专利所属国家地区"),
     11     ("pac", "申请人所在国家地区"),
     12     ("pcid_1", "一级技术分类"),
     13     ("pcid_2", "二级技术分类"))
     14   val idSet = Set[String]("ad_year", "pd_year", "ic_subclass", "ic_supergroup", "ic")
     15 
     16   def execute = {
     17     response.setContentType("application/excel")
     18     response.setCharacterEncoding("utf-8")
     19 
     20     patentAnalysisResult.patentAnalysisResultParam.analysisType match {
     21       case "s" => {
     22         response.addHeader("Content-Disposition", "attachment; filename=" + "patent-analysis-tableexport-" + patentAnalysisResult.patentAnalysisResultParam.analysisFieldOne + "-" + patentAnalysisResult.patentAnalysisResultParam.analysisFieldTwo + "-" + new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()) + ".xls")
     23         writeDoubleFieldFacet(patentAnalysisResult.DoubleFieldCounts, patentAnalysisResult.patentAnalysisResultParam.analysisFieldOne, patentAnalysisResult.patentAnalysisResultParam.analysisFieldTwo)
     24       }
     25       case _ => {
     26         response.addHeader("Content-Disposition", "attachment; filename=" + "patent-analysis-tableexport-" + patentAnalysisResult.patentAnalysisResultParam.analysisField + "-" + new SimpleDateFormat("yyyyMMddHHmmss").format(new Date()) + ".xls")
     27 
     28         patentAnalysisResult.patentAnalysisResultParam.analysisField match {
     29           case "ad_year" => writeFieldFacet(patentAnalysisResult.applicationDateCounts, "申请日分析表格", "申请年", "id")
     30           case "pd_year" => writeFieldFacet(patentAnalysisResult.publicationDateCounts, "公开公告日分析表格", "公开公告年", "id")
     31           case "paid" => writeFieldFacet(patentAnalysisResult.applicantCounts, "申请人分析表格", "申请人", "name")
     32           case "inid" => writeFieldFacet(patentAnalysisResult.inventorCounts, "发明人分析表格", "发明人", "name")
     33           case "ic_subclass" => writeFieldFacet(patentAnalysisResult.ipcSubClassCounts, "IPC小类分析表格", "IPC小类", "id")
     34           case "ic_supergroup" => writeFieldFacet(patentAnalysisResult.ipcSuperGroupCounts, "IPC大组分析表格", "IPC大组", "id")
     35           case "ic" => writeFieldFacet(patentAnalysisResult.ipcCounts, "IPC小类分析表格", "IPC小类", "id")
     36           case "cb" => writeFieldFacet(patentAnalysisResult.citationCounts, "引用专利分析表格", "公开公告号", "id")
     37           case "cf" => writeFieldFacet(patentAnalysisResult.cocitationCounts, "被引专利分析表格", "公开公告号", "id")
     38           case "fm" => writeFieldFacet(patentAnalysisResult.familyStatsCounts, "专利族分析表格", "公开公告号", "id")
     39           case "co" => writeFieldFacet(patentAnalysisResult.countryCounts, "申请人所在国家地区分析表格", "国家地区", "name")
     40           case "pac" => writeFieldFacet(patentAnalysisResult.applicantCountryCounts, "申请人所在国家地区分析表格", "国家地区", "name")
     41           case "pcid_1" => writeFieldFacet(patentAnalysisResult.categoryOneCounts, "一级技术分类分析表格", "分类名称", "name")
     42           case "pcid_2" => writeFieldFacet(patentAnalysisResult.categoryTwoCounts, "二级技术分类分析表格", "分类名称", "name")
     43         }
     44       }
     45     }
     46   }
     47 
     48   private def writeFieldFacet(list: Array[FacetCount[IdNameEntity]], title: String, columnName: String, t: String) = {
     49     val hwb = new HSSFWorkbook()
     50     val sheet = hwb.createSheet(title)
     51     val firstrow = sheet.createRow(0)
     52     val names = Array[String]("排名", columnName, "专利数量")
     53 
     54     for (i <- 0 until names.length) {
     55       val cell = firstrow.createCell(i)
     56       cell.setCellValue(new HSSFRichTextString(names(i)))
     57     }
     58 
     59     for (i <- 0 until list.length) {
     60       val row = sheet.createRow(i + 1)
     61       val xlsDto = list(i)
     62 
     63       for (j <- 0 until 3) {
     64         val sortCell = row.createCell(0)
     65 
     66         sortCell.setCellValue(i + 1)
     67 
     68         val nameCell = row.createCell(1)
     69 
     70         if (t == "id") nameCell.setCellValue(xlsDto.t.id.toString)
     71         else nameCell.setCellValue(xlsDto.t.name)
     72 
     73         val countCell = row.createCell(2)
     74 
     75         countCell.setCellValue(xlsDto.count)
     76       }
     77     }
     78 
     79     using(responseOutputStream) { out =>
     80       {
     81         hwb.write(out)
     82       }
     83     }
     84   }
     85 
     86   private def writeDoubleFieldFacet(list: Array[DoubleFacetFiled], fieldOne: String, fieldTwo: String) = {
     87     val hwb = new HSSFWorkbook()
     88     val sheet = hwb.createSheet(fieldMap.getOrElse(fieldOne, "") + "-" + fieldMap.getOrElse(fieldTwo, "") + "表格")
     89     val firstrow = sheet.createRow(0)
     90     val names = Array[String]("") ++ { if (idSet.contains(fieldOne)) list.map(_.field.id.toString) else list.map(_.field.name) }
     91 
     92     for (i <- 0 until names.length) {
     93       val cell = firstrow.createCell(i)
     94 
     95       cell.setCellValue(new HSSFRichTextString(names(i)))
     96     }
     97 
     98     val len = list(0).fields.length
     99 
    100     for (i <- 0 until len) {
    101       val row = sheet.createRow(i + 1)
    102 
    103       for (j <- 0 to list.length) {
    104         if (j == 0) {
    105           val cell = row.createCell(0)
    106           val field = list(j).fields(i)
    107 
    108           cell.setCellValue(if (idSet.contains(fieldTwo)) field.t.id.toString else field.t.name)
    109         } else {
    110           val cell = row.createCell(j)
    111           val field = list(j-1).fields(i)
    112 
    113           cell.setCellValue(field.count)
    114         }
    115       }
    116     }
    117 
    118     using(responseOutputStream) { out =>
    119       {
    120         hwb.write(out)
    121       }
    122     }
    123   }
    124 }
  • 相关阅读:
    Leetcode 121. Best Time to Buy and Sell Stock
    Leetcode 120. Triangle
    Leetcode 26. Remove Duplicates from Sorted Array
    Leetcode 767. Reorganize String
    Leetcode 6. ZigZag Conversion
    KMP HDU 1686 Oulipo
    多重背包 HDU 2844 Coins
    Line belt 三分嵌套
    三分板子 zoj 3203
    二分板子 poj 3122 pie
  • 原文地址:https://www.cnblogs.com/TerryLiang/p/2880921.html
Copyright © 2020-2023  润新知