我的公司的Normal.dotm与styles.xml
中的eastAsia属性有关。如果您有兴趣,可以找到a history of the issue here。我们不能只在不覆盖自定义样式/宏等的情况下更换整个模板。我几乎没有使用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
属性?
答案 0 :(得分:1)
我可以考虑两种不同的解决方案来更改东亚字体值。
第一个解决方案只更改了所有RunFonts
的东亚字体值
在Styles
集合下。这个解决方案也将改变东亚
文档默认段落和运行属性的字体值(DocDefaults
类,w:docDefaults)。
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";
}
}
}
}