1

C#4を使用してWord文書からフッターを削除しようとしています。フッターは次のようになります。

ページ12012年4月18日

実際、これはWordVBAで表示されたときのフッターのテキストです。

ページ1(2012年4月18日

実際、「ページ1」と「4月」の間に箇条書きがあります。最終的に、フッターは次のようになります。

2012年4月18日

とにかく、Word VBAでは、次のコードを使用してそれを行うことができます。

Dim rngFtr As Range
Set rngFtr = ActiveDocument.Sections(1).Footers(wdHeaderFooterPrimary).Range
rngFtr.Collapse wdCollapseStart
rngFtr.MoveStart wdParagraph, 1
rngFtr.MoveEnd wdWord, 4
rngFtr.Delete

C#でも同じことを試しましたが、フッターが完全に削除されます。これがC#4の私のコードです:Microsoft.Office.Interop.Wordを使用しています。

Microsoft.Office.Interop.Word.Application ap = new Microsoft.Office.Interop.Word.Application();
Document doc = ap.Documents.Open(docFile.FullName, ReadOnly: false, Visible: false);
doc.Activate();
Microsoft.Office.Interop.Word.Range ftrRng =
    doc.Sections[1].Footers[WdHeaderFooterIndex.wdHeaderFooterPrimary].Range;
ftrRng.Collapse(WdCollapseDirection.wdCollapseEnd);
ftrRng.MoveStart(WdUnits.wdParagraph, 1);
ftrRng.MoveEnd(WdUnits.wdWord, 4);
ftrRng.Delete();

ap.Documents.Close(SaveChanges: false, OriginalFormat: false, RouteDocument: false);

((_Application) ap).Quit(SaveChanges: false, OriginalFormat: false, RouteDocument: false);
    System.Runtime.InteropServices.Marshal.ReleaseComObject(ap);

「ページ1」と箇条書きを取り除くために、次のような他の方法も試しました。

var replaceText = string.Empty;
object mis = System.Type.Missing;
var targetFooterText =
    doc.Sections[1].Footers[WdHeaderFooterIndex.wdHeaderFooterPrimary].Range.Text.ToString().Substring(1, 10);
doc.Sections[1].Footers[WdHeaderFooterIndex.wdHeaderFooterPrimary].Range.Find.Execute(
    targetFooterText,
    ref mis, ref mis, ref mis, ref mis, ref mis, ref mis, ref mis, ref mis,
    replaceText,
    ref mis, ref mis, ref mis, ref mis, ref mis);

これは何もしません。

私が間違っていることを教えてください。前もって感謝します。

これが重要かどうかはわかりませんが、箇条書きはUnicode-2022です。

これがドキュメントフッターのスクリーンキャップです。「Page1」というテキストと箇条書きを削除して、日付に置き換えるだけです。残りはそのままにしておく必要があります。

ここに画像の説明を入力してください

4

2 に答える 2

0

以下の例を試してください。次のようになります。

  • フッター範囲からすべてのテキストを抽出します
  • テキストから「ページ」文字列を削除します
  • フッター範囲のテキストを前の値から「ページ」を引いた値に設定します

        using Word = Microsoft.Office.Interop.Word;
    
        Word.Document document = Globals.ThisAddIn.Application.ActiveDocument;
    
        Word.Range footerRange =
            document.Sections[1].Footers[Word.WdHeaderFooterIndex.wdHeaderFooterPrimary].Range;
    
        string rangeText = footerRange.Text;
    
        if (!String.IsNullOrEmpty(rangeText) && rangeText.Contains("Page"))
        {
            //Now set the footer Range Text to the new value minus the "Page"
            //Note: Edit as required because the page number may not always be one character
            string newValue = rangeText.Remove(rangeText.IndexOf("Page"), 6);
            footerRange.Text = newValue;
        }
    
于 2012-04-20T06:19:15.273 に答える
0

Word VBAを掘り下げて遊んだ後、別の解決策を見つけることができました。これが私の最終的なコードです:

Microsoft.Office.Interop.Word.Application ap = new Microsoft.Office.Interop.Word.Application();

Document doc = ap.Documents.Open(docFile.FullName, ReadOnly: false, Visible: false);
doc.Activate();

// These 3 lines did the trick.
doc.ActiveWindow.ActivePane.View.SeekView = WdSeekView.wdSeekPrimaryFooter;
doc.Application.Selection.MoveRight(WdUnits.wdCharacter, 1);
doc.Application.Selection.Delete(WdUnits.wdCharacter, 9);

ap.Documents.Close(SaveChanges: false, OriginalFormat: false, RouteDocument: false);

((_Application) ap).Quit(SaveChanges: false, OriginalFormat: false, RouteDocument: false);
System.Runtime.InteropServices.Marshal.ReleaseComObject(ap);
于 2012-04-24T14:50:43.470 に答える