Ms word 如何获取已删除段落的上一个列表编号

Ms word 如何获取已删除段落的上一个列表编号,ms-word,vsto,office-interop,word-addins,Ms Word,Vsto,Office Interop,Word Addins,我有一个启用了跟踪更改的文档。例如: 通过访问属性段落.Range.ListFormat.ListString,我可以找到列表项的实际列表编号。对于第1段和第2段,该属性具有适当的值“1”和“2”。但是当涉及到第3段和第4段时,该属性适当地包含值“1”和“3”,尽管之前的值是“3”和“4”。VSTO中是否有其他属性或方法可用于获取段落.Range.ListFormat.ListString属性的上一个值 更新: 下面是我用来提取列表编号的代码,以阐明我想要实现的目标 var listparge

我有一个启用了跟踪更改的文档。例如:

通过访问属性
段落.Range.ListFormat.ListString
,我可以找到列表项的实际列表编号。对于第1段和第2段,该属性具有适当的值“1”和“2”。但是当涉及到第3段和第4段时,该属性适当地包含值“1”和“3”,尽管之前的值是“3”和“4”。VSTO中是否有其他属性或方法可用于获取
段落.Range.ListFormat.ListString
属性的上一个值

更新:

下面是我用来提取列表编号的代码,以阐明我想要实现的目标

var listparges=Document.listparges.Cast().ToList();
var actualListNumbers=新列表();
var previousListNumbers=新列表();
foreach(列表段落中的var段落)
{
ActualListNumber.Add(段落.Range.ListFormat.ListString);
加上(?);
}
//ActualListNumber将包含以下值:1、2、1、3
//PreviousListNumber应包含以下值:1、2、3、4

我做了很多研究,发现了一些问题。这里可以读取旧值。但是,Microsoft Office中似乎存在错误,因为对于已删除的列表条目,始终显示“1.”

我试图编写一个小类
ParagraphRevisionHolder
来读取前面的值,但错误仍然存在。如果您确切地知道列表是什么样子的,那么您可以编写一个变通方法,例如通过读取项目的索引

在下面的示例中,我还读取了,以便您可以查看列表条目是否已被删除或编辑。 我希望你能找到解决问题的办法。如果你能在这里展示一下就好了

//
///此函数将在此加载项开始时调用
/// 
/// 
/// 
私有void ThisAddIn_启动(对象发送方,事件参数e){
//打开文档时将激发事件
this.Application.DocumentOpen+=此应用程序\u打开;
}
/// 
///获取打开文档的所有列表段落
/// 
///打开的文档
作废此应用程序\u打开(文档){
ListPages ListPages=document.listPages;
列表=新列表();
foreach(列表段落中的段落){
增加(新段落修订持有人(段落范围));
}
}
类段落修正持有者{
/// 
///如果范围存在修订,则返回
/// 
公共布尔修正案性别歧视=错误;
/// 
///返回当前列表字符串
/// 
公共字符串CurrentListString;
/// 
///返回当前文本
/// 
公共字符串文本;
/// 
///返回上一版本的ListString
/// 
公共字符串PreviousListString;
/// 
///返回上一版本的文本
/// 
公共字符串前置文本;
/// 
///返回修订的类型
/// 
公共WdRevisionType PreviousRevisionType;
/// 
///返回所有修订的集合
/// 
私人修订;
/// 
///这个类的构造函数
/// 
///段落的范围
公共段落修订持有者(范围段落范围){
this.CurrentListString=paragraphRange.ListFormat.ListString;
this.CurrentText=paragraphRange.Text;
此.Revisions=段落范围.Revisions;
这个.GetPreviousText();
}
/// 
///设置第一个修订的数据
/// 
私有void GetPreviousText(){
如果(修订次数>0){
修正主义性别歧视=正确;
foreach(修订中的修订){
this.PreviousRevisionType=revision.Type;
this.PreviousText=revision.Range.Text;
//在屏幕截图的示例文档中,修订ListString总是错误地返回“1”
this.PreviousListString=revision.Range.ListFormat.ListString;
打破
}
}
}
}

我也碰到了这个问题。更有趣的是,当您删除列表中最后一个(在您的情况下)项目时,删除的项目将保留其原始列表编号4

在这种情况下,我的解决办法是:

  • 获取删除的段落标记并拒绝删除(不知何故,您必须执行RejectAll操作,因为修订版(1)将拒绝整个删除的列表项)
  • 在RejectAll之后,listString将从1更改为1。到3
  • 获取列表字符串的
  • 再次删除段落标记

  • 你可以在使用
    段落.Range.ListFormat.ListString
    的地方明确地分享你的代码吗?@UfguFugullu用代码示例更新了我的问题我应该提到我不想编辑原始文档。拒绝修订,然后在此之后再次删除段落标记将更改修订的作者。您可以使用ActiveDocument.Undo返回原始版本