我正在寻找一种能够识别Excel文件中任何行或列的添加或删除的解决方案。
到目前为止,通过使用 LCS 即“最长公共子序列” 算法,我可以找到两个版本之间的公共子序列Excel文件,但是此方法不是100%正确。
例如
Excel版本1
1 2 4 5 9 3
4 9 3 7 5 3
8 2 7 9 3 8
9 7 2 8 2 4
更新后,我删除1行(第二行)并添加1行(在同一位置,即第二行)。
Excel版本2
1 2 4 5 9 3
4 9 5 7 5 3
8 2 7 9 3 8
9 7 2 8 2 4
除了1个单元格项外,添加的行几乎相似。在这种情况下,LCS将不起作用,因为它的大多数单元格项目都是相似的,并且我无法确定首先删除的行是添加的新行。
答案 0 :(得分:0)
这是一个提议的“比较”算法:
在原始文件+新文件中标记每行(行)
(a)找到相等的行并匹配它们(b)对其进行标记。
(a)查找新行(b)标记它。
执行示例:
假定两个数据都位于每个文件的A1:F4中。在两个文件中,添加执行[1]的新列。
func renderer(_ renderer: SCNSceneRenderer,
didUpdate node: SCNNode,
for anchor: ARAnchor) {
guard let planeAnchor = anchor as? ARPlaneAnchor,
let planeNode = node.childNodes.first,
let myPlane = planeNode.geometry as? SCNPlane
else { return }
let width = CGFloat(planeAnchor.extent.x)
let height = CGFloat(planeAnchor.extent.z)
myPlane.width = width
myPlane.height = height
let x = CGFloat(planeAnchor.center.x)
let y = CGFloat(planeAnchor.center.y)
let z = CGFloat(planeAnchor.center.z)
planeNode.position = SCNVector3(x, y, z)
}
向下拖动所有
。因此对于[2],请使用第三个excel文件(或新工作表),比较“内容”和“ content-rowNumber”列。由于我将Sheet1用作原始文件,将Sheet2用作NewFile,因此我的公式如下。
In Sheet1 & Sheet2 :
in H1 put =ROW()
in I1 put =A1&","&B1&","&C1&","&D1&","&E1&","&F1
in J1 put =H1&" - "&I1
并向下拖动。
TRUE / FALSE结果是(基本)比较的结果。如果您需要进行更多分析,则可以继续修改/添加所需的公式。
希望有帮助。 (:
示例文件为here。