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     }

2016-04-18 13:58:51

---恢复内容结束---

时间: 2024-10-10 12:15:52

java使用org.apache.poi读取与保存EXCEL文件的相关文章

Apache POI读取和创建Excel ----01(简单操作)

public class ExcelCreatAndRead { /**     * 使用Apache POI创建Excel文档     * */    public static void createXL(){        /**Excel文件要存放的位置,假定在D盘下*/        String outputFile="D:\\test.xlsx";        try {        //创建新的Excel工作薄        XSSFWorkbook workboo

使用Apache POI 读取Excel文件

生活中用到用到Excel文件的情况很多,什么商品进货单,产品维修单,餐厅的营业额等等.作为程序员,我们该如何读取Excel文件,获取我们想要的资源呢.本篇将讲解如何使用Apache POI读取Excel文件. 准备工作: 1)Apache POI 开发jar包 2)Excel资源文件,包括Excel2003,Excel2007这两种版本分别对应xls.xlsx文件. 本篇已经为您做好准备工作,请点击此处,下载资源文件,你也可以浏览Apace POI官网了解更多详细信息. 简要流程: 获取Work

用 Apache POI 读取 XLSX 数据

最近因为项目的原因,需要从一些 Microsoft Office Excel 文件读取数据并加载到数据库. Google了一下方法,发现其实可以用的 Java 第三方库很多,最著名的是 Apache 的 POI 开源项目,其官网地址是 https://poi.apache.org 从首页的简介中我发现这个项目功能非常强大,不仅能处理 Excel,它还可以处理 Word.PowerPoint.Outlook.Visio,基本上囊括了 MS Office 的全部常用组件.目前 POI 更新到了 3.

Java使用POI读取和写入Excel指南

Java使用POI读取和写入Excel指南 做项目时经常有通过程序读取Excel数据,或是创建新的Excel并写入数据的需求: 网上很多经验教程里使用的POI版本都比较老了,一些API在新版里已经废弃,这里基于最新的Apache POI 4.0.1版本来总结一下整个读取和写入Excel的过程,希望能帮助到需要的人 ^_^ 1. 准备工作 1.1 在项目中引入Apache POI相关类库 引入 Apache POI 和 Apache POI-OOXML 这两个类库,Maven坐标如下: <depe

Apache POI – Reading and Writing Excel file in Java

来源于:https://www.mkyong.com/java/apache-poi-reading-and-writing-excel-file-in-java/ In this article, we will discuss about how to read and write an excel file using Apache POI 1. Basic definitions for Apache POI library This section briefly describe a

Java基础系列19:使用JXL或者POI生成和解析Excel文件

一 简介 如题所示,当我们需要在Java中解析Excel文件时,可以考虑使用JXL或POI的API来解析. 二者的区别如下: jxl现在基本上没被维护了,最近一次更新时间还是几年前.相反,poi属于Apache开源项目的一部分,更新维护得比较好,最新稳定版 POI 3.15 是今年(2016年)9月更新的,同时poi可以支持更高版本的excel,而jxl只能支持excel2003以及之前的版本 小文件使用jxl解析效率比较高,但是因为支持的excel版本的限制,导致不能导出65535以上量级的数

【Java编程】写入、读取、遍历Properties文件

在Java开发中通常我们会存储配置参数信息到属性文件,这样的属性文件可以是拥有键值对的属性文件,也可以是XML文件,关于XML文件的操作,请参考博文[Java编程]DOM XML Parser 解析.遍历.创建XML.在该篇博文中,我将展示如何向属性文件写入键值对,如何读取属性文件中的键值对,如何遍历属性文件. 1.向属性文件中写入键值对 特别注意: Properties类调用setProperty方法将键值对保存到内存中,此时可以通过getProperty方法读取,propertyNames(

lucent检索技术之创建索引:使用POI读取txt/word/excel/ppt/pdf内容

在使用lucent检索文档时,必须先为各文档创建索引.索引的创建即读出文档信息(如文档名称.上传时间.文档内容等),然后再经过分词建索引写入到索引文件里.这里主要是总结下读取各类文档内容这一步. 一.之前做过一个小工具也涉及到读取word和excel内容,采用的是com组件的方式来读取.即导入COM库,引入命名空间(using Microsoft.Office.Interop.Word;using Microsoft.Office.Interop.Excel;),然后读代码如下: 读取word

Python xlrd、xlwt、xlutils读取、修改Excel文件

Python xlrd.xlwt.xlutils读取.修改Excel文件 一.xlrd读取excel 这里介绍一个不错的包xlrs,可以工作在任何平台.这也就意味着你可以在Linux下读取Excel文件. 首先,打开workbook:    import xlrdwb = xlrd.open_workbook('myworkbook.xls') 检查表单名字:    wb.sheet_names() 得到第一张表单,两种方式:索引和名字    sh = wb.sheet_by_index(0)s