在Excel中识别行或列的添加或删除

时间:2019-02-27 06:10:35

标签: excel algorithm

我正在寻找一种能够识别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将不起作用,因为它的大多数单元格项目都是相似的,并且我无法确定首先删除的行是添加的新行。

1 个答案:

答案 0 :(得分:0)

这是一个提议的“比较”算法:

  1. 在原始文件+新文件中标记每行(行)

  2. (a)找到相等的行并匹配它们(b)对其进行标记。

  3. (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