ある種のテンプレートWordファイル(.dotではない)にOpenXMLを入力しています。私が遭遇した問題は、ドキュメントに新しいテキストを追加するときに、Wordドキュメントのデフォルトのフォントとフォントサイズを使用することです。追加する段落のフォントとサイズ、または追加する既存のテーブルの形式を使用したかったのです。
私は1つの方法を見つけましたが、それは良い方法ではないと思います。それで...それを行うためのより良い方法はありますか?
これは段落からです
private RunProperties GetRunPropertyFromParagraph(Paragraph paragraph)
{
var runProperties = new RunProperties();
var fontname = "Calibri";
var fontSize = "18";
try
{
fontname =
paragraph.GetFirstChild<ParagraphProperties>()
.GetFirstChild<ParagraphMarkRunProperties>()
.GetFirstChild<RunFonts>()
.Ascii;
}
catch
{
//swallow
}
try
{
fontSize =
paragraph.GetFirstChild<Paragraph>()
.GetFirstChild<ParagraphProperties>()
.GetFirstChild<ParagraphMarkRunProperties>()
.GetFirstChild<FontSize>()
.Val;
}
catch
{
//swallow
}
runProperties.AppendChild(new RunFonts() { Ascii = fontname });
runProperties.AppendChild(new FontSize() { Val = fontSize });
return runProperties;
}
そしてこれはTableCellから
private RunProperties GetRunPropertyFromTableCell(TableRow rowCopy, int cellIndex)
{
var runProperties = new RunProperties();
var fontname = "Calibri";
var fontSize = "18";
try
{
fontname =
rowCopy.Descendants<TableCell>()
.ElementAt(cellIndex)
.GetFirstChild<Paragraph>()
.GetFirstChild<ParagraphProperties>()
.GetFirstChild<ParagraphMarkRunProperties>()
.GetFirstChild<RunFonts>()
.Ascii;
}
catch
{
//swallow
}
try
{
fontSize =
rowCopy.Descendants<TableCell>()
.ElementAt(cellIndex)
.GetFirstChild<Paragraph>()
.GetFirstChild<ParagraphProperties>()
.GetFirstChild<ParagraphMarkRunProperties>()
.GetFirstChild<FontSize>()
.Val;
}
catch
{
//swallow
}
runProperties.AppendChild(new RunFonts() { Ascii = fontname });
runProperties.AppendChild(new FontSize() { Val = fontSize });
return runProperties;
}
コードは機能します。少なくとも私が試した文書では。しかし、それはひどい方法のように思えますが、私はより良い解決策を見つけられなかったので、もしあなたがそれを持っているなら共有してください:)