如何使用OpenXmlAttribute修改Excel OpenXml文件的字体大小?
不存在OpenXmlAttribute("size", null, "48")这种直接设置单元格字体大小的写法。
你之前用到的s属性是单元格的样式索引引用属性,本身不直接代表粗体配置:你设置s="1"本质是引用了Excel文件styles.xml部件中索引为1的单元格样式条目,这个条目提前关联了配置为粗体的字体,才最终呈现出粗体效果。
OpenXmlAttribute的三个参数分别对应属性名、命名空间、属性值,所有可用的属性名完全遵循ECMA-376标准定义的SpreadsheetML语法,没有自定义的size这类直接作用在单元格上的字体大小属性。
要设置单元格字体大小有两种常规方案:
- 方案1:预定义样式索引
先在styles.xml部件中新增一条配置了指定字号的字体条目,再将该字体绑定到新的单元格样式节点,给该样式分配唯一的索引值,之后只需要给单元格的 s属性赋值为这个索引即可,和你现在设置粗体的逻辑完全一致。 - 方案2:直接在单元格内写富文本格式
如果不想全局预定义样式,可以在Cell节点下嵌套节点,在 中单独配置当前单元格的字体大小,示例代码如下:
oxw = new OpenXmlWriter(); // 单元格设置为内嵌富文本类型 List<OpenXmlAttribute> cellAttrs = new List<OpenXmlAttribute> { new OpenXmlAttribute("t", null, "inlineStr") }; oxw.WriteStartElement(new Cell(), cellAttrs); // 写入文本块 oxw.WriteStartElement(new Run()); // 配置文本格式 oxw.WriteStartElement(new RunProperties()); oxw.WriteElement(new FontSize { Val = 48 }); oxw.WriteElement(new Bold()); // 也可同时配置粗体等其他样式 oxw.WriteEndElement(); // 写入文本内容 oxw.WriteElement(new Text(criteria.Title.ToString())); oxw.WriteEndElement(); oxw.WriteEndElement();
所有OpenXmlAttribute支持的属性名,都可以直接对照ECMA-376标准中SpreadsheetML部分的元素属性定义查询,所有属性和Open XML SDK封装的类属性一一对应。
内容的提问来源于stack exchange,提问作者Robbie Boltman
相关产品推荐
相关产品推荐

