合并单元格如何获取最后一行和最后一列

单元格结构如图
image.png (39.7 KB)

想获取表头 “配方名称” 的全部单元格区域, 但是查找时获取的 “配方名称” 单元格为A1, 而不是A2

@zengweiyu

请提供更多信息,例如您使用的代码示例和您希望实现的具体目标。

@zengweiyu
通过查看你提供的图片,可以发现A1单元格是个合并区域,你可以调用Cell.get_merged_range()方法获取Range对象。

有没有简洁的办法直接通过start_cell = cell_sheet.cells.find(
what=“配方名称”, previous_cell=None
)去获取所在的合并区域, 因为我是通过值匹配的方式进行查找的

或者说, 我如何通过 “配方名称”, 匹配A1:U2的表头区域

@zengweiyu

start_cell = cell_sheet.cells.find(what=“配方名称”, previous_cell=None)
rang = start_cell .get_merged_range()

我们只能通过上面的方法得到 区域A1:A2
获取A1:U2表头区域,你得自己去遍历实现因为这个涉及到文件内容逻辑了。

问题在于, 如果一个单元格属于合并区域, 比如一个单元格为B1, 合并的区域为A1:F1, 而合并区域只提供了最大行号和最小行号, 那么查找的过程就变得繁琐了, 正常的设计不应该是这个单元格存在一个属性, 挂载了合并单元格区域吗

另外, 如何通过"A1:F1"直接获取到指定单元格区域, 有内置的方法可以做到吗

如何基于当前Cell, 获取一个拓展区域, 类似xlwings的expand方法

@zengweiyu

Range 提供了 first_rowfirst_column. 如果区域被合并了, 那么值只能在第一个单元格。从内存的角度 ,合并区域不能是单元格的属性。

Range 提供了 get 方法通过 偏移量来获取单元格

你能用个示例来说明这个功能么?

image.png (25.5 KB)

如图

如何一次性获取值为"电解液"的所有单元格对象

我已经找到, Cell.get_merged_range()方法,就是如此

@zengweiyu

这一列都是电解液,还是会包含别的数据?
如果包含别的数据, 数据是连续的么?
如果只有电解液, 那就是找到空白行截止,你可以用 current_region

数据不连续 :smile: :smile: :smile: :smile: :smile: :smile: :smile: :smile: :smile: :smile: :smile:

如何基于Range对象进行指定值查找单元格

@zengweiyu
目前来说
1,使用 get_enumerator method | Aspose.Cells for Python via .NET API References 获取每一个cell, 然后自己比较
2,使用 Cells.Find() 方法,设置查找区域: set_range method | Aspose.Cells for Python via .NET API References

考虑到需要基于表头区域进行频繁查找, 而主体数据十分庞大, 如果一味使用cells.find()的话, 当查找没有命中时(可能表头不存在”电解液“), 检索的耗时会十分巨大

这一列有其他数据的数据, 那么只能通过调用方来进行值遍历是吗,

@zengweiyu
其实都一样。如果我们提供方法实现你的业务,我们内部实现也是要遍历的。