如何在 C# 中修复 'Office.Interlop -2146822384: Cannot edit Range'

How to fix 'Office.Interlop -2146822384: Cannot edit Range' in C#

我正在创建一个引用生成器,它采用 word 文档模板并替换模板中的关键字以生成引用。之后文档以 PDF 文件形式返回。如果没有数据可以填写,模板中有几个部分需要删除。

目前有一个 table 行可以附加 2 个不同的注释。如果没有要添加的注释,如果我不删除这些行,则行中有很多白色space。

这是一个在 Visual Studio 中使用 .NET Framework 的 Windows 表单应用程序。我已在 Sack-overflow 和 Microsoft.Office.Interop.Word API 上搜索此错误,但未能找到类似的问题。最初我使用相同的范围对象进行搜索和删除。所以我尝试制作一个新的范围对象,但我仍然遇到同样的问题。

我在这里放了一些代码:

//If there is data to add
if (temp.DATAOBJECT != null){
    FindAndReplace(_word, "<<Add-on Note PRODUCT>>", temp.DATAOBJECT, 1);
}else{
    //////HERE IS WHERE THE FIRST RANGE IS DELETED. THIS ONE WORKS///////
    range.Find.Execute("<<Add-on Note PRODUCT>>");
    range.Expand(WdUnits.wdParagraph); 
    range.Delete();
}
//If there is data to add
if (temp.DATAOBJECT != null){
    FindAndReplace(_word, "<<Add-on Note LINE>>", temp.DATAOBJECT, 1);
}else{
    ///HERE IS WHERE THE SECOND RANGE IS DELETED. THIS ONE DOESN'T WORK///
    range2.Find.Execute("<<Add-on Note LINE>>");
    range2.Expand(WdUnits.wdParagraph); 
    range2.Delete();
}

我已成功删除其中一个行注释,但是当我尝试删除第二行时出现错误 "Error -2146822384: Cannot edit Range."

我不能只用“”使该行空白,因为它会留下很多空白 space。必须删除。

感谢@CindyMeister 的评论我们已经找到了错误发生的原因。

问题范围是选择 table 中单元格的结尾,这也选择了表示单元格结尾的“\a”标签。如果选择了 \a 标签,我们不能在此范围内调用 Delete。这是更新后的代码:

//If there is data to add
if (temp.DATAOBJECT != null){
  FindAndReplace(_word, "<<Add-on Note LINE>>", temp.DATAOBJECT, 1);
}else{
  range2.Find.Execute("<<Add-on Note LINE>>");
  range2.Expand(WdUnits.wdParagraph); 
  range2.MoveEnd(WdUnits.wdCharacter, -1);
  range2.Delete();
}

希望这对以后的人有所帮助