Simon 's Blog
» 做笔记做笔记
Toggle navigation
Simon 's Blog
HOME
总裁介绍
coper
zongcai
what
ARCH
TAGS
navigation
!!! XLSX样式和格式
? SpreadsheetML ?
2021-09-13 09:05:25
103
0
0
simon88
? SpreadsheetML ?
[TOC] # 电子表格样式 可以使用样式、主题和直接格式设置电子表格的样式。有单元格样式、表格样式和枢轴样式。但是,与 WordprocessingML 不同,样式 XML 永远不会与工作表中的内容一起出现。格式始终单独存储在工作簿的单个样式部分中。整个工作簿也有一个主题部分。 单元格样式可以指定数字格式、单元格对齐方式、字体信息、单元格边框和背景/前景填充。表格样式指定表格区域的格式,例如标题为粗体或灰色填充应应用于交替行。数据透视表样式指定数据透视表区域的格式,例如总计或行轴的颜色。主题定义了一组颜色、字体信息和对形状的影响。样式或格式元素可以通过引用主题来定义颜色、字体或效果,但当然,如果主题更改,格式可能会更改。 ## 文本级格式 然而,在了解应用于工作表的样式之前,让我们首先介绍文本级别的格式,即不是应用于整个单元格的格式,而是可能会因单词而变化的格式,例如不同的颜色或效果。例如,请参阅下面的单元格 A13,第一个单词为蓝色,第二个单词为橙色下划线。显然,这不能通过单元格样式来完成。这种格式化是在存储单元格文本的共享字符串部分内完成的。  让我们看看工作表部分第 13 行中第一个单元格的 XML。我们从单元格t="s"的 type 属性知道文本存储在共享字符串部分,从`<v="25"/>`我们知道字符串是第 26 个字符串或`<si>`。(请记住,它是一个从零开始的索引。) ``` <row r="13"> <c r="A13" t="s"> <v>25</v> </c> . . . </row> ``` 字符串的 XML 如下。请注意,格式直接应用在字符串项目中,就像直接格式应用到使用`wordprocessingML` (docx) 文档中的运行属性 ( `<rPr>` ) 的文本运行 ( `<r>` ) 一样。 ``` <si> <r> <rPr> <sz val="11"/> <color theme="4"/> <rFont val="Calibri"/> <family val="2"/> <scheme val="minor"/> </rPr> <t>Blue</t> </r> <r> <rPr> <sz val="11"/> <color theme="1"/> <rFont val="Calibri"/> <family val="2"/> <scheme val="minor"/> </rPr> <t xml:space="preserve"> </t> </r> <r> <rPr> <u/> <sz val="11"/> <color theme="9"/> <rFont val="Calibri"/> <family val="2"/> <scheme val="minor"/> </rPr> <t>Widget</t> </r> </si> ``` ## 单元格级格式 现在让我们回到单元格样式。实施电子表格ML 中的样式以最大程度地减少重复,这是通过集合完成的。在样式部分有如下所示的集合。 ``` <stylesheet xmls="http://schemas.openxmlformats.org/spreadsheetml/2006/main"> <numFmts/> <fonts/> <fills/> <borders/> <cellStyleXfs/> <cellXfs/> <cellStyles/> <dxfs/> <tableStyles/> </stylesheet> ``` 上面的大多数集合(除了`<dxfs>`和`<tableStyles>`)都与单元格有关。前四个——numFmts、字体、填充和边框——包含工作簿中每个单元格的所有可能特征。每个可能有许多元素,每个元素定义具有相同特征的一组单元格的特征。例如,下面是工作簿的`<fills>`示例。工作簿中的每个单元格都将使用这些填充定义之一。 ```XML <fills count="5"> <fill> <patternFill patternType="none"/> </fill> <fill> <patternFill patternType="gray125"/> </fill> <fill> <patternFill patternType="solid"> <fgColor rgb="FFFFEB9C"/> </patternFill/> </fill> <fill> <patternFill patternType="solid"> <fgColor theme="5" tint="0.39997558519241921"/> <bgColor indexed="65"/> </patternFill/> </fill> <fill> <patternFill patternType="solid"> <fgColor rgb="FFC6EFCE"/> </patternFill/> </fill> </fills> ``` 特定单元格的`<fill>`使用从零开始的索引指定到上述填充集合中。单元格的字体、数字格式和边框也是如此。因此,可以使用这四个集合中的索引列表或集合来指定单元格的格式。事实上,这就是`<cellXfs>` 的作用。它包含一组索引,一组用于在工作簿中找到的每个单元格格式特征组合。下面是一个这样的分组。 ```XML <cellXfs count="14"> <xf numFmtId="0" fontId="0" fillId="0" borderId="0" xfId="0"/> . . . </cellXfs> ``` 每个单元格都将引用`<cellXfs>`集合中的一个`<xf>`。这是单元格的直接格式。要将样式应用于单元格,`<xf>`使用`xfId`属性引用样式。所述`xfId`属性是一个指数到`<cellStyleXFs>`收集,收集提供给用户的单元样式。所述`<cellStyleXFs>`包含一个`<XF>`每个样式。每个这样的`<xf>`都通过`<cellStyles>`集合中的索引(在其`xfId`属性中)与其名称相关联。 让我们通过查看示例来尝试将它们联系在一起。考虑下面示例中的第 10 行。  第一个单元格 A10 应用了单元格样式。工作表中单元格的 XML 如下。 ```XML <row r="10"> <c r="A10" s="12" t="s"> <v>6</v> </c> . . . </row> ``` 从属性s="12"我们知道单元格的格式存储在样式部分的`<cellXfs>`集合中的第 13 个(从零开始的索引)`<xf>`。第 13 个`<xf>`在下面。 ``` <xf numFmtId="0" fontId="8" fillId="4" borderId="0" xfId="3"/> ``` 所以对于这个单元格,数字格式是`<numFmts>`集合中的第一个(索引值为 0)。该小区使用的字体格式第九届中找到`<FONT>`在`<fonts>`集合,第5 `<fill>`的内`<fills>`集合(其中引用的绿色主题),和第一`<border>`中的`<borders>`集合。这种细胞也适用样式(xfId = “3” )-的第四`<XF>`的内`<cellStyleXfs>`集合。样式如下图。 ```XML <xf numFmtId="0" fontId="8" fillId="4" borderId="0" applyNumberFormat="0" applyBorder="0" applyAlignment="0" applyProtection="0"/> ``` 样式的格式与直接格式相同,属性`applyNumberFormat`、`applyBorder`、`applyAlignment`和`applyProtection 的`值都为 0,告诉我们不要应用样式的相应值,而是应用直接格式的值. 在这种情况下,它们是相同的,因此无论如何都没有区别。 ## 表级格式化 表格通过在表格部分的表格定义中指定`<tableStyleInfo>`元素来应用表格样式。例如,以下示例表定义指定 TableStyleMedium9 样式。请注意,它是按名称指定的。另请注意,不仅指定了样式,而且规范还告诉我们样式的哪些方面被打开(例如,showRowStripes="1")和哪些方面被关闭(例如,showLastColumn="0")。每个表格样式由一组格式定义组成,每个格式定义对应于表格的特定区域——例如,整个表格、第一列条纹、第一行条纹、第一列、标题列、第一个标题单元格等. 这些格式定义中的每一个都可以打开或关闭。 ```XML <table xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main" id="1" name="Table1" displayName="Table1" ref="A18:C22" totalRowShown="0"> <autoFilter ref="A18:C22"/> <tableColumns count="3"> tableColumn id="1" name="Expenses" tableColumn id="2" name="Amount" tableColumn id="3" name="Date Paid" </tableColumns> <tableStyleInfo name="TableStyleMedium9" showFirstColumn="0" showLastColumn="0" showRowStripes="1" showColumnStripes="0"/> </table> ``` ECMA-376 第 3 版(2011 年 6 月)OOXML 规范的附件 G 定义了单元格、表格和数据透视表的内置样式,样式 TableStyleMedium9 属于内置表格样式。内置表格和数据透视表样式不存储在样式部分——只有自定义样式。 下面是在样式部分定义的自定义样式,基于 TableStyleMedium9 样式。 ```XML <tableStyles count="1" defaultTableStyle="TableStyleMedium9" defaultPivotStyle="PivotStyleLight16"> <tableStyle name="My Custom Table Style" pivot="0" count="3"> <tableStyleElement type="wholeTable" dxfId="2"/> <tableStyleElement type="headerRow" dxfId="1"/> <tableStyleElement type="firstColumn" dxfId="0"/> </tableStyle> </tableStyles> ``` 样式如下所示:  上面的样式定义使用差异格式记录(从`dxfId`属性引用的`<dxf>`元素),它允许指定格式的子集而不是指定所有格式。查看上面的示例,我们看到默认样式是 TableStyleMedium9 样式。由此我们改变了三个方面——wholeTable、headerRow 和 firstColumn。这些元素中的每一个都引用(再次使用从零开始的索引)样式部分中的`<dxfs>`集合。例如,`<headerRow>`元素引用第二个`<dxf>` ( dxfId="1" )。它将粗体和填充背景颜色应用于默认表格样式defaultTableStyle="TableStyleMedium9"。 ```XML <dxfs count="3"> <dxf> <font> <b val="0"/> <i/> <strike/> </font> <fill> <patternFill> <bgColor theme="2" tint="-0.2499465926081701"/> </patternFill> </fill> </dxf> <dxf> <font> <b/> <i val="0"/> <strike val="0"/> </font> <fill> <patternFill> <bgColor theme="8" tint="0.59996337778862885"/> </patternFill> </fill> </dxf> <dxf> <fill> <patternFill> <bgColor theme="5" tint="0.59996337778862885"/> </patternFill> </fill> <border> <left style="hair"> <color auto="1"/> </left> <right style="hair"> <color auto="1"/> </right> <top style="hair"> <color auto="1"/> </top> <bottom style="hair"> <color auto="1"/> </bottom> <vertical style="hair"> <color auto="1"/> </vertical> <horizontal style="hair"> <color auto="1"/> </horizontal> </border> </dxf> </dxfs> ``` ## 条件格式 条件格式是一种格式,例如单元格底纹或字体颜色,如果指定条件为真,电子表格可以自动应用于单元格。例如,如果单元格中的值大于 50,您可以指定单元格填充颜色应为红色。它可以是一种非常有效的工具,用于在视觉上突出显示工作表中数据的重要方面。 条件格式编排规则被存储在工作表部,内`<conditionalFormatting>`后元素`<sheetData>`元素。格式适用的单元格范围由`sqref`属性指定。每个条件都在`<cfRule>`元素内。可以设置多个规则,每个规则都有不同的优先级。有几种不同类型的规则来指定不同的条件。例如,type="cellIs"将根据单元格值是大于还是小于指定值,或介于两个值之间来确定单元格格式。甲类型=“数据条”将根据单元格中的值在单元格内显示不同长度的条。这些类型是使用`<cfRule>`上的`type`属性设置的。甲类型=“图标集”将显示在基于在单元格中的值的单元格的图标。下面是一个示例表,它对单元格 B2:B7 应用两个条件 - 如果单元格的值大于 500,则应用粉红色填充,如果值小于 300,则应用绿色填充。  条件的 XML 如下。 ```XML <conditionalFormatting sqref="B2:B7"> <cfRule type="cellIs" dxfId="0" priority="2" operator="greaterThan"> <formula>500</formula> </cfRule> <cfRule type="cellIs" dxfId="1" priority="1" operator="lessThan"> <formula>300</formula> </cfRule> </conditionalFormatting> ```
上一篇:
XLSX内容概述
下一篇:
XLSX文件剖析
0
赞
103 人读过
新浪微博
微信
腾讯微博
QQ空间
人人网
提交评论
0
条评论
More...
<>