当前位置: 首页 > 知识库问答 >
问题:

如何使用Open XML SDK设置字表空单元格中的字体大小?

苏雅珺
2023-03-14

我在一个Word文件中用C#在OpenXml中创建了一个表。我使用了这个问题中提到的一些代码来设置单元格中文本的字体大小。它对包含文本的单元格很好,但空单元格似乎被赋予了正常的样式,并且字体更大,这使得行高更大。

下面是我的示例代码,其中一行带有单个单元格,字体大小应为9:

TableRow tr = new TableRow();
TableCell tc = new TableCell();
Paragraph par = new Paragraph();
Run run = new Run();
Text txt = new Text("txt");

RunProperties runProps = new RunProperties();
FontSize fontSize = new Fontsize() { Val = "18" }; // font size 9

runProps.Append(fontSize);

run.Append(runProps);
run.Append(txt);

para.Append(run);
tc.Append(para);
tr.Append(tc);

下面是结果表的一个示例。正如你所看到的,中间一行比其他一行高。在显示“TXT”的单元格中,字体大小为9,但在空白单元格中,字体大小为11。上面的代码用于所有单元格,其中空单元格只包含文本“”。当我使用Open XML工具查看该文件时,可以看到所有单元格都包含值为18的RunProperties(包括空单元格)。

如何设置单元格的字体大小而不显示任何文本?

共有1个答案

苏高峰
2023-03-14

我证实你所报告的。一种解决方法是用空格代替”empty“字符串,当然,在文本运行中添加”space preserve“。

另一种可能是创建字符样式并将其应用于表格单元格。事实证明,这比听起来更棘手,因为该样式需要对包含文本的单元格应用两次:一次是对PartherhMarkRunProperties,一次是对RunProperties。对于空单元格,样式只需应用于PartherhMarkRunProperties。

实际上,仔细考虑,您可以对字体大小使用相同的方法...

我在下面的代码中包含了这两种方法。只用于字体大小的一个被注释掉(四行)。

示例代码假定一行四列表的第三个单元格没有内容。运行,只有在有内容时才添加文本信息。

private void btnCreateTable_Click(object sender, EventArgs e)
{   
    string filePath = @"C:\X\TestCreateTAble.docx";
    using (WordprocessingDocument pkg = WordprocessingDocument.Open(filePath, true))
    {
        MainDocumentPart partDoc = pkg.MainDocumentPart;
        Document doc = partDoc.Document;

        StyleDefinitionsPart stylDefPart = partDoc.StyleDefinitionsPart;
        Styles styls = stylDefPart.Styles;
        Style styl = CreateTableCharacterStyle();
        stylDefPart.Styles.AppendChild(styl);

        Table t = new Table();
        TableRow tr = new TableRow();

        for (int i = 1; i <= 4; i++)
        {
            TableCell tc = new TableCell(new TableCellProperties(new TableCellWidth() { Type = TableWidthUnitValues.Dxa, Width = "500" }));
            Paragraph para = new Paragraph();
            ParagraphProperties paraProps = new ParagraphProperties();
            ParagraphMarkRunProperties paraRunProps = new ParagraphMarkRunProperties();
            RunStyle runStyl = new RunStyle() { Val = "Table9Point" };
            paraRunProps.Append(runStyl);
            //    FontSize runFont = new FontSize() {Val = "18" };
            //    paraRunProps.Append(runFont);
            paraProps.Append(paraRunProps);
            para.Append(paraProps);

            Run run = new Run();

            Text txt = null;
            if (i == 3)
            {
            }
            else
            {
                txt = new Text("txt");
                txt.Space = SpaceProcessingModeValues.Preserve;
                RunProperties runProps = new RunProperties();
                RunStyle inRunStyl = (RunStyle) runStyl.Clone();
                runProps.Append(inRunStyl);
                //    FontSize inRunFont = (FontSize) runFont.Clone();
                //    runProps.Append(inRunFont);
                run.Append(runProps);
                run.Append(txt);
                para.Append(run);
           }
            tc.Append(para);
            tr.Append(tc);
        }
        t.Append(tr);
        //Insert at end of document
        SectionProperties sectProps = doc.Body.Elements<SectionProperties>().LastOrDefault();
        doc.Body.InsertBefore(t, sectProps);
    }
}

private Style CreateTableCharacterStyle()
{
    Style styl = new Style()
    {
        CustomStyle = true,
        StyleId = "Table9Point",
        Type = StyleValues.Character,
    };
    StyleName stylName = new StyleName() { Val = "Table9Point" };
    styl.AppendChild(stylName);
    StyleRunProperties stylRunProps = new StyleRunProperties();
    stylRunProps.FontSize = new FontSize() { Val = "18" };
    styl.AppendChild(stylRunProps);
    BasedOn basedOn1 = new BasedOn() { Val = "DefaultParagraphFont" };
    styl.AppendChild(basedOn1);
    return styl;
}
 类似资料:
  • 这是我的代码转换从HTML到Word文档。如何设置此word文档的字体大小和字体系列。

  • 问题内容: 我得到了一个具有固定宽度和高度的表格单元,并且如果文本太大,单元格大小应保持不变,并且文本应通过overflow:hidden隐藏。 但是,如果添加了太多文本,则表格单元格会扩展到100px以上。有什么技巧可以阻止它扩展吗? 文本的长度应为几行,因此“ white-space:nowrap”解决方案不适用 问题答案: 根据CSS 2.1规则,表格单元格的高度为“内容所需的最小高度”。因

  • 问题内容: Test A long string blah blah blah 上面的方法不起作用。如何使用百分比设置表格单元格的最大宽度? 问题答案: 根据CSS 2.1规范中max-width的定义,“’min-width’和’max-width’对表,内联表,表单元格,表列和列组的影响是不确定的。” 因此,您不能直接在td元素上设置最大宽度。 如果只希望第二列最多占用67%,则可以将宽度(对

  • 我对Apache POI的一个问题是,当我将字体设置为样式,然后将该样式设置为单元格时,它将正确地将该字体应用到我想要的单元格,但也将该字体应用到其他单元格。例如,我正在从已设置的模板文件创建一个HSSF excel工作簿。这个模板文件中已经填充的单元格将始终相同,当我填充我想要的单元格并改变它们的字体大小时,一些预填充单元格的字体大小也会改变。但是,只有在我不创建新的HSSFCellStyle的

  • 我使用的是poi 3.6 我能够正确地创建excel。但当我试图将单元格类型设置为数字时,它总是将单元格类型设置为常规。 i、 e.在新创建的excel中,当我右键单击并转到“格式化单元格”时- 我的代码是这样的 你能告诉我这里缺少什么吗?

  • 问题内容: 虽然默认情况下当然可以使用,但提供的选择非常有限。 我想知道如何将自己的自定义颜色添加到文档中? 问题答案: 很多选择。 也有图案颜色和阴影颜色,但是简单得多。