ToB企服应用市场:ToB评测及商务社交产业平台

标题: Apache POI-Excel入门与实战 [打印本页]

作者: 梦见你的名字    时间: 2024-7-27 04:33
标题: 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.3 Apache POI应用场景
 


1.4 Apache POI 依赖

  1. <dependency>  
  2.     <groupId>org.apache.poi</groupId>  
  3.     <artifactId>poi</artifactId>  
  4.     <version>3.16</version>  
  5. </dependency>  
  6. <dependency>  
  7.     <groupId>org.apache.poi</groupId>  
  8.     <artifactId>poi-ooxml</artifactId>  
  9.     <version>3.16</version>  
  10. </dependency>
复制代码

二、Apache POI-Excel 入门案例

2.1 写入Excel文件

  1. /**  
  2. * ApachePOI 测试类  
  3. */  
  4. public class ApachePOITest {  
  5.   
  6.     /**  
  7.      * 读取 Excel 文件  
  8.      */  
  9.     public static void write() {  
  10.         // 在内存中创建一个 Excel 文件  
  11.         XSSFWorkbook excel = new XSSFWorkbook();  
  12.         // 创建一个工作表sheet  
  13.         XSSFSheet sheet = excel.createSheet("info");  
  14.         //在sheet中添加表头第1行,RowNum是从0开始的  
  15.         XSSFRow row = sheet.createRow(1);  
  16.         row.createCell(1).setCellValue("姓名");  
  17.         row.createCell(2).setCellValue("年龄");  
  18.   
  19.         //创建一个新的row  
  20.         XSSFRow row2 = sheet.createRow(2);  
  21.         //在row中创建单元格  
  22.         row2.createCell(1).setCellValue("张三");  
  23.         row2.createCell(2).setCellValue("20");  
  24.   
  25.         //创建一个新的row  
  26.         sheet.createRow(3).createCell(1).setCellValue("李四");  
  27.         sheet.getRow(3).createCell(2).setCellValue("30");  
  28.   
  29.         //将excel写入到文件中  
  30.         try {  
  31.             //通过文件输出流将内存中的excel写入到文件中  
  32.             FileOutputStream fileOutputStream = new FileOutputStream("E:" + File.separator + "POITest.xlsx");  
  33.             excel.write(fileOutputStream);  
  34.         } catch (Exception e) {  
  35.             e.printStackTrace();  
  36.         }  
  37.   
  38.     }  
  39.   
  40.     public static void main(String[] args) {  
  41.         write();  
  42.     }  
  43.         //关闭流
  44.         excel.close
  45. }
复制代码

2.2 读取文件

  1. /**  
  2. * 读取 Excel 文件  
  3. */  
  4. public  static  void read() throws IOException {  
  5.     //通过文件输入流读取文件  
  6.     FileInputStream fileInputStream = new FileInputStream("E:" + File.separator + "POITest.xlsx");  
  7.     XSSFWorkbook excel = new XSSFWorkbook(fileInputStream);  
  8.     //读取第一个工作表  
  9.     //XSSFSheet sheet = excel.getSheet("info");  
  10.     XSSFSheet sheetAt = excel.getSheetAt(0);  
  11.   
  12.     //获取最后一行的行号  
  13.     int lastRowNum = sheetAt.getLastRowNum();  
  14.     //从第二行开始读取数据  
  15.     for (int i = 1; i <= lastRowNum; i++) {  
  16.         //获取当前行  
  17.         XSSFRow row = sheetAt.getRow(i);  
  18.         //获取当前行的最后一个单元格的编号  
  19.         short lastCellNum = row.getLastCellNum();  
  20.   
  21.         //遍历所有的单元格,从第二个单元格开始  
  22.         for (int j = 1; j < lastCellNum; j++) {  
  23.             System.out.print(row.getCell(j) + "\t");  
  24.         }  
  25.         System.out.println();  
  26.     }  
  27.   
  28.     //关闭流  
  29.     excel.close();  
  30.     fileInputStream.close();  
  31. }
复制代码


四、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获取数据

引入依赖
  1. <dependency>  
  2.     <groupId>org.apache.httpcomponents</groupId>  
  3.     <artifactId>httpclient</artifactId>  
  4.     <version>4.5.13</version>  
  5. </dependency>
  6. <dependency>
  7.         <groupId>com.alibaba</groupId>
  8.         <artifactId>fastjson</artifactId>
  9.         <version>1.2.76</version>
  10. </dependency>
复制代码
  有了API和都会编码表格,现在我们只需要在用户输入对应的都会大概地域的时候,遍历表格举行读取,如果有对应的区则返回adcode
  测试类:
  1.         @Test
  2.         void WeatherTest() throws URISyntaxException, IOException {
  3. // TODO:这里的key需要引用自己的
  4.                 String key = "xxxxxxx";
  5.                 String city = "110101";
  6.                 CloseableHttpClient httpClient = HttpClients.createDefault();
  7.                 URIBuilder uriBuilder = new URIBuilder("https://restapi.amap.com/v3/weather/weatherInfo");
  8.                 uriBuilder.addParameter("key", key);
  9.                 uriBuilder.addParameter("city", city);
  10.                 HttpGet httpGet = new HttpGet(uriBuilder.build());
  11.                 try (CloseableHttpResponse response = httpClient.execute(httpGet)) {
  12.                         int statusCode = response.getStatusLine().getStatusCode();
  13.                         if (statusCode == 200) {
  14.                                 HttpEntity entity = response.getEntity();
  15.                                 String result = EntityUtils.toString(entity, "UTF-8");
  16.                                 System.out.println(result);
  17.                         } else {
  18.                                 System.out.println("Failed to retrieve data, status code: " + statusCode);
  19.                         }
  20.                 }
  21.                 httpClient.close();
  22.         }
  23. }
复制代码


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

  1.         @Test
  2.         void AdCodeQuery() throws IOException {
  3. //                TODO:这里输入下载好的地址对照表
  4.                 String AMapFilePath = "E:\\AMap_adcode_citycode.xlsx";
  5. //                需要查询的地址
  6.                 String address = "北京市";
  7.                 FileInputStream fileInputStream = new FileInputStream(AMapFilePath);
  8.                 XSSFWorkbook workbook = new XSSFWorkbook(fileInputStream);
  9.                 XSSFSheet sheetAt = workbook.getSheetAt(0);
  10.                 for (int i=1;i<sheetAt.getLastRowNum();i++){
  11.                         XSSFCell cell = sheetAt.getRow(i).getCell(0);
  12.                         String stringCellValue = cell.getStringCellValue();
  13.                         if (stringCellValue.equals(address)){
  14.                                 XSSFCell cell1 = sheetAt.getRow(i).getCell(1);
  15.                                 String adcode = cell1.getStringCellValue();
  16.                                 System.out.println("查询到地区编号为"+adcode);
  17.                         }
  18.                 }
  19.         }
复制代码


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

  1.         @Test
  2.         void WeatherTest() throws URISyntaxException, IOException {
  3. // TODO:这里的key需要引用自己的
  4.                 String key = "xxxxxxx";
  5.                 String city = "110101";
  6.                 String extensions = "all";
  7.                 CloseableHttpClient httpClient = HttpClients.createDefault();
  8.                 URIBuilder uriBuilder = new URIBuilder("https://restapi.amap.com/v3/weather/weatherInfo");
  9.                 uriBuilder.addParameter("key", key);
  10.                 uriBuilder.addParameter("city", city);
  11.                 uriBuilder.addParameter("extensions",extensions);
  12.                 HttpGet httpGet = new HttpGet(uriBuilder.build());
  13.                 try (CloseableHttpResponse response = httpClient.execute(httpGet)) {
  14.                         int statusCode = response.getStatusLine().getStatusCode();
  15.                         if (statusCode == 200) {
  16.                                 HttpEntity entity = response.getEntity();
  17.                                 String jsonString = EntityUtils.toString(entity, "UTF-8");
  18. //                                通过POI写入文件
  19.                                
  20.                                 // 将JSON字符串解析为Java对象
  21.                                 Map<String, Object> map = JSON.parseObject(jsonString, new TypeReference<Map<String, Object>>() {});
  22.                                 // 获取casts列表
  23.                                 List<Map<String, Object>> casts = (List<Map<String, Object>>) ((List<Map<String, Object>>) map.get("forecasts")).get(0).get("casts");
  24.                                
  25.                                 // 创建Excel工作簿
  26.                                 Workbook workbook = new XSSFWorkbook();
  27.                                 Sheet sheet = workbook.createSheet("Weather Forecasts");
  28.                                
  29.                                 // 创建标题行
  30.                                 Row headerRow = sheet.createRow(0);
  31.                                 CellStyle headerStyle = workbook.createCellStyle();
  32.                                 headerStyle.setFillForegroundColor(IndexedColors.GREY_25_PERCENT.getIndex());
  33.                                 headerStyle.setFillPattern(FillPatternType.SOLID_FOREGROUND);
  34.                                
  35.                                 // 写入标题
  36.                                 int cellIndex = 0;
  37.                                 String[] columnHeaders = {"date", "week", "dayweather", "nightweather", "daytemp", "nighttemp", "daywind", "nightwind", "daypower", "nightpower", "daytemp_float", "nighttemp_float"};
  38.                                 for (String columnHeader : columnHeaders) {
  39.                                         Cell cell = headerRow.createCell(cellIndex++);
  40.                                         cell.setCellValue(columnHeader);
  41.                                         cell.setCellStyle(headerStyle);
  42.                                 }
  43.                                 // 创建数据行
  44.                                 int rowIndex = 1;
  45.                                 for (Map<String, Object> cast : casts) {
  46.                                         Row row = sheet.createRow(rowIndex++);
  47.                                         // 写入数据
  48.                                         cellIndex = 0;
  49.                                         for (String columnHeader : columnHeaders) {
  50.                                                 Cell cell = row.createCell(cellIndex++);
  51.                                                 cell.setCellValue(cast.get(columnHeader).toString());
  52.                                         }
  53.                                 }
  54.                                 // 写入Excel文件
  55.                                 try (FileOutputStream fileOut = new FileOutputStream("WeatherForecasts.xlsx")) {
  56.                                         workbook.write(fileOut);
  57.                                 }
  58.                                 // 关闭工作簿
  59.                                 workbook.close();
  60.                         } else {
  61.                                 System.out.println("Failed to retrieve data, status code: " + statusCode);
  62.                         }
  63.                 }
  64.                 httpClient.close();
  65.         }
复制代码




免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4