C# 使用microsoft interop c按页面排序书签#
我有一个由2页组成的word模板文件,每一页都有一个书签,第一页书签名称是A4,第二页书签名称是A3,但是当我从word文档中读取所有书签时,我会按字母顺序获取它们,我希望它们按页面顺序,我如何才能做到这一点C# 使用microsoft interop c按页面排序书签#,c#,ms-word,bookmarks,C#,Ms Word,Bookmarks,我有一个由2页组成的word模板文件,每一页都有一个书签,第一页书签名称是A4,第二页书签名称是A3,但是当我从word文档中读取所有书签时,我会按字母顺序获取它们,我希望它们按页面顺序,我如何才能做到这一点 foreach (Bookmark bookMark in MergeResultDoc.Bookmarks) {//IMPORTANTE:IL NOME DEL SEGNALIBRO DEVE ESSERE IL TIPO DI CARTA
foreach (Bookmark bookMark in MergeResultDoc.Bookmarks)
{//IMPORTANTE:IL NOME DEL SEGNALIBRO DEVE ESSERE IL TIPO DI CARTA
pagInizio = Convert.ToInt32(pagNum);
pagNum = bookMark.Range.Information[WdInformation.wdActiveEndPageNumber].ToString();
addData( pagInizio, pagNum, bookMark.Name);
iteration++;
}
使用LINQ
OrderBy
:
var orderedResults = MergeResultDoc.Bookmarks.OrderBy(d => d.Start).ToList();
您可以读取
书签.Start
值。
这将返回书签在文档中的起始位置。
因此,您可以浏览所有书签,并根据它们的起始位置对它们进行排序
下面是一个代码:
// List to store all bookmarks sorted by position.
List<Bookmark> bmList = new List<Bookmark>();
// Iterate over all the Bookmarks and add them to the list (unordered).
foreach (Bookmark curBookmark in MergeResultDoc.Bookmarks)
{
bmList.Add(curBookmark);
}
// Sort the List by the Start member of each Bookmark.
// After this line the bmList will be ordered.
bmList.Sort(delegate(Bookmark bm1, Bookmark bm2)
{
return bm1.Start.CompareTo(bm2.Start);
});
//用于存储按位置排序的所有书签的列表。
List bmList=新列表();
//迭代所有书签并将它们添加到列表中(无序)。
foreach(MergeResultDoc.Bookmarks中的书签路边标记)
{
bmList.Add(路边停车场);
}
//按每个书签的起始成员对列表进行排序。
//在这一行之后,bmList将被排序。
排序(委托(书签bm1,书签bm2)
{
返回bm1.Start.CompareTo(bm2.Start);
});
Document.Boomarks应按字母顺序返回书签
Document.Content.Bookmarks应按书签在文档中出现的顺序返回书签。但是VBA集合文档通常不保证任何内容的特定顺序,因此更安全的做法是读取开头(如ETISO所建议的)并使用该开头进行排序。您需要一个
.Cast()
;互操作集合不是泛型的。谢谢,我认为这样更好:var orderedResults=mergesultdoc.Bookmarks.Cast().OrderBy(d=>d.pageNum.ToList();但是我得到了以下错误:“Microsoft.Office.Interop.Word.Bookmark”不包含“pagNum”的定义,ideas?没有定义pagNum也有同样的问题@DenisbokorDoh!使用Start
而不是pageNum
。我已经更新了我的答案。让我知道这对你是否有效。Hy,谢谢你的回答,有什么原因让我更喜欢这个而不是gleng的吗?我不熟悉LINQ,所以我不能提供这个,但我认为gleng的(修正了用Cast
替换OrderBy
)比我的(仍然是一行!)更清晰、更漂亮。