Engee 文档
Notebook

创建HTML表

此示例演示使用特殊函数生成HTML表。 tag 用朱莉娅的语言。

导言

HTML表格创建算法解决了生成动态HTML页面内容的问题。 在这种情况下,我们使用编程方法以HTML格式创建表格数据。 这对于准备报告、呈现计算结果或需要行和列数据结构的任何其他用途都很有用。

HTML表由以下元素组成 <table>, <thead> / <tbody>, <tr> (行), <th> (标题)及 <td> (细胞)。 我们使用基于功能的简单方便的设计自动化整个结构 tag. 该函数允许您灵活地设置标签及其属性,而不必知道HTML语法的所有细节。

功能 tag

功能 tag 接受标记名称(作为第一个参数)和属性对列表 name => value. 它与表单中的HTML标记形成一个字符串:

In [ ]:
"""
标签(x)函数::对,attr::对...)创建一个HTML标签。
:param x:一对形式(:TagName=>内容)
:param attr:可变对数:attributeName=>Value
:返回:标签的字符串表示
"""
function tag(x::Pair, attr::Pair...)
    t, b = x       # 提取标签名称(t)和内容(b)
    attrstr = join(" $n=\"$p\"" for (n, p) in attr)  # 收集属性字符串
    return "<$t$attrstr>$b</$t>"            # 构建标签本身
end
Out[0]:
tag

生成表列(colnames)

在下一步中,将确定表的列名。 它们是通过使用函数用逗号分隔字符串",X,Y,Z"来获得的 split().

阵列 colnames 将包含一个字符串数组 ["", "X", "Y", "Z"].

In [ ]:
# 将字符串",X,Y,Z"拆分为字符','以获得列名列表。
# 因此,我们在第一个逗号之前得到一个空字段–这是左列的标题。
colnames = split(",X,Y,Z", ',')
Out[0]:
colnames

形成标题行(<thead>)

创建一个标题行-每个列名称都包装在HTML标记中。 <th>. 之后,将所有细胞合并使用 join(...) 通过 \n.

这部分将在标签内部使用。 <tr> 在进一步形成表头期间。

In [ ]:
# 使用表头创建行。 我们为每个单元格制作一个th标签。
header = join(tag(:th => txt) for txt in colnames) * "\n"
Out[0]:
header

准备数据行(<tbody>)

接下来,数据行本身在表的主体中生成。 我们骑自行车从1到6:
-每个房间 i 正在创建字符串 <tr>
-第一个单元格有一个样式 bold 其他三个是从1000到9999的随机数

字符串输出保存在集合中 rows.

In [ ]:
# 我们生成表格的行-每行都有几个随机值的td单元格。
rows = collect(
    tag(:tr => 
        join(
            tag(:td => i, :style => "font-weight: bold;") * 
            join(tag(:td => rand(1000:9999)) for j in 1:3)
        )
    ) for i in 1:6
)
Out[0]:
rows

合并标题和数据

形成最终结构 <tbody> 通过在表行块周围添加换行符。

In [ ]:
# 我们将所有行与数据合并到表体的一个块中。
body = "\n" * join(rows, '\n') * "\n"
Out[0]:
body

最终表组装

最后一个阶段是把所有东西放在一起:我们把准备好的部分放在一个共同的标签中 <table>,其中也有自己的属性。 在这种情况下,表格宽度设置为60%。

最终结构:

我们在标签中收集整个表 <table>.

In [ ]:
table = tag(:table => string('\n', header, body, '\n'), :style => "width: 60%")
Out[0]:
"<table style=\"width: 60%\">\n<th></th><th>X</th><th>Y</th><th>Z</th>\n\n<tr><td style=\"font-weight: bold;\">1</td><td>9971</td><td>7158</td><td>9406</td></tr>\n<tr><td style=\"font-weight: bold;\">2</td><td>8512</td><td>6578</td><td>5560</td></tr>\n<tr><td style=\"font-weight: bol" ⋯ 51 bytes ⋯ "tr>\n<tr><td style=\"font-weight: bold;\">4</td><td>5204</td><td>6699</td><td>7601</td></tr>\n<tr><td style=\"font-weight: bold;\">5</td><td>3784</td><td>7417</td><td>8041</td></tr>\n<tr><td style=\"font-weight: bold;\">6</td><td>1713</td><td>9585</td><td>2317</td></tr>\n\n</table>"

HTML结果的最终输出。

In [ ]:
print(table)
<table style="width: 60%">
<th></th><th>X</th><th>Y</th><th>Z</th>

<tr><td style="font-weight: bold;">1</td><td>9971</td><td>7158</td><td>9406</td></tr>
<tr><td style="font-weight: bold;">2</td><td>8512</td><td>6578</td><td>5560</td></tr>
<tr><td style="font-weight: bold;">3</td><td>6905</td><td>5379</td><td>6109</td></tr>
<tr><td style="font-weight: bold;">4</td><td>5204</td><td>6699</td><td>7601</td></tr>
<tr><td style="font-weight: bold;">5</td><td>3784</td><td>7417</td><td>8041</td></tr>
<tr><td style="font-weight: bold;">6</td><td>1713</td><td>9585</td><td>2317</td></tr>

</table>

复制结果并将其粘贴到Markdown文本单元格中进行验证。:

<表格样式="宽度:60%">

XYZ 1997171589406 2851265785560 3690553796109 4520466997601 5378474178041 6171395852317

</表格>

结论

我们已经回顾了动态HTML表生成算法的实现。 我们创建了一个自定义函数 tag,这使得组装任何HTML元素变得容易,包括带有属性的复杂标签。 基于该函数,成功生成了表的行和列、生成的表头和数据。

这种方法被广泛用于生成报告,分析数据,自动创建接口,甚至以HTML格式导出数据。 现在您可以在您的项目中应用此模板!

该示例是使用[Rosetta代码]的材料开发的(https://rosettacode.org/wiki/Create_an_HTML_table