☰
干货:按规则定位取值
2026/9/27 22:50:40 网站建设 项目流程

按 Material 规则精准定位取值:SignLocal/ValueLocal 寻址

问题:元素值在表里的位置不固定

识别的表格里,同一个元素"Fe",可能在不同的行、不同的列,甚至符号和值分居两格。硬编码坐标根本扛不住。

第一性原理:别死记坐标,按规则定位。规则里有"在哪找、找谁、值在哪个相对位置"。

规则结构(配置里定义)

我们的匹配规则里有两个关键字段:

  • SignLocal:定位锚点,描述"在这个位置能找到这个元素"。比如Fe出现在某列。
  • ValueLocal:值的位置,描述符号旁边哪个格子是值。
# 简化规则rule={"Material":"Fe","SignLocal":"F",# 在F列找Fe"ValueLocal":"G",# 值在G列}

定位取值

defextract_from_sheet(ws,rules):cells={}# cell对象# 先按坐标知道每格文字抬头forrowinws.iter_rows():forcellinrow:txt=str(cell.valueor"")forruleinrules:ifrule["SignLocal"]intxt:# 找到了锚点,去 ValueLocal 取邻格值neighbors=ws[rule["ValueLocal"]+str(cell.row)]result[rule["Material"]]=neighbors.valuereturnresult

核心就一句话:在行里搜到锚点文本,再去同行/同列的另一个坐标取值。

关键:锚点文本的"命中"判断

用in做包含匹配("Fe" in text)比较容易误命中——Fe2O3也含Fe。所以SignLocal的设计要尽量精确到"这一格的文本是该元素,而非包含"。

这一格取舍直接影响准确性,是校验配置时最容易返工的点。

它解决的问题

一段数据,元素名在 A 列、符号在 E 列、值在 F 列,列位置前后版本还变。硬编码坐标死路一条,规则化后改配置就能适配,不用动代码。

取值这种事,写成"规则"永远比写成"坐标"健壮。这就是 SignLocal/ValueLocal 的意义。


需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询