Excel比较两个工作表(Sheet)的两组列数据,并返回相应数据

本文介绍了如何使用VBA解决比较Excel Sheet1和Sheet2中基于编码的对应数据问题,并将Sheet1的名称填充到Sheet2相应位置。通过公式`=IF(ISERROR(MATCH(B,Sheet1!B:B,0)),"false",INDIRECT("Sheet1!D"&MATCH(B,Sheet1!B:B,0)))`,实现了跨工作表数据匹配和填充。" 133424408,20038127,计算机硬件:现状、趋势与开发详解,"['硬件开发', '处理器技术', '图形处理', '存储技术', '物联网硬件']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

近日有朋友问我有关于怎么比较Excel两个工作表(Sheet)的两组列数据的方法,老实说我对Excel并不是很清楚,对Excel的研究也公仅限于VBA而已,既然朋友开口问了,不好推脱动手就试试吧。

问题简单描述如下:

Sheet1数据

A            B          C            D(需要返回的值)

0001 说明1   编码1     名称1

0002 说明2   编码2     名称2

0003 说明3   编码3     名称3

.............................

Sheet2数据

A             B          C

1         编码2     ID1

2         编码2     ID2

3         编码3     ID3

4         编码1     ID4

5         编码3     ID5

.............................

(Sheet1与Sheet2的联系就是编码了)

结果:

在Sheet2加一列把Sheet1 的名称取过来,如

Sheet2数据

A             B          C           D

1         编码2     ID1     名称2

2         编码2     ID2     名称3

3         编码3     ID3     名称3

4         编码1     ID4      名称1

5         编码3     ID5      名称3

先上网搜索一翻,没有结果,只找到同Sheet比较的例子

EasyExcel是一个由阿里巴巴开源的Java库,用于读取、操作Excel文件。如果你想要在一个工作表Sheet)中生成两组不同标题的数据,你可以按照以下几个步骤操作: 1. **创建数据模型**: 首先,你需要定义两个不同的实体类,每个类对应一组数据的结构,比如`TitleGroup1`和`TitleGroup2`。 ```java public class TitleGroup1 { private String title1; private String data1; // 其他字段... } public class TitleGroup2 { private String title2; private String data2; // 其他字段... } ``` 2. **配置读写策略**: 使用EasyExcel的`DataReadListener`和`DataWriteListener`。在`DataReadListener`中处理第一组数据,在`DataWriteListener`中处理第二组数据通过标题判断当前处理的是哪一组。 ```java List>TitleGroup1List = new ArrayList<>(); // ...在reader中读取数据填充TitleGroup1List List>TitleGroup2List = new ArrayList<>(); // ...在writer中写入数据,如需判断是否是第二组标题开始写入TitleGroup2List WorkbookWriter workbookWriter = EasyExcel.write("output.xlsx").build(); workbookWriter.registerWriteHandler(new DataWriteHandler() { @Override public void writeSheet(OutputStream outputStream, WriteSheetMeta writeSheetMeta) throws IOException { if (isSecondGroupTitle(writeSheetMeta.getTitle())) { workbookWriter.write(titleGroup2List); } else { workbookWriter.write(titleGroup1List); } } private boolean isSecondGroupTitle(String title) { // 根据标题判断,这里是示例,实际可以根据需求调整 return "TitleGroup2".equals(title); } }); workbookWriter.finish(); ``` 3. **遍历数据**: 在读取阶段,你需要遍历所有行在合适的时机切换到另一组数据。同样,在写入时,检查当前标题是否需要切换到新的一组。 注意,这里的例子假设了标题作为唯一标识来切换数据组,实际应用中可能需要其他条件或者更复杂的数据组织方式。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值