jxl读取excel封装成List、Map

2023-10-30

一、封装成List,数据格式为List<Map<String,String>>。将表头作为Key与明细中的值封装到Map,再将每一个Map装入到List中。

@Test
    public void readExcel2Map(){
        String path = "清单.xls";
        try {
            InputStream inputStream = new FileInputStream(path);
            Workbook workbook = Workbook.getWorkbook(inputStream);
            Sheet sheet = workbook.getSheet(0);
            List<String> key = new ArrayList<>();
            Cell[] row = sheet.getRow(0);
            for (int i = 0; i < row.length; i++) {
                key.add(row[i].getContents().toString());
            }
            int columns = sheet.getColumns();
            List<Object> datas = new ArrayList<>();
            Map<String, String> data;
            for (int i = 1; i < columns; i++) {
                data = new HashMap<String, String>();
                String value = "";
                Cell[] column = sheet.getRow(i);
                for (int j = 0; j < column.length; j++) {
                     value = column[j].getContents().toString();
                     data.put(key.get(j),value);
                }
                datas.add(data);
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

二、封装成Map,数据格式为Map<String,Map<String, String>>。将Excel的第一列作为外层Map的Key,Value为Map类型。数据对应如下图Excel。

这里因为在TestNG要参数化需要封装成Object[]或者Object[][]或者Iterator<Object>

public Object[] getCaseData(String moduleName, int caseId){
	try {
		path = "data/data.xls";
		Object[] caseData = new Object[2];
		inputStream = new FileInputStream(path);
		book = Workbook.getWorkbook(inputStream);
		sheet = book.getSheet(moduleName);   //如sheet:login
		rowNum = sheet.getRows();                  //获取行数量,除去表头用例数量为 rows-1
		Cell[] cells = sheet.getColumn(0);       // 获取第一列的所有数据
		List<String> caseKey = new ArrayList<String>();
		for (int i = 1; i < rowNum; i++) {
			caseKey.add(cells[i].getContents().toString());
		}
		//获取excel表头作为每行数据的key
		List<String> dataKey = new ArrayList<String>();
		Cell[] rows = sheet.getRow(0);           //获取第一行所有数据
		columnNum = sheet.getColumns();             //获取所有列
		for (int j = 1; j < columnNum-1; j++) {
			dataKey.add(rows[j].getContents().toString());
		}
		Map<Object, Map<String, String>> cases = new HashMap<Object, Map<String, String>>();
		Map<String, String> data = new HashMap<String, String>();
		Cell[] row = sheet.getRow(caseId);
		String value = "";
		for (int c = 1; c < row.length-1; c++) {
			value = row[c].getContents().toString();
			data.put(dataKey.get(c-1), value);
		}
		cases.put(caseId, data);
		caseData[0] = cases;
		caseData[1] = caseId;
		return caseData;
		/*Map<String, String> data = null;
		for (int r = 1; r < rowNum; r++) {
			data = new HashMap<String, String>();
			Cell[] row = sheet.getRow(r);
			String value = "";
			for (int c = 1; c < row.length-1; c++) {
				value = row[c].getContents().toString();
				data.put(dataKey.get(c-1), value);
			}
			cases.put(caseKey.get(r-1), data);
		}*/
	} catch (FileNotFoundException e) {
		logger.error("没有找到指定的文件:" + "[" + path + "]");
		Assert.fail("没有找到指定的文件:" + "[" + path + "]");
	} catch (Exception e){
		logger.error("不能读取文件: [" + path + "]",e);
		Assert.fail("不能读取文件: [" + path + "]");
	}
	return null;
}

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

jxl读取excel封装成List、Map 的相关文章

  • 在Java中将*s打印为三角形?

    我在 Java 课程中的作业是制作 3 个三角形 一份左对齐 一份右对齐 一份居中 我必须为什么类型的三角形制作一个菜单 然后输入需要多少行 三角形必须看起来像这样 到目前为止 我能够完成左对齐的三角形 但我似乎无法获得其他两个 我尝试用谷
  • 如何从 Play WSClient 的字符串创建 WSResponse 对象

    文档 https www playframework com documentation 2 4 x JavaTestingWebServiceClients Mock the web service建议使用模拟Web服务测试基于WSCli
  • 如果列名不同,则一对多休眠连接

    我有三个具有以下结构的表 合同 gt Contract id 主要 customer company id Vendor company id 公司 gt Company id 主要 创建日期 创建者 Company Timeline gt
  • 如何将 JSpinner 的值设置为特定日期

    我有一个JSpinner我添加到JPanel我想将其时间设置为 GregorianCalendar calendar JSpinner spinner new JSpinner spinner setModel model pom add
  • 如何在log4j的配置文件中为文件附加器提供环境变量路径

    我有一个log4j xml配置文件 和一个RollingFileAppender我需要提供用于存储日志的文件路径 问题是我的代码将作为可运行的 jar 部署在 Unix 机器上 所以如果我传递这样的参数 value logs message
  • 如何在Java中优雅地处理SIGKILL信号

    当程序收到终止信号时如何处理清理 例如 我连接到一个应用程序 希望任何第三方应用程序 我的应用程序 发送finish注销时的命令 发送该信息最好说什么finish当我的应用程序被破坏时的命令kill 9 编辑1 kill 9无法被捕获 谢谢
  • java中的单链表和双向链表?

    在java中 哪个集合接口可以有效地实现单链表和双向链表 请问代码示例吗 毫不奇怪 实现双向链表的正确接口是 LinkedList 看Java文档 http docs oracle com javase 8 docs api java ut
  • java.lang.Object的hashCode具体使用的算法是什么

    中使用的算法是什么JVM实施java lang Object的隐含的hashCode 方法 OpenJDK or Oracle JDK答案中首选 它依赖于实现 并且在很大程度上 该算法是entirely取决于实施 只要它是一致的 但是 根据
  • 如何使用 swagger-codegen-plugin (maven) 生成客户端代码?

    我需要使用 swagger codegen plugin for maven 在 eclipse 中生成服务器存根代码 你能帮忙怎么做吗 以及需要什么配置 在 pom xml 中 我找到了这个答案 您只需要像下面这样更改 pom xml 即
  • 从 Android 访问云存储

    我一直无法找到任何有关如何从 Android 应用程序使用云存储的具体文档 我确实遇到过这个客户端库 https cloud google com storage docs reference libraries然而 Google Clou
  • 改变 Java 中凯撒移位的方向

    用户可以通过选择 1 向左或 2 向右移动字母来选择向左或向右移动 左边工作正常 右边不行 现在它显示了完全相同的循环 但我已经改变了所有 and 以不同的方式进行标记 最终我总是得到奇怪的字符 如何让程序将字符向相反方向移动 如果用户输入
  • 如何检查日期字符串的有效性?

    在我的项目中 我需要检查日期字符串是否计算为正确的日期对象 我决定允许 yyyy MM dd 和日期格式 年 月 日 和 年 月 日 小时 分钟 我如何检查它们是否有效 我的代码为 1980 01 01 和一些奇怪的日期 如 3837 05
  • Java String ReplaceAll 方法给出非法重复错误?

    我有一个字符串 当我尝试运行时replaceAll方法 我收到这个奇怪的错误 String str something op str str replaceAll o n it works fine str str replaceAll n
  • android 中的 java.net.URL ..新手问题

    我是java新手 正在尝试android开发 以下代码生成 malformedURLException 有人可以帮助我识别异常吗 任何提示都会非常有帮助 package com example helloandroid import and
  • 在 Freemarker 模板中检查 Spring 安全角色和记录的用户名

    有谁知道 freemarker 标签来检查 freemarker 文件中的 spring 安全角色和用户名 我从网络上的几个资源中发现以下代码将打印登录的用户名 但它没有打印用户名 而是打印 登录为
  • CXF:通过 SOAP 发送对象时如何排除某些属性?

    我使用 Apache CXF 2 4 2 当我将数据库中的某个对象返回给用户时 我想排除一些属性 例如密码 我怎样才能做到这一点无需创建临时的班级 有这方面的注释吗 根据 tomasz nurkiewicz 评论我应该使用 XmlTrans
  • Java 中的微分方程

    我正在尝试用java创建一个简单的SIR流行病模型模拟程序 基本上 SIR 由三个微分方程组定义 S t l t S t I t l t S t g t I t R t g t I t S 易感人群 I 感染人群 R 康复人群 l t c
  • Jackson 反序列化相当于 @JsonUnwrapped 吗?

    假设我有以下课程 public class Parent public int age JsonUnwrapped public Name name 生成 JSON age 18 first Joey last Sixpack 我如何将其反
  • 你能快速告诉我这个伪代码是否有意义吗?

    我相信我的代码现在是万无一失的 我现在将写出伪代码 但我确实有一个问题 为什么 DRJava 要求我返回 if 语句之外的内容 正如你所看到的 我为 ex 写了 return 1 只是因为它问了 但是它永远不会返回该值 谁可以给我解释一下这
  • 将数组值导出到 csv 文件 java

    我只需要帮助将数组元素导出到 csv 文件 我不知道我的代码有什么问题 任何帮助将不胜感激 谢谢 for int index 0 index lt cols length index FileWriter fw new FileWriter

随机推荐

  • 一、深入理解redis之需要掌握的知识点

    导读 从本章开始我们将要深入讲解redis 讲解的内容包括 redis的基础数据类型及应用场景 数据存储 持久化方式 RDB AOF redis集群进化过程 redis中AKF问题解决方案 redis中CAP问题解决方案 redis的分布式
  • Android RxJava生命周期管理解决方案整理

    一 为什么要做生命周期管理 Observable create new ObservableOnSubscribe
  • ubuntu下rime输入法的安装配置

    一 安装 ibus rime安装 1 1 安装ibus输入法框架 sudo apt get install ibus ibus clutter ibus gtk ibus gtk3 ibus qt4 1 2 安装rime sudo apt
  • 计算绕原点旋转某角度后的点的坐标

    问题 A点 x y 按顺时针旋转 theta 角度后点的坐标为A1点 x1 y1 求x1 y1坐标用 x y 和 theta 来表示 方法一 设 OA 向量和x轴的角度为 alpha 那么顺时针转过 theta后 OA1 向量和x轴的角度为
  • loadrunner压力fullgc

    loadrunner 打压力的时候 我们会根据jconsole来监控被压系统的内存 cpu fullgc等 当出现内存溢出或者fullgc 见下图 既内存溢出 又有fullgc 要先查看jvm的配置 好多技术都使用的默认配置 那么就要调试j
  • 编写软著的基本常识

    1 背景介绍 1 1 软著的概念 软著即软件著作权 市面上任何一个APP在编写完毕之后都会向国家版权中心去申请著作权对自己的软件进行知识产权保护 对于一个系统来说 可以对系统的功能模块进行拆分 分别进行软著的申请 也就相当于一个系统可以申请
  • 关于阿里云ECS服务器提示高危漏洞问题的处理

    购买阿里云服务器后 一段时间 会发钱提示高危漏洞 而且很多 有高危 中危 低危 严重等几个等级 当点击 一键修复或者生成修复命令时 开始让买买买了就 关于这个问题自己手动修复的话 采用软件升级一般都可以解决 除了提示带kernel的高危漏洞
  • 送书

    最好的挣钱方式是钱生钱 怎样钱生钱呢 钱生钱可以通过投资 例如买股票 基金等方式 有人可能说买股票基金发财 我没这样的命和运气 买股票基金靠的不只有命运和运气 更多靠的是长期的经验和对股票基金数据的分析 今天我们使用scrapy框架来js逆
  • C#和Java,究竟选哪个方向?我只说事实,你自己分析……

    优质资源分享 学习路线指引 点击解锁 知识定位 人群定位 Python实战微信订餐小程序 进阶级 本课程是python flask 微信小程序的完美结合 从项目搭建到腾讯云部署上线 打造一个全栈订餐系统 Python量化交易实战 入门级 手
  • netty源码分析(十四)Netty初始化流程总结及Channel与ChannelHandlerContext作用域分析

    我们回到ServerBootstrap的init方法 之前介绍过Attribute的设置 那么Attribute的具体设置是怎样的呢 void init Channel channel throws Exception final Map
  • MySQL深度探险(二)-- MySQL系统架构详解

    一 逻辑模块组成 总的来说 MySQL 可以看成是二层架构 第一层我们通常叫做SQL Layer 在 MySQL 数 据库系统处理底层数据之前的所有工作都是在这一层完成的 包括权限判断 sql 解析 执 行计划优化 query cache
  • 联想笔记本安装win10 ubuntu配置步骤

    一 准备ubuntu分区 在win10下用磁盘管理工具 磁盘管理工具可以右键我的电脑 gt 属性 gt 磁盘管理工具打开 选中安装ubuntu的目标硬盘 右键 gt 压缩卷 会自动计算出可以分出的空间大小 根据自己需求进行压缩 压缩后会生成
  • Python中让代码 BUG 变得酷炫的利器

    当我们写的一个脚本或程序发生各种不可预知的异常时 如果我们没有进行捕获处理的时候 通常都会致使程序崩溃退出 并且会在终端打印出一堆 密密麻麻 的 traceback 堆栈信息来告诉我们 是哪个地方出了问题 就像这样子 天呐 密集恐惧症要犯了
  • 剑指offer-16 链表反转

    法一 package Leetcode ListNode Author YCKJ3803 Date 2021 3 2 22 39 Description 反转链表 最经典的题 yyds public class ReverseListNod
  • API安全

    1 API的简介 API代表应用程序编程接口 它由一组允许软件组件进行通信的定义和协议组成 作为软件系统之间的中介 API使软件应用程序或服务能够共享数据和功能 但是API不仅仅提供连接基础 它还管理软件应用程序如何被允许进行通信和交互 A
  • 带分数 -- 蓝桥杯

    带分数 蓝桥杯 题目描述 100 可以表示为带分数的形式 100 3 69258714 还可以表示为 100 82 3546197 注意特征 带分数中 数字 1 9 分别出现且只出现一次 不包含 0 类似这样的带分数 100 有 11 种表
  • 虚拟机不能上网以及无法ping通百度的解决方案

    虚拟机无法上网 看了许多博客也没有解决问题 最后自己钻研文档解决了 此处分享一下 1 点击此处编辑 2 选择虚拟网络编辑器 3 点击更改设置 4 选择v8 并将使用本地DHCP选项勾选掉 注 此处为nat模式 5 手动输入子网IP 子网掩码
  • 微信公众号支付java前后端分离开发

    微信公众号支付java前后端分离开发 微信公众号支付java前后端分离开发 我们开发的是基于河北银行的支付 支付宝微信都做了 这里就介绍一下微信公众号支付 这个公众号支付需要配置的东西太多了 官方文档写的跟s一样 看不懂 一点一点自摸索的
  • C++ Array size()实例讲解

    描述 C 函数std array size 用于获取数组中存在的元素数 声明 以下是 std array size 函数形式 std array 标头的声明 constexpr size type size noexcept 参数 空 返回
  • jxl读取excel封装成List、Map

    一 封装成List 数据格式为List