Apache POI-Excel入门与实战

目录

一、了解Apache POI

1.1 什么是Apache POI

1.2 为什么要使用ApaChe POI

1.3 Apache POI应用场景

1.4 Apache POI 依赖

二、Apache POI-Excel 入门案例

2.1 写入Excel文件

2.2 读取文件

四、Apache POI实战

4.1 创建一个获取天气的API

4.2高德天气请求API与响应结果

4.2 后端访问API获取数据

4.3 通过获取地方名称获取AdCode编码

4.4 使用Apache POI包装数据并将预测结果输出到Excel表格中


一、了解Apache POI

1.1 什么是Apache POI

1.2 为什么要使用ApaChe POI

  1. 兼容性:POI能够与各种版本的Office文档进行交互,无论是在创建新文件还是在读取旧文件时,都提供了良好的兼容性。
  2. 无需Office安装:使用POI可以在没有实际安装Microsoft Office软件的情况下操作Office文档,这对于服务器环境尤其重要。
  3. 灵活性:POI提供了丰富的API,允许开发人员以编程方式对Office文档进行复杂的操作,如添加公式、图表、图片、样式等。
  4. 性能:相比于其他一些解决方案,如使用自动化Office应用程序的方式,POI在处理大量数据时通常具有更好的性能。
  5. 安全性:由于POI不需要运行任何Office应用程序,因此可以避免潜在的安全风险,比如宏病毒或恶意脚本的执行。
  6. 开源:POI是一个开源项目,这意味着它是免费的,并且有一个活跃的社区支持,可以提供帮助和持续的更新。

1.3 Apache POI应用场景
 

1.4 Apache POI 依赖

<dependency>  <groupId>org.apache.poi</groupId>  <artifactId>poi</artifactId>  <version>3.16</version>  
</dependency>  
<dependency>  <groupId>org.apache.poi</groupId>  <artifactId>poi-ooxml</artifactId>  <version>3.16</version>  
</dependency>

二、Apache POI-Excel 入门案例

2.1 写入Excel文件

/**  * ApachePOI 测试类  */  
public class ApachePOITest {  /**  * 读取 Excel 文件  */  public static void write() {  // 在内存中创建一个 Excel 文件  XSSFWorkbook excel = new XSSFWorkbook();  // 创建一个工作表sheet  XSSFSheet sheet = excel.createSheet("info");  //在sheet中添加表头第1行,RowNum是从0开始的  XSSFRow row = sheet.createRow(1);  row.createCell(1).setCellValue("姓名");  row.createCell(2).setCellValue("年龄");  //创建一个新的row  XSSFRow row2 = sheet.createRow(2);  //在row中创建单元格  row2.createCell(1).setCellValue("张三");  row2.createCell(2).setCellValue("20");  //创建一个新的row  sheet.createRow(3).createCell(1).setCellValue("李四");  sheet.getRow(3).createCell(2).setCellValue("30");  //将excel写入到文件中  try {  //通过文件输出流将内存中的excel写入到文件中  FileOutputStream fileOutputStream = new FileOutputStream("E:" + File.separator + "POITest.xlsx");  excel.write(fileOutputStream);  } catch (Exception e) {  e.printStackTrace();  }  }  public static void main(String[] args) {  write();  }  //关闭流excel.close
}

2.2 读取文件

/**  * 读取 Excel 文件  */  
public  static  void read() throws IOException {  //通过文件输入流读取文件  FileInputStream fileInputStream = new FileInputStream("E:" + File.separator + "POITest.xlsx");  XSSFWorkbook excel = new XSSFWorkbook(fileInputStream);  //读取第一个工作表  //XSSFSheet sheet = excel.getSheet("info");  XSSFSheet sheetAt = excel.getSheetAt(0);  //获取最后一行的行号  int lastRowNum = sheetAt.getLastRowNum();  //从第二行开始读取数据  for (int i = 1; i <= lastRowNum; i++) {  //获取当前行  XSSFRow row = sheetAt.getRow(i);  //获取当前行的最后一个单元格的编号  short lastCellNum = row.getLastCellNum();  //遍历所有的单元格,从第二个单元格开始  for (int j = 1; j < lastCellNum; j++) {  System.out.print(row.getCell(j) + "\t");  }  System.out.println();  }  //关闭流  excel.close();  fileInputStream.close();  
}


四、Apache POI实战

1.通过读取Excel方法获取一个城市对应的地址编号

2.通过写入Excel方法将一个城市未来的天气情况写入Excel表格中

4.1 创建一个获取天气的API

这里使用高德地图的天气API

创建应用,获取需要的key


4.2高德天气请求API与响应结果

请求API

由于这里的天气需要用到城市编码表,所以先下载好对应的城市编码表格

下载好后内容如下

 返回的Response

APIFOX工具(也可以用postman) 测试:

API地址:https://restapi.amap.com/v3/weather/weatherInfo?parameters

成功返回了数据说明前面一切操作都是对的。而后端访问则通过HttpClient形式访问


4.2 后端访问API获取数据

引入依赖

<dependency>  <groupId>org.apache.httpcomponents</groupId>  <artifactId>httpclient</artifactId>  <version>4.5.13</version>  
</dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.76</version>
</dependency>

有了API和城市编码表格,现在我们只需要在用户输入对应的城市或者区域的时候,遍历表格进行读取,如果有对应的区则返回adcode

测试类:

	@Testvoid WeatherTest() throws URISyntaxException, IOException {// TODO:这里的key需要引用自己的String key = "xxxxxxx";String city = "110101";CloseableHttpClient httpClient = HttpClients.createDefault();URIBuilder uriBuilder = new URIBuilder("https://restapi.amap.com/v3/weather/weatherInfo");uriBuilder.addParameter("key", key);uriBuilder.addParameter("city", city);HttpGet httpGet = new HttpGet(uriBuilder.build());try (CloseableHttpResponse response = httpClient.execute(httpGet)) {int statusCode = response.getStatusLine().getStatusCode();if (statusCode == 200) {HttpEntity entity = response.getEntity();String result = EntityUtils.toString(entity, "UTF-8");System.out.println(result);} else {System.out.println("Failed to retrieve data, status code: " + statusCode);}}httpClient.close();}}


4.3 通过获取地方名称获取AdCode编码

	@Testvoid AdCodeQuery() throws IOException {//		TODO:这里输入下载好的地址对照表String AMapFilePath = "E:\\AMap_adcode_citycode.xlsx";
//		需要查询的地址String address = "北京市";FileInputStream fileInputStream = new FileInputStream(AMapFilePath);XSSFWorkbook workbook = new XSSFWorkbook(fileInputStream);XSSFSheet sheetAt = workbook.getSheetAt(0);for (int i=1;i<sheetAt.getLastRowNum();i++){XSSFCell cell = sheetAt.getRow(i).getCell(0);String stringCellValue = cell.getStringCellValue();if (stringCellValue.equals(address)){XSSFCell cell1 = sheetAt.getRow(i).getCell(1);String adcode = cell1.getStringCellValue();System.out.println("查询到地区编号为"+adcode);}}}


4.4 使用Apache POI包装数据并将预测结果输出到Excel表格中

	@Testvoid WeatherTest() throws URISyntaxException, IOException {// TODO:这里的key需要引用自己的String key = "xxxxxxx";String city = "110101";String extensions = "all";CloseableHttpClient httpClient = HttpClients.createDefault();URIBuilder uriBuilder = new URIBuilder("https://restapi.amap.com/v3/weather/weatherInfo");uriBuilder.addParameter("key", key);uriBuilder.addParameter("city", city);uriBuilder.addParameter("extensions",extensions);HttpGet httpGet = new HttpGet(uriBuilder.build());try (CloseableHttpResponse response = httpClient.execute(httpGet)) {int statusCode = response.getStatusLine().getStatusCode();if (statusCode == 200) {HttpEntity entity = response.getEntity();String jsonString = EntityUtils.toString(entity, "UTF-8");//				通过POI写入文件// 将JSON字符串解析为Java对象Map<String, Object> map = JSON.parseObject(jsonString, new TypeReference<Map<String, Object>>() {});// 获取casts列表List<Map<String, Object>> casts = (List<Map<String, Object>>) ((List<Map<String, Object>>) map.get("forecasts")).get(0).get("casts");// 创建Excel工作簿Workbook workbook = new XSSFWorkbook();Sheet sheet = workbook.createSheet("Weather Forecasts");// 创建标题行Row headerRow = sheet.createRow(0);CellStyle headerStyle = workbook.createCellStyle();headerStyle.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());headerStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);// 写入标题int cellIndex = 0;String[] columnHeaders = {"date", "week", "dayweather", "nightweather", "daytemp", "nighttemp", "daywind", "nightwind", "daypower", "nightpower", "daytemp_float", "nighttemp_float"};for (String columnHeader : columnHeaders) {Cell cell = headerRow.createCell(cellIndex++);cell.setCellValue(columnHeader);cell.setCellStyle(headerStyle);}// 创建数据行int rowIndex = 1;for (Map<String, Object> cast : casts) {Row row = sheet.createRow(rowIndex++);// 写入数据cellIndex = 0;for (String columnHeader : columnHeaders) {Cell cell = row.createCell(cellIndex++);cell.setCellValue(cast.get(columnHeader).toString());}}// 写入Excel文件try (FileOutputStream fileOut = new FileOutputStream("WeatherForecasts.xlsx")) {workbook.write(fileOut);}// 关闭工作簿workbook.close();} else {System.out.println("Failed to retrieve data, status code: " + statusCode);}}httpClient.close();}


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/874429.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

怎样使用 Juicer tools 的 dump 命令将.hic文件转换为交互矩阵matrix计数文件 (Windows)

创作日志&#xff1a; 万恶的生信…一个scHiC数据集没有提供处理好的计数文件&#xff0c;需要从.hic转换。Github一个个好长的文档看了好久才定位到 juicer tools 的dump命令&#xff0c;使用起来比想象中简单。 一、下载Juicer tools 注意&#xff1a;使用Juicer tools的前提…

邮件安全篇:邮件反垃圾系统运作机制简介

1. 什么是邮件反垃圾系统&#xff1f; 邮件反垃圾系统是一种专门设计用于检测、过滤和阻止垃圾邮件的技术解决方案。用于保护用户的邮箱免受未经请求的商业广告、诈骗信息、恶意软件、钓鱼攻击和其他非用户意愿接收的电子邮件的侵扰。 反垃圾系统的常见部署形式 2. 邮件反垃圾…

day6 io线程

获取终端输入的字符

深入探究 Golang 反射:功能与原理及应用

Go 出于通用性的考量&#xff0c;提供了反射这一功能。借助反射功能&#xff0c;我们可以实现通用性更强的函数&#xff0c;传入任意的参数&#xff0c;在函数内通过反射动态调用参数对象的方法并访问它的属性。举例来说&#xff0c;下面的bridge接口为了支持灵活调用任意函数&…

python一维表转二维表

一维表转二维表 import pandas as pd # 读取数据 product_df pd.read_csv(rD:\excelFile\practice\物品属性值一维表.csv,encodingutf-8) # print(product_df)# 将一维表转变二维 s pd.Series(list(product_df[属性值]),index[product_df[物品编号],product_df[属性名]]) …

GMSSL2.x编译鸿蒙静态库和动态库及使用

一、编译环境准备 1.1 开发工具 DevEco-Studio下载。 1.2 SDK下载 ​ 下载编译第三方库的SDK有两种方式&#xff0c;第一种方式从官方渠道根据电脑系统选择对应的SDK版本&#xff0c;第二种方式通过DevEco-Studio下载SDK。本文只介绍通过DevEco-Studio下载SDK的方式。 安装…

centos中zabbix安装、卸载及遇到的问题

目录 Zabbix简介Zabbix5.0和Zabbix7.0的区别监控能力方面模板和 API 方面性能、速度方面 centos7安装Zabbix(5.0)安装zabbix遇到的问题卸载Zabbix Zabbix简介 Zabbix 是一个基于 WEB 界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。zabbix 能监视各种网络参…

大数据架构体系演进

传统离线大数据架构 ​ 21世纪初随着互联网时代的到来&#xff0c;数据量暴增&#xff0c;大数据时代到来。Hadoop生态群及衍生技术慢慢走向“舞台”&#xff0c;Hadoop是以HDFS为核心存储&#xff0c;以MapReduce&#xff08;简称MR&#xff09;为基本计算模型的批量数据处理…

MATLAB实验五:MATLAB数据分析

1. 某线路上不同时间对应的电压如下表所示&#xff1a; 1&#xff09;用 3 次多项式拟合(polyfit)该实验曲线&#xff0c;要求绘制 2 原始采样 点&#xff0c;并在 1~8 范围内&#xff0c;使用时间间隔为 0.2 的数据绘制拟合曲线。 建立一个脚本文件&#xff1a;text5_1.m 如下…

黑马JavaWeb企业级开发(知识清单)01——前端介绍,HTML实现标题:排版

文章目录 前言一、认识web前端、HTML、CSS二、VS Code开发工具&#xff08;插件弃用问题&#xff09;三、HTML结构标签介绍1. 标签页标题< title >2. 图片标签< img >1) 常见属性2) src路径书写方式 3. 标题标签< h >4. 水平分页线标签< hr > 四、用Vs…

安全的备忘录工具有哪些 安全好用的备忘录

在这个数字化的时代&#xff0c;我们的生活中充斥着各种各样的信息&#xff0c;从工作计划到个人琐事&#xff0c;从账号密码到重要日期&#xff0c;这些信息都需要我们牢记。然而&#xff0c;人的记忆毕竟有限&#xff0c;于是&#xff0c;备忘录工具成为了我们日常生活中不可…

运行 npm install 报错-4048

我在已经开发中的项目&#xff0c;执行 npm install 命令时&#xff0c;出现报错&#xff1a; 并且之前在帖子中提到的报错类型还不一样&#xff08;帖子内容如下&#xff09;&#xff1a; 运行 npm run dev 总报错_运行npm run dev报错-CSDN博客 该报错内容主要为权限导致的&…

C# 编程机器人

右边写代码&#xff0c;控制左边机器人移动 冯腾飞/编程机器人 - Gitee.com

SpringBoot框架学习笔记(五):静态资源访问、Rest风格请求处理、配置视图解析器、接收参数的相关注解详解

1 WEB开发-静态资源访问 1.1 基本介绍 &#xff08;1&#xff09;只要静态资源放在类路径的以下目录&#xff1a;/static、/public、/resources、/META-INF/resources 可以被直接访问。maven项目的类路径即为main/resources目录--对应SpringBoot源码为WebProperties.java类 …

基于STM32的PM2.5监测系统设计

目录 1、设计要求 2、系统功能 3、演示视频和实物 4、系统设计框图 5、软件设计流程图 6、原理图 7、主程序 8、总结 &#x1f91e;大家好&#xff0c;这里是5132单片机毕业设计&#xff0c;今天给大家分享的是《基于STM32的PM2.5监测系统设计》。 设备的详细功能见网…

Nginx 怎样处理请求的重试机制?

&#x1f345;关注博主&#x1f397;️ 带你畅游技术世界&#xff0c;不错过每一次成长机会&#xff01; 文章目录 Nginx 怎样处理请求的重试机制&#xff1f;一、为何需要重试机制&#xff1f;二、Nginx 中的重试机制原理三、Nginx 重试机制的配置参数四、Nginx 重试机制的实际…

GPT盘新增容量后如何扩容?

场景&#xff1a;一块5T的GPT盘&#xff0c;现有需求再加10T&#xff0c; 在虚拟化平台加10T盘后&#xff0c;机器不重启&#xff0c;执行命令 echo 1 > /sys/block/sdb/device/rescan刷新磁盘容量&#xff0c;可看到容量已刷出。 但执行fdisk /dev/sdb时&#xff0c;发现创…

《0基础》学习Python——第二十二讲__网络爬虫/<5>爬取豆瓣电影封面图

一、爬取豆瓣电影的图片封面 1、经过上节课我们所爬取的豆瓣电影的电影名、年份、国家、导演、主演、剧情&#xff0c;那么接下来我们将学习如何去爬取这些电影的图片&#xff0c;并将这些图片存放在文件夹中。 2、过程实现&#xff1a; 2.1、获取网页源码 首先还是和爬取电影名…

Air780EP-AT开发-HTTP应用指南

简介 关联文档和使用工具&#xff1a; AT固件获取AT指令手册 概述 4G模块支持HTTP和HTTPS协议&#xff0c; HTTP应用的基本流程如下&#xff1a; 1、激活PDP&#xff08;参考&#xff1a;http://oldask.openluat.com/article/937&#xff09;2、初始化HTTP服务3、设置HTTP会话…

服务器上使用Docker部署sonarQube,并集成到Jenkins实现自动化。

目标是要在目标服务器上使用docker工具部署好sonar环境&#xff0c;然后再集成到Jenkins中实现自动化的代码审查工作。 Docker 首先Dokcer的源大部分现在都用不了&#xff0c;于是我上网查询&#xff0c;终于找到了一个可用的镜像。 编辑/etc/docker/daemon.json文件&#x…