无法在VS2017中使用openxml C#在特定行之前添加克隆行

时间:2017-10-02 09:21:22

标签: c# openxml

当我尝试克隆并使用open xml插入一行时,我当前遇到了问题。

我注意到在我下面的代码中,如果srcRowIdx和refRow是相同的索引,我将能够克隆带有插入行的行并成功保存excel表。但是,如果srcRowIdx和refRow不同,则excel表将被破坏。任何人都可以告诉我为什么会这样?

include('session.php');

$productname = $_GET['productname'];
$productcode = $_GET['productcode'];    

$wishlist = array("$productname" => $productcode);      

$_SESSION["wishlist"] = $wishlist;

print_r($_SESSION["wishlist"]);

1 个答案:

答案 0 :(得分:0)

好的 - 当src和ref行相等时,这是有效的原因是因为第4行:

var clonedRow = (Row)srcRow.CloneNode(true);

您永远不会更改此克隆行的RowIndex或任何CellReferences。所以它始终保持在src的索引。

当src和ref相等时,克隆节点的RowIndex和CellReferences正常,后面的每一行都递增1.并且Excel正确验证了这一点。例如,当src和ref为24时,克隆节点CellReferences保持为24,所有Rows CellReferences 24及以上都增加1,因此表单按顺序排列。

然而,假设src为24且ref为27的情况。克隆的行具有RowIndex和CellReferences,其中Index为24.当您在第27个点中插入它并将之后的所有行增加1时,则您的工作表已关闭:

  • (从第23行开始:)
  • 第23行的行索引为23,CellReferences为23
  • 的单元格
  • 第24行的行索引为24,CellReferences为24
  • 的单元格
  • 第25行的行索引为25,CellReferences为25
  • 的单元格
  • 第26行的行索引为26,CellReferences为26
  • 的单元格
  • 第27行的行索引 24 和CellReferences为的单元格 的 24
  • 第28行的行索引为28,CellReferences为28
  • 的单元格

(依此类推)

当Excel打开并验证时,它会在第27行窒息,如果你允许它将为你删除它。

要解决此问题,您需要将clonedRow的RowIndex和CellReferences更新为目标行数。所以你真的很亲密。