2012-12-05 48 views
2

使用.Select()選擇標題範圍時,Microsoft Word將自動從我當前的視圖類型(打印版式)切換到草稿視圖。如何阻止Word切換到草稿視圖?選擇Word互操作標題範圍會導致Word切換到草稿視圖

下面的代碼示例演示了我在做什麼:

// this.Document is a Microsoft.Office.Interop.Word.Document 
Section section = this.Document.Sections.First; 
foreach (HeaderFooter header in section.Headers) 
{ 
    if (header.Exists) 
    { 
    header.Range.Select(); // When I call this, Word switches to Draft View. 
    break; 
    } 
} 

編輯(3):

顯然保存視圖類型和重置它的工作。但是,當Word切換到「草稿視圖」然後返回到「打印版式」時,這會導致惱人的閃爍。此外,當我雙擊主文檔空間以脫離標題部分時,Word將切換回草稿視圖。

WdViewType viewType = this.Document.ActiveWindow.View.Type; 
range.Select(); 
this.Document.ActiveWindow.View.Type = viewType; 

回答

2

View.SeekView屬性必須排除wdNormalView選擇範圍之前(查看草案)所有視圖類型來設置。

var window = this.Document.ActiveWindow; 
// wdNormalView == Draft View, where SeekView can't be used and isn't needed. 
if (window.View.Type != WdViewType.wdNormalView) 
{ 
    // -1 Not Header/Footer, 0 Even page header, 1 Odd page header, 4 First page header 
    // 2 Even page footer, 3 Odd page footer, 5 First page footer 
    int rangeType = range.Information[WdInformation.wdHeaderFooterType]; 
    if (rangeType == 0 || rangeType == 1 || rangeType == 4) 
    window.View.SeekView = WdSeekView.wdSeekCurrentPageHeader; 
    if (rangeType == 2 || rangeType == 3 || rangeType == 5) 
    window.View.SeekView = WdSeekView.wdSeekCurrentPageFooter; 
} 
header.Range.Select(); 
-1

可以利用的範圍內物體的詞集合來選擇所述標題

Section section = this.Document.Sections.First; 
foreach (HeaderFooter header in section.Headers) 
{ 
    if (header.Exists) 
    { 
    header.Range.Words.First.Select() 
    break; 
    } 
} 
+0

我在選擇標題時沒有任何問題......這就是'header.Range.Select()'正在做的事情。當我選擇標題時,Word在切換到「草稿視圖」時遇到問題。 –

+0

@Joe W我知道爲什麼我提供了代碼。它選擇標題並且不切換到草稿視圖。 – Sorceri

+0

除非我做錯了什麼,否則我嘗試了你的確切代碼,它不起作用。它仍然切換到草稿視圖,但現在它只是選擇標題中的第一個單詞而不是整個範圍。 –