使用c#

时间:2017-07-17 02:25:14

标签: c# ms-word office-interop

一小时前,我一直在搜索将word文档拆分为单独页面的代码我发现question

使用线程中的代码

static class PagesExtension {
    public static IEnumerable<Range> Pages(this Document doc) {
        int pageCount = doc.Range().Information[WdInformation.wdNumberOfPagesInDocument];
        int pageStart = 0;
        for (int currentPageIndex = 1; currentPageIndex <= pageCount; currentPageIndex++) {
            var page = doc.Range(
                pageStart
            );
            if (currentPageIndex < pageCount) {
                //page.GoTo returns a new Range object, leaving the page object unaffected
                page.End = page.GoTo(
                    What: WdGoToItem.wdGoToPage,
                    Which: WdGoToDirection.wdGoToAbsolute,
                    Count: currentPageIndex+1
                ).Start-1;
            } else {
                page.End = doc.Range().End;
            }
            pageStart = page.End + 1;
            yield return page;
        }
        yield break;
    }
}

我使用此代码调用上面的代码

var app = new Microsoft.Office.Interop.Word.Application();
object missObj = System.Reflection.Missing.Value;
app.Visible = false;

var doc = app.Documents.Open(fileLocation);
int pageNumber = 1;

foreach (var page in doc.Pages())
{
    Microsoft.Office.Interop.Word.Document newDoc = app.Documents.Add(ref missObj, ref missObj, ref missObj, ref missObj);
    page.Copy();
    var doc2 = app.Documents.Add();
    doc2.Range().Paste();
    object newDocName = pageNumber.ToString() + ".docx";
    Console.WriteLine(newDocName);
    doc2.SaveAs2(newDocName, Microsoft.Office.Interop.Word.WdSaveFormat.wdFormatXMLDocument,
                         CompatibilityMode: Microsoft.Office.Interop.Word.WdCompatibilityMode.wdWord2010);
    pageNumber++;
}
app.ActiveDocument.Close();
app.Quit();

但我在特定文档中收到错误,这是错误

  

此方法或属性不可用,因为未选择任何文本。

它是什么原因?我检查了文档,发现文档在下一页之前包含大量空格。我怎么解决这个问题?

使用上面的代码并没有复制页眉和页脚。谢谢

更新:错误

This method or property is not available because no text is selected.
   at Microsoft.Office.Interop.Word.Range.Copy()
   at retrieveObjects(String location) in Document.cs:line 31

这就是

page.Copy();

0 个答案:

没有答案