zoukankan      html  css  js  c++  java
  • java使用org.apache.poi读取与保存EXCEL文件

    一、读EXCEL文件

      1 package com.ruijie.wis.cloud.utils;
      2 
      3 import java.io.FileInputStream;
      4 import java.io.FileNotFoundException;
      5 import java.io.IOException;
      6 import java.io.InputStream;
      7 import java.text.DecimalFormat;
      8 import java.util.ArrayList;
      9 import java.util.HashMap;
     10 import java.util.Iterator;
     11 import java.util.List;
     12 import java.util.Map;
     13 
     14 import org.apache.poi.hssf.usermodel.HSSFCell;
     15 import org.apache.poi.ss.usermodel.Cell;
     16 import org.apache.poi.ss.usermodel.CellValue;
     17 import org.apache.poi.ss.usermodel.FormulaEvaluator;
     18 import org.apache.poi.ss.usermodel.Row;
     19 import org.apache.poi.xssf.usermodel.XSSFCell;
     20 import org.apache.poi.xssf.usermodel.XSSFCellStyle;
     21 import org.apache.poi.xssf.usermodel.XSSFFont;
     22 import org.apache.poi.xssf.usermodel.XSSFRow;
     23 import org.apache.poi.xssf.usermodel.XSSFSheet;
     24 import org.apache.poi.xssf.usermodel.XSSFWorkbook;
     25 import org.slf4j.Logger;
     26 import org.slf4j.LoggerFactory;
     27 
     28 public class ProjectImportUtil {
     29 public ProjectImportUtil() {
     30     String fileName = "D:\tst.xlsx";
     31   InputStream input = new FileInputStream(fileName);     
     32 }
     33 
     34 /* 导入销售数据 ,excel2007格式 */
     35 public List<Map<String,Object>> importSaleXml(InputStream input, String industry) { 
     36 List<Map<String,Object>> result = new ArrayList<Map<String,Object>>();
     37 DecimalFormat df =new DecimalFormat("#0");
     38 
     39 try { 
     40 XSSFWorkbook wb = new XSSFWorkbook(input); // Excel 2003 使用wb = new HSSFWorkbook(input);

    41 FormulaEvaluator evaluator = wb.getCreationHelper().createFormulaEvaluator();
     42 int index_name = 0;
     43 int index_province = 0;
     44 int index_city = 0;
     45 int index_acs = 0;
     46 int index_aps = 0;
     47 int index_zuozhi = 0;
     48 String industry_name = industry;
     49 XSSFSheet sheet = wb.getSheet(industry_name);
     50 if(sheet == null) {
     51 logger.warn("importSaleXml - industy: " + industry_name + " not exist!");
     52 wb.close();
     53 return null;
     54 }
     55 Iterator<Row> rows = sheet.rowIterator();
     56 
     57 while (rows.hasNext()) { 
     58   Row row = rows.next();
     59   if(row.getRowNum() == 0) { // 查找关心的数据所在列号
     60   Iterator<Cell> cells = row.cellIterator(); 
     61   while (cells.hasNext()) { 
     62     Cell cell = cells.next();
     63     String title = getCellValue(cell,evaluator);
     64     if(title.equals("最终客户名称")) {
     65       index_name = cell.getColumnIndex();
     66     } else if(title.equals("省份")) {
     67       index_province = cell.getColumnIndex();
     68     } else if(title.equals("城市")) {
     69       index_city = cell.getColumnIndex();
     70     } else if(title.equals("AC系列")) {
     71       index_acs = cell.getColumnIndex();
     72     } else if(title.equals("AP系列")) {
     73       index_aps = cell.getColumnIndex();
     74     } else if(title.equals("卓智客户名称")) {
     75       index_zuozhi = cell.getColumnIndex();
     76   }
     77   }    
     78 }
     79 
     80   Cell cell_name = row.getCell(index_name);
     81   Cell cell_province = row.getCell(index_province);
     82   Cell cell_city = row.getCell(index_city);
     83   Cell cell_acs = row.getCell(index_acs);
     84   Cell cell_aps = row.getCell(index_aps);
     85   String projectName = getCellValue(cell_name,evaluator);
     86   String province = getCellValue(cell_province,evaluator);
     87   String city = getCellValue(cell_city,evaluator);
     88   String acs = getCellValue(cell_acs,evaluator);
     89   String aps = getCellValue(cell_aps,evaluator);
     90 
     91   Map<String,Object> salevalue = new HashMap<String, Object>();
     92   salevalue.put("projectName", projectName);
     93   salevalue.put("industry_name", industry_name);
     94   if(province != null) {  
     95     salevalue.put("province", province);
     96   }
     97   if(city != null) {
     98     salevalue.put("city", city);
     99   }
    100   if(acs != null) {  
    101     salevalue.put("acs", acs);
    102   }    
    103   if(aps != null) {
    104     salevalue.put("aps", aps);
    105 
    106   }
    107 
    108   result.add(salevalue);
    109 }
    110   wb.close(); 
    111 } catch (Exception e) {    
    112   logger.error(e.toString(),e);
    113 }    
    114   return result;
    115 } 
    116 
    117 //根据cell中的类型来返回数据 
    118 public String getCellValue(Cell cell, FormulaEvaluator evaluator) {    
    119   if(cell == null) {
    120     return null;
    121   }
    122   CellValue cellValue = evaluator.evaluate(cell);
    123   if(cellValue == null) {
    124     return null;
    125   }
    126   switch (cellValue.getCellType()) { 
    127   case HSSFCell.CELL_TYPE_NUMERIC: 
    128   return cell.getNumericCellValue() + ""; 
    129   case HSSFCell.CELL_TYPE_STRING: 
    130   return cell.getStringCellValue() + "";
    131   case HSSFCell.CELL_TYPE_BOOLEAN: 
    132   return cell.getBooleanCellValue() + ""; 
    133   case HSSFCell.CELL_TYPE_FORMULA: 
    134   return cell.getCellFormula(); 
    135   default: 
    136   return null; 
    137 }    
    138 }
    139 
    140 }

    二、写EXCEL文件

      1 XSSFWorkbook wb=new XSSFWorkbook();
      2 DeviceAlarmUtil outputResult = new DeviceAlarmUtil();
      3 wb = outputResult.outConfigExceptionResult(wb, "配置告警信息", configAlarmList);
      4 response.setContentType("application/msexcel");
      5 response.setHeader( "Content-Disposition", "attachment;filename=" + new String(fileName.getBytes("utf-8"), "ISO8859-1" ) ); 
      6            
      7 ServletOutputStream os = null;
      8 try {
      9     os = response.getOutputStream();
     10     //写到输出流
     11      wb.write(os);
     12 } catch (FileNotFoundException e) {
     13      e.printStackTrace();
     14 } catch (IOException e) {
     15      e.printStackTrace();
     16 } catch (Throwable e) {
     17      e.printStackTrace();
     18 } finally {
     19      if (wb != null) {
     20          try {
     21              wb.close();
     22          } catch (IOException e) {
     23              throw new Exception("IO错误,无法导出结果");
     24          }
     25      }
     26      if (os != null) {
     27          try {
     28            os.flush();
     29             os.close();
     30          } catch (IOException e) {
     31             throw new Exception("IO错误,无法导出结果");
     32          }
     33      }
     34 }
     35 
     36 
     37 public XSSFWorkbook outConfigExceptionResult(XSSFWorkbook wb, String sheetName, List<Map<String, Object>> sheetResult){
     38         XSSFSheet sheet=wb.createSheet(sheetName);
     39         XSSFRow row=sheet.createRow(0);
     40         CellStyle cellStyle =wb.createCellStyle(); 
     41         // 设置这些样式 
     42         cellStyle.setAlignment(XSSFCellStyle.ALIGN_CENTER); 
     43         cellStyle.setFillForegroundColor(HSSFColor.LIGHT_ORANGE.index);
     44         cellStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
     45         cellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN); 
     46         cellStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN); 
     47         cellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN); 
     48         cellStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);
     49         XSSFFont font = wb.createFont();
     50         font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
     51         cellStyle.setFont(font);
     52         
     53         XSSFCell cell = row.createCell((short) 0);
     54         cell.setCellValue("客户名称"); 
     55         cell.setCellStyle(cellStyle);
     56         sheet.setColumnWidth(0, 5500);
     57         cell = row.createCell((short) 1);
     58         cell.setCellValue("AC MAC"); 
     59         cell.setCellStyle(cellStyle);
     60         sheet.setColumnWidth(1, 5000);
     61         cell = row.createCell((short) 2);
     62         cell.setCellValue("检查项"); 
     63         cell.setCellStyle(cellStyle);
     64         sheet.setColumnWidth(2, 5000);
     65         cell = row.createCell((short) 3);
     66         cell.setCellValue("检查次数");
     67         cell.setCellStyle(cellStyle);
     68         sheet.setColumnWidth(3, 5000);
     69         cell = row.createCell((short) 4);
     70         cell.setCellValue("检查时间");
     71         cell.setCellStyle(cellStyle);
     72         sheet.setColumnWidth(4, 5000);
     73         cell = row.createCell((short) 5);
     74         cell.setCellValue("记录更新时间");
     75         cell.setCellStyle(cellStyle);
     76         sheet.setColumnWidth(5, 5000);        
     77         cell = row.createCell((short) 6);        
     78         cell.setCellValue("当前状态");
     79         cell.setCellStyle(cellStyle);
     80         sheet.setColumnWidth(6, 4000);
     81         cell = row.createCell((short) 7);
     82         cell.setCellValue("异常等级");
     83         cell.setCellStyle(cellStyle);
     84         sheet.setColumnWidth(7, 4000);
     85         cell = row.createCell((short) 8);
     86         
     87         wb.setSheetName(0, sheetName);        
     88         if(sheetResult.size() == 0){
     89             XSSFRow rows=sheet.createRow(1);
     90             rows.setHeight((short) 500);
     91             rows.createCell(0).setCellValue("没有查询结果!");
     92             return wb;
     93         }
     94         
     95         for(int info = 0; info < sheetResult.size(); info ++){
     96             XSSFRow rows=sheet.createRow(info+1);
     97             rows.setHeight((short) 500);
     98             Map<String,Object> map = sheetResult.get(info);
     99             
    100             rows.createCell(0).setCellValue(map.get("name") + "");
    101             rows.createCell(1).setCellValue(map.get("ac_mac") + "");
    102             rows.createCell(2).setCellValue(map.get("item_code") + "");            
    103             rows.createCell(3).setCellValue(map.get("check_times") + "");
    104             rows.createCell(4).setCellValue(map.get("check_time") + "");
    105             rows.createCell(5).setCellValue(map.get("update_time") + "");
    106             rows.createCell(6).setCellValue(map.get("status") + "");
    107             rows.createCell(7).setCellValue(map.get("exception_level") + "");               
    108             //多插一行,避免单元格溢出
    109             rows.createCell(8).setCellValue(" ");
    110         }
    111         
    112         return wb;
    113     }
  • 相关阅读:
    洛谷P1328 生活大爆炸版石头剪刀布
    洛谷P1131 [ZJOI2007]时态同步
    洛谷P2585 [ZJOI2006]三色二叉树
    机器学习实战四(Logistic Regression)
    机器学习实战三(Naive Bayes)
    机器学习实战二 (Decision Tree)
    机器学习实战一(kNN)
    chapter9 拖放
    Stanford Algorithms(一): 大数相乘(c++版)
    读: 程序员之禅
  • 原文地址:https://www.cnblogs.com/ypf1989/p/5404244.html
Copyright © 2011-2022 走看看