2017-03-27 118 views
0

我有一个词的文件,它有各种疯狂(关于格式,而不是内容)。复制并粘贴文本只保留粗体

以除去疯狂的唯一方法是Ctrl键 + Ctrl键 + Ç,和Ctrl键 + V到一个记事本文件。但仅仅使用原始文本,很难理解文档,因此我想在文档中保留加粗格式(以及文本大小为可选)。

有无论如何我可以使用C#来复制粗体格式的文档中的文本?

+0

这是[Office Interop](https://stackoverflow.com/tags/office-interop/info)的东西吗? –

+0

@Uwe凯姆:是的,它是一个Office互操作事 – 123iamking

回答

0

这将所有内容复制到文档末尾,通过比较原始文本和新文本来应用粗体字,并删除原始文本。

private static void KeepOnlyBoldFormatting(Word.Document document) 
{ 
    var undoRecord = document.Application.UndoRecord; 

    try 
    { 
     document.Application.ScreenUpdating = false; 

     undoRecord.StartCustomRecord("KeepOnlyBoldFormatting"); 

     var originalRange = document.Range(); 
     var originalEnd = originalRange.End - 1; //Skip last character (paragraph marker that cannot be removed) 

     originalRange.InsertAfter(originalRange.Text.Substring(0, originalRange.Text.Length - 1)); 

     //Make sure the ranges refer to the right things 
     originalRange.Start = 0; 
     originalRange.End = originalEnd; 
     var newRange = document.Range(originalEnd, originalEnd + originalEnd); 

     for (int i = 1; i <= originalRange.Characters.Count; i++) 
     { 
      var origChar = originalRange.Characters[i]; 
      var newChar = newRange.Characters[i]; 

      if (origChar.Bold == -1) 
       newChar.Bold = -1; 

     } 

     originalRange.Delete(); 
    } 
    catch (Exception ex) 
    { 
     Console.WriteLine(ex); 
    } 
    finally 
    { 
     document.Application.ScreenUpdating = true; 
     undoRecord.EndCustomRecord(); 
    } 

} 
+0

当 [originalEnd = 1660925] ,则代码[VAR newRange = document.Range(originalEnd,originalEnd + originalEnd);] 抛出异常: “超出范围” – 123iamking

+0

也许originalEnd + originalEnd - 1?也许我正在银行业务上增加一个线上休息时间,这不是在那里或什么 – Jbjstam