一、读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 }