我正在尝试使用C#4从Word文档中删除页脚。页脚看起来像这样:
Page 1 2012年4月18日
实际上,这是在Word VBA中显示的页脚文本:
第1页(2012年4月18日)
“Page 1”和“April”之间实际上有一个子弹角色。最后,页脚应如下所示:
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);
我甚至尝试过其他方法来摆脱“Page 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。
这是文档页脚的屏幕截图。我只需要删除文本“Page 1”&子弹并将其替换为日期。其余部分应保持原样。
答案 0 :(得分: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;
}
答案 1 :(得分: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);