1

我对我们公司的 Normal.dotm 有疑问,该文件与styles.xml. 如果您有兴趣,可以在此处找到该问题的历史记录。我们不能只替换整个模板而不覆盖自定义样式/宏等。我几乎没有使用 OpenXML 的经验,但我认为它可能会解决这个问题。但是,我发现的所有文章和教程都没有太大帮助。它们都引用了“文档”部分,并专注于更改内容而不是元素和属性。

基本上,我需要遍历每个<w:rFonts>元素并将w:eastAsia属性从更改"Times New Roman""MS Mincho." 这是我唯一有信心的部分:

using DocumentFormat.OpenXml;
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Wordprocessing;
using System;
using System.Collections.Generic;
using System.IO;
using System.IO.Packaging;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace eastAsiaFix
{
  class Program
  {
    static void Main(string[] args)
    {
        using (WordprocessingDocument myDocument = WordprocessingDocument.Open(@"C:\users\" + Environment.UserName + @"\Desktop\eastAsiaFix.dotm", true))
        {
            StyleDefinitionsPart styles = myDocument.MainDocumentPart.StyleDefinitionsPart;

            if (styles == null)
            {
                return;
            }
        }

    }
  }
}

我认为我需要的是以下内容:

foreach (OpenXMLElement theStyle in styles.Styles.ChildElements)
{
     if (theStyle.LocalName = "style")
     {
         theStyle.StyleRunProperties.RunFonts.EastAsia.Value = "MS Mincho"; //faking this
     }
}

如何到达w:rFonts节点并编辑eastAsia属性?

4

1 回答 1

1

我可以想到两种不同的解决方案来更改东亚字体值。第一个解决方案只是更改集合 下所有的东亚字体值。此解决方案还将更改文档默认段落和运行属性(类,w:docDefaults)的东亚字体值。RunFontsStylesDocDefaults

using (WordprocessingDocument myDocument = WordprocessingDocument.Open(@"C:\users\" + Environment.UserName + @"\Desktop\eastAsiaFix.dotm", true))
{
  StyleDefinitionsPart stylesPart = myDocument.MainDocumentPart.StyleDefinitionsPart;

  if (stylesPart == null)
  {
    Console.Out.WriteLine("No styles part found.");
    return;
  }

  foreach(var rf in stylesPart.Styles.Descendants<RunFonts>())
  {          
    if(rf.EastAsia != null)
    {
      Console.Out.WriteLine("Found: {0}", rf.EastAsia.Value);
      rf.EastAsia.Value = "MS Mincho";
    }        
  }      
}

第二种解决方案是仅更改样式定义的东亚字体值(而不是文档默认段落和运行属性):

using (WordprocessingDocument myDocument = WordprocessingDocument.Open(@"C:\users\" + Environment.UserName + @"\Desktop\eastAsiaFix.dotm", true))
{
  StyleDefinitionsPart stylesPart = myDocument.MainDocumentPart.StyleDefinitionsPart;

  if (stylesPart == null)
  {
    Console.Out.WriteLine("No styles part found.");
    return;
  }

  foreach(var style in stylesPart.Styles.Descendants<Style>())
  {          
    foreach(var rf in style.Descendants<RunFonts>())
    {
      if(rf.EastAsia != null)
      {
        Console.Out.WriteLine("Found: {0}", rf.EastAsia.Value);
        rf.EastAsia.Value = "MS Mincho";
      } 
    }               
  }      
}
于 2013-05-01T08:49:20.620 回答