首页 > 编程语言 >java中对ecel表的读取写入

java中对ecel表的读取写入

时间:2024-08-06 16:30:50浏览次数:12  
标签:Map product java 读取 ecel String poi new row

1.依赖

<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>

2.引入包和代码

package org.example;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.io.*;
import java.util.HashMap;
import java.util.Map;

public class NewTest {
    public static void main(String[] args) {

        //读入文件
        String inputFilePath = "C:\\Users\\zhaowen_chen\\Desktop\\Analysis.xlsx";
        Workbook workbook = null;
        try {
            workbook = new XSSFWorkbook(new FileInputStream(inputFilePath));
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
        Sheet sheet = workbook.getSheetAt(0);

        // 用于存储统计结果
        Map<String, Integer> applyCountMap = new HashMap<>();
        Map<String, Integer> shortageCountMap = new HashMap<>();

        //双重Map,用于统计
        Map<String, Map<String, Integer>> map = new HashMap<>();


        // 遍历Excel表中的每一行(跳过标题行)
        for (Row row : sheet) {
            // 接收数据并存储统计结果
            Map<String, Integer> productApplyCountMap = new HashMap<>();
            if (row.getRowNum() == 0) continue; // 跳过标题行

            //项目编号(取数据的方式row.getCell(1).getStringCellValue(),1为单元格的位置
            String applicant = row.getCell(1).getStringCellValue();

            if (!applicant.isEmpty()) {
                //全部参与人
                String applyStr = row.getCell(32).getStringCellValue();
                //已打卡人员
                String shortageStr1 = row.getCell(33).getStringCellValue();
                //未打卡人员
                String shortageStr2 = row.getCell(34).getStringCellValue();

                //用函数把单元格内的数据以,分割成一个字符串数组
                String[] applyProducts = applyStr.split(",");
                String[] shortageProducts = shortageStr1.split(",");
                String[] shortageProducts2 = shortageStr2.split(",");


              // 统计参与人名词出现次数
                for (String product : applyProducts) {
                    if (!product.isEmpty()) {
                        productApplyCountMap.put(product, productApplyCountMap.getOrDefault(product, 0) + 1);
                    }
                }
                // 参与人名词出现次数减去已打卡人名出现次数和未打卡人员名字出现次数
                for (String product : shortageProducts) {
                    if (!product.isEmpty()) {
                        productApplyCountMap.put(product, productApplyCountMap.getOrDefault(product, 100) - 10);
                    }
                }
                for (String product : shortageProducts2) {
                    if (!product.isEmpty()) {
                        productApplyCountMap.put(product, productApplyCountMap.getOrDefault(product, 1000) - 20);
                    }
                }

                if (applyProducts.length<shortageProducts.length){
                    System.out.println(applicant);
                }
                map.put(applicant, productApplyCountMap);

            }


        }


        // 创建新的Excel文件
        String outputFilePath = "C:\\Users\\zhaowen_chen\\Desktop\\analysis_result.xlsx";
        Workbook outputWorkbook = new XSSFWorkbook();
        Sheet outputSheet = outputWorkbook.createSheet("Analysis Result");

        // 写入标题
        Row titleRow = outputSheet.createRow(0);


        titleRow.createCell(0).setCellValue("申请人");
        titleRow.createCell(1).setCellValue("申请次数");
        titleRow.createCell(2).setCellValue("缺货次数");
//        // 写入统计结果
        int rowNum = 1;
        // 写入统计结果
        rowNum = 1;
        for (Map.Entry<String, Map<String, Integer>> outerEntry : map.entrySet()) {
            String outerKey = outerEntry.getKey();
            Map<String, Integer> innerMap = outerEntry.getValue();
            for (Map.Entry<String, Integer> innerEntry : innerMap.entrySet()) {
                String innerKey = innerEntry.getKey();
                Integer value = innerEntry.getValue();
                Row row = outputSheet.createRow(rowNum++);
                row.createCell(1).setCellValue(outerKey);
                row.createCell(0).setCellValue(innerKey);
                //行数加1,统计已打卡人员
                if (value==-9){
                    row.createCell(2).setCellValue(innerKey);
                }
                if (value==-19){
                    row.createCell(3).setCellValue(innerKey);
                }
            }
        }


        // 保存Excel文件
        try (FileOutputStream outputStream = new FileOutputStream(outputFilePath)) {
            outputWorkbook.write(outputStream);
        } catch (FileNotFoundException e) {
            throw new RuntimeException(e);
        } catch (IOException e) {
            throw new RuntimeException(e);
        }

        // 关闭资源
        try {
            workbook.close();
            outputWorkbook.close();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }



    }
}

 

标签:Map,product,java,读取,ecel,String,poi,new,row
From: https://www.cnblogs.com/chen-z-w/p/18345415

相关文章

  • Java集合知识点
    一、集合类及其特点在程序设计中,一个重要的组成部分就是如何有效地组织和表示数据通常,我们把用于存储和管理数据的实体称为数据结构而把一组元素按照一定的数据结构进行存储和管理的容器。就称为集合。通过数据结构,我们可以实现不同特性的集合。每个集合都可以保存一组其他类......
  • Java SE知识点六:面向对象之:多态
    1.多态的概念多态也是Java面向对象的三大要点之一,多态的概念通俗来讲就是一个事物的多种形态,让不同的对象去完成一个方法时会出现不同的状态。比如,猫吃饭和狗吃饭就是不同的状态,但用到的方法都是一样。2.实现多态2.1实现条件要实现多态需要遵循以下条件:必须是在......
  • java流程控制之用户交互Scanner
    java提供了这样一个工具类来实现程序和人的交互,"java.util.Scanner"是java5的新特征,我们可以通过Scanner类来获取用户的输入。基本语法:Scanners=newScanner(System.in);通过Scanner类的next()与nextLine()方法获取输入的字符串,在读取前我们一般需要使用hasNext()与hasNe......
  • 基于Java Springboot广西文化传承微信小程序
    一、作品包含源码+数据库+设计文档万字+PPT+全套环境和工具资源+部署教程二、项目技术前端技术:Html、Css、Js、Vue、Element-ui数据库:MySQL后端技术:Java、SpringBoot、MyBatis三、运行环境开发工具:IDEA/eclipse+微信开发者工具数据库:MySQL5.7数据库管理工具:Navica......
  • 基于Java Springboot高校心理咨询微信小程序
    一、作品包含源码+数据库+设计文档万字+PPT+全套环境和工具资源+部署教程二、项目技术前端技术:Html、Css、Js、Vue、Element-ui数据库:MySQL后端技术:Java、SpringBoot、MyBatis三、运行环境开发工具:IDEA/eclipse+微信开发者工具数据库:MySQL5.7数据库管理工具:Navica......
  • 基于Java Springboot高校社团微信小程序
    一、作品包含源码+数据库+设计文档万字+PPT+全套环境和工具资源+部署教程二、项目技术前端技术:Html、Css、Js、Vue、Element-ui数据库:MySQL后端技术:Java、SpringBoot、MyBatis三、运行环境开发工具:IDEA/eclipse+微信开发者工具数据库:MySQL5.7数据库管理工具:Navica......
  • 基于Java Springboot高校二手交易微信小程序
    一、作品包含源码+数据库+设计文档万字+PPT+全套环境和工具资源+部署教程二、项目技术前端技术:Html、Css、Js、Vue、Element-ui数据库:MySQL后端技术:Java、SpringBoot、MyBatis三、运行环境开发工具:IDEA/eclipse+微信开发者工具数据库:MySQL5.7数据库管理工具:Navica......
  • Java基础编程练习题50题(没更新完会持续更新)
    1.古典问题有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?publicclassRabbit{publicstaticvoidmain(String[]args){intmonths=12;//假设计算12个月的情......
  • Java编程练习之集合
    1.产生10个1-100的随机数,并放到一个数组中,把数组中大于等于10的数字放到一个list集合中,并打印到控制台。publicstaticvoidmain(String[]args){//生成随机数Randomr=newRandom();//创建数组int[]arr=newint[10];/......
  • 如何确保100万张优惠券无遗漏地发放给用户:Java实现策略
    在数字化营销中,优惠券的发放是一项常见且重要的活动。当面临发放大量优惠券(如100万张)的挑战时,确保每一张优惠券都能准确无误地发放到目标用户手中,就显得尤为重要。以下是一个基于Java实现的策略,旨在帮助你高效、安全地完成这一任务。1.设计优惠券系统1.1数据库设计首先......