格式化表
您可以使用 mlreportgen.dom.Table
、mlreportgen.dom.FormalTable
、mlreportgen.dom.MATLABTable
或 mlreportgen.report.BaseTable
对象在报告中创建表。请参阅在报告生成器中选择要创建的表类型。您可以使用以下方法格式化任何这些类型的表或表的元素(部分,行,列组或条目):
在创建表之前先格式化内容。例如,在使用数字创建表之前,先将其格式化为 MATLAB® 中的数字。请参阅表中的数字格式。
在利用 DOM 对象创建表之前,先对其进行格式化。例如,在使用
mlreportgen.dom.Paragraph
对象创建表条目之前,先对其进行格式化。修改默认模板样式或为表或表元素创建自定义模板样式。请参阅使用模板定义的样式设置表格式。
使用格式属性和格式对象以及代表表或表元素的对象来覆盖模板样式。请参阅通过编程设置表格式。
有关格式化 MATLABTable
表的特定信息,请参阅 从 MATLAB 表创建表。有关格式化 BaseTable
表的特定信息,请参阅 创建报告 API 基表。
对于表对象、表元素对象或包含在表元素对象中的对象,格式属性或格式对象指定的格式将覆盖基于模板的样式指定的等效格式。为对象指定的格式将覆盖容器对象指定的等效格式。例如,如果表条目包含 mlreportgen.dom.Paragraph
对象,则为 Paragraph
对象指定的文本颜色将覆盖为包含该对象的行指定的颜色。行颜色将覆盖包含该行的表指定的颜色。请参阅格式继承。
使用模板定义的样式设置表格式
表和表元素具有默认的模板定义的样式。如果自定义适用于多个表,并且您习惯使用 Microsoft® Word 中的样式或编辑 HTML 或 PDF 报告的层叠样式表 (CSS),请考虑自定义模板定义的样式。
创建 Word 表样式
您可以通过将自定义 Microsoft Word 样式应用到表来格式化表。如果将表样式应用于 Word 正式表的一个或多个部分,请指定每个表列的宽度。否则,各部分的列可能无法对齐。
要在 Word 样式表中定义表样式:
创建 Microsoft Word 模板。有关创建 Microsoft Word 模板的信息,请参阅 创建 Microsoft Word 模板。
使用以下方法之一打开 Word 模板文件:
在 MATLAB 的当前文件夹窗格中,右键点击模板文件,然后点击在 MATLAB 外部打开。
在 MATLAB 之外,右键点击文件,然后点击打开。
注意
不要双击 Word 模板文件来打开它。双击该文件将打开使用该模板的 Word 文档文件。
在 Word 中,在主页选项卡的样式组中,点击样式图标
。
点击管理样式按钮
。
点击新建样式。
在根据格式创建新样式对话框中:
指定名称。
将样式类型设置为表。
在基于的样式中,选择新样式的基本样式。
在格式化部分中,指定格式以及该格式适用于表的哪些部分。
选择基于此模板的新文档,然后点击确定。
在管理样式对话框中,选择基于此模板的新文档,然后点击确定。
保存模板。
有关使用 Word 模板进行格式化的示例,请参阅 创建斑马条纹表。
创建 HTML 或 PDF 表样式
您可以使用模板中定义的 CSS 样式来格式化 HTML 和 PDF 表。要创建 HTML 或 PDF 模板,请参阅 创建 HTML 和 PDF 模板。
要在 HTML 或 PDF 模板中定义表样式,请使用带有类名的 table
选择器。例如,此 CSS 代码指定具有类 MyTable
的表的样式。
table.MyTable {
border-style: solid;
border-bottom-color: rgb(128, 128, 128);
border-bottom-width: thin;
border-collapse: collapse;
}
您可以使用 CSS 后代选择器(空格)或子选择器 (>
) 来指定表的后代或子代的格式。例如,此 CSS 代码指定样式为 td
的表的表条目(MyTable
元素)的格式。
table.MyTable td {
font-family: Arial, Helvetica, sans-serif;
font-size: 11pt;
text-align: center;
}
请参阅修改 HTML 模板中的样式和修改 PDF 模板中的样式。
有关编辑 CSS 的信息,请参阅 https://developer.mozilla.org/en-US/docs/Web/CSS/Reference 等文档。
有关使用 HTML 模板进行格式化的示例,请参阅 创建斑马条纹表。
将样式应用于表或表元素
在模板中定义样式后,您可以将其应用于代表报告程序中的表或表元素的对象。将样式作为参量提供给对象构造函数或将其分配给对象的 StyleName
属性。您可以将样式分配给 mlreportgen.dom.FormalTable
、mlreportgen.dom.MATLABTable
或 mlreportgen.dom.TableHeader
对象的 StyleName
属性,从而将样式应用于 mlreportgen.dom.TableBody
或 mlreportgen.dom.TableEntry
对象的页眉、正文或页脚部分。
例如,假设您在报告模板中定义了名为 BodyPara
、TableTitle
和 RuledTable
的样式。此示例在 Paragraph
构造函数中、StyleName
对象的 Paragraph
属性中以及 Table
构造函数中指定样式名称。
import mlreportgen.dom.*; rank = 5; rpt = Document("MyReport","html","MyTemplate"); p = Paragraph("Here is a magic square or rank 5:","BodyPara"); append(rpt,p); p = Paragraph(sprintf("Rank %d MagicSquare",rank)); p.StyleName = "TableTitle"; append(rpt,Table(magic(rank),"RuledTable")); close(rpt); rptview(rpt.OutputPath);
您可以使用编程格式来覆盖基于模板的表样式中定义的样式。例如,假设您在模板中定义一个名为 UnruledTable
的表样式,以创建没有边框或列或行分隔线的表。然后,您可以覆盖报告程序中的样式来在表周围绘制框架。
import mlreportgen.dom.*; rpt = Document("MyReport","html","MyTemplate"); table = Table(magic(5),"UnruledTable"); table.Border = "single"; append(rpt,table); close(rpt); rptview(rpt.OutputPath);
有关编程格式的详细信息,请参阅 通过编程设置表格式。
使用样式表式化表条目
对于 HTML 和 PDF 报告,您可以使用 HTML 模板样式表中定义的样式来格式化表条目。定义表条目样式时,使用 td
元素选择器。例如:
td.TableEntryWithBorder {
border:5px solid red;
}
要将模板定义的样式应用于表条目,请将 TableEntry
对象 StyleName
属性设置为样式的名称,或将样式名称指定为 TableEntry
构造函数的第二个参量。例如:
te = TableEntry("Hello World","TableEntryWithBorder");
通过编程设置表格式
如果您不习惯编辑 CSS,或者只想覆盖少数表或表元素的默认表样式,则可以通过编程方式设置表和表元素的格式。使用以下方法之一:
设置代表表或表元素的对象的格式属性。
将格式对象添加到代表表或表元素的对象的
Style
属性。通过将Style
属性的现有值与包含新格式对象元胞数组连接起来来添加格式对象。例如:table.Style = [table.Style {Border("solid","black","3px")}];
以下是一些适用于 mlreportgen.dom.Table
、mlreportgen.dom.FormalTable
和 mlreportgen.dom.MATLABTable
对象的格式对象和相应的格式属性。
格式化 | 格式化对象 | 格式属性 |
---|---|---|
表宽 |
| |
表背景颜色 |
| |
指定表周围的边框 |
| |
边框颜色 |
| |
边框粗细 |
| |
指定表左边框、右边框、上边框或下边框 | 不适用 | |
折叠表和表条目边框(仅限 HTML 报告) |
| |
指定列分隔线 |
| |
列分隔线颜色 |
| |
列分隔线粗细 |
| |
指定行分隔线 |
| |
行分隔线颜色 |
| |
行分隔线粗细 |
| |
从左边距缩进表 |
| |
表前或表后的空格 | 不适用 | |
表右侧的空间 | 不适用 | |
左对齐、右对齐或居中对齐表 |
| |
指定表条目流方向(从左到右或从右到左) |
| |
调整表列的大小以适合内容 | 不适用 |
您可以使用适用于表所包含的对象的其他格式对象。DOM API 会忽略不适用于特定对象的格式对象。
通过编程设置非正式表的格式
对于适用于整个表的格式,请使用格式属性和对象以及代表整个表的对象。此示例使用格式对象来指定表边框以及行和列分隔线。它使用格式属性来指定背景颜色。
import mlreportgen.dom.* d = Document("test","html"); table = Table(magic(5)); table.Style = [table.Style {Border("inset","red","3px"), ... ColSep("single","black","1px"), ... RowSep("single","black","1px")}]; table.BackgroundColor = "lightsteelblue"; append(d, table); close(d); rptview(d.OutputPath);
通过编程设置正式或 MATLAB 表的格式
您可以使用格式属性和对象来格式化 mlreportgen.dom.FormalTable
和 mlreportgen.dom.MATLABTable
对象。如果为表及其某一部分指定格式,则为该部分指定的值将覆盖整个表的值。并非所有正式的表格式都适用于正式的表部分。例如,OuterLeftMargin
属性不适用于正式的表部分。您不能独立于包含它的表缩进页眉、正文或页脚部分。
格式化表条目
要访问表条目进行格式化,可以使用 entry
、mlreportgen.dom.TableHeader
、mlreportgen.dom.TableBody
或 mlreportgen.dom.TableFooter
对象的 mlreportgen.dom.Table
方法。
entry
方法返回 mlreportgen.dom.TableEntry
或 mlreportgen.dom.TableHeaderEntry
对象。要格式化条目,您可以使用这些 TableEntry
格式属性或对象。
格式化 | 格式化对象 | 格式属性 |
---|---|---|
在条目周围创建边框 |
| |
边框颜色 |
| |
边框粗细 |
| |
创建左、右、上或下的入口边框 | 不适用 | |
将条目内容对齐到顶部、底部或中间 |
| |
条目边界与条目内容之间的空间 |
| |
条目内容与其顶部、底部、右侧或左侧边界之间的间距 | 不适用 | |
导致条目跨越多列 |
|
|
导致条目跨越多行 |
|
|
您可以使用适用于表条目所包含的对象的其他格式对象。DOM API 会忽略不适用于特定对象的格式对象。
此示例根据 magic
函数的输出创建一个表,并将表的最大数字设为红色。
import mlreportgen.dom.*; d = Document("test","pdf"); m = magic(5); [v,i] = max(m); [v1,i1] = max(max(m)); t = Table(m); t.Border = "single"; t.ColSep = "single"; t.RowSep = "single"; t.TableEntriesInnerMargin = "2pt"; t.TableEntriesHAlign = "right"; maxnum = entry(t,i(i1),i1); maxnum.Children(1).Color = "Red"; append(d,t); close(d); rptview(d);
格式化所有表条目
要为 DOM 表的所有条目或 DOM 表的某个部分指定相同的格式或格式集,可以使用以下属性:
TableEntriesValign
TableEntriesHalign
TableEntriesInnerMargin
TableEntriesStyle
此示例从 MATLAB 表创建一个表。此示例:
通过向
TableEntriesStyle
属性添加格式对象,使所有表体条目变为蓝色通过设置
TableEntriesHalign
属性将所有表体条目居中
import mlreportgen.dom.* d = Document("outermargin","docx"); import mlreportgen.dom.* d = Document("myMATLABTable","pdf"); Age = [38;43;38;40;49]; Height = [71;69;64;67;64]; Weight = [176;163;131;133;119]; mltable = table(Age,Weight,Height); mltableObj = MATLABTable(mltable); tbodyObj = mltableObj.Body; tbodyObj.TableEntriesStyle = {Color("blue")}; tbODYObj.TableEntriesHAlign = "center"; append(d,mltableObj); close(d); rptview(d);
格式化表行
要访问表行进行格式化,可以使用 mlreportgen.dom.Table
、mlreportgen.dom.TableHeader
、mlreportgen.dom.TableBody
或 mlreportgen.dom.TableFooter
对象的 row
方法。
row
方法返回一个 mlreportgen.dom.TableRow
对象。要格式化行,您可以使用这些 TableRow
格式属性或对象。
格式化 | 格式化对象 | 格式属性 |
---|---|---|
指定行的精确高度 |
| |
指定行的最小高度(仅限 Word 报告) | 不适用 | |
当表跨页时使此行重复作为标题行 | mlreportgen.dom.RepeatAsHeaderRow | 不适用 |
允许此行跨越页面边界 | mlreportgen.dom.AllowBreakAcrossPages | 不适用 |
您可以使用适用于该行所包含的对象的其他格式对象。DOM API 会忽略不适用于特定对象的格式对象。
此示例从魔术函数的输出创建一个表,并将第一行的内容设为红色。
import mlreportgen.dom.*; d = Document("test","pdf"); m = magic(5); [v,i] = max(m); [v1,i1] = max(max(m)); t = Table(m); t.Border = "single"; t.ColSep = "single"; t.RowSep = "single"; t.TableEntriesInnerMargin = "2pt"; t.TableEntriesHAlign = "right"; r = row(t,1); r.Style = [r.Style {Color("red")}]; append(d,t); close(d); rptview(d);
格式化表列
要指定一组相邻表列的格式,请使用 mlreportgen.dom.TableColSpecGroup
对象。要覆盖某些列的列组的格式,请使用 mlreportgen.dom.TableColSpec
对象。
在此示例中,TableColSpecGroup
对象指定绿色文本。TableColSpec
对象覆盖第一列的格式,指定粗体红色文本。
import mlreportgen.dom.* rpt = Document("test","pdf"); rank = 5; t = Table(magic(rank)); t.Border = "single"; t.ColSep = "single"; t.RowSep = "single"; t.TableEntriesInnerMargin = "2pt"; t.TableEntriesHAlign = "right"; %Specify the formats for all columns grps(1) = TableColSpecGroup; grps(1).Span = rank; grps(1).Style = {Color("green")}; %Specify the formats for the first column specs(1) = TableColSpec; specs(1).Span = 1; specs(1).Style = {Bold(true),Color("red")}; grps(1).ColSpecs = specs; t.ColSpecGroups = grps; append(rpt,t); close(rpt); rptview(rpt.OutputPath);
要调整列大小以适合列中表条目的最宽内容,请在表的 ResizeToFitContents
属性中包含一个 Style
对象。
另请参阅
mlreportgen.dom.Table
| mlreportgen.dom.TableRow
| mlreportgen.dom.TableEntry
| mlreportgen.dom.FormalTable
| mlreportgen.dom.MATLABTable
| mlreportgen.report.BaseTable
| mlreportgen.dom.TableHeaderEntry
| mlreportgen.dom.TableColSpecGroup
| mlreportgen.dom.TableColSpec