У меня проблема с нашей нормальным.dotm нашей фирмы, связанная с атрибутом eastAsia в styles.xml
. Если вам интересно, вы можете найти a history of the issue here. Мы не можем просто заменить шаблон по всей стране, не перезаписывая пользовательские стили/макросы и т. Д. У меня почти нет опыта работы с OpenXML, но я думал, что это может решить проблему. Тем не менее, все статьи и учебные пособия, которые я нашел, не помогли. Все они ссылаются на часть «Документ» и направлены на изменение контента, а не на элементы и атрибуты.Изменить атрибут eastAsia в 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
?
Спасибо, @Hans ! Я использовал второе решение, чтобы избежать изменения значений по умолчанию, которые не являются проблемой. Это здорово! Если вы не возражаете против моего вопроса, почему вы используете «var Style» и «var rf» вместо «Style style» и «RunFonts rf?»? Это одна из вещей, которую я повесил, когда я экспериментировал с различными заявлениями 'foreach'. – tmoore82
@ tmoore82: О, это только мои личные предпочтения. Вы также можете явно ввести переменные. – Hans
Cool. Еще раз спасибо! – tmoore82