类似于Excel表格的自定义排序功能,可以已经定义排序关键字,还有排序的优先级顺序,貌似conflunce里没有这样的宏,是需要脚本吗
引用new bing部分回答作答:
在 Confluence 中,可以使用「Table Filter and Charts for Confluence」插件来实现表格的自定义排序功能。该插件提供了一个「Sort」宏,可以按照自定义的排序规则对表格进行排序。
要使用该插件的「Sort」宏,需要先安装该插件,并在表格中插入「Table Filter」宏。然后,在「Table Filter」宏中设置筛选条件,最后在表格中插入「Sort」宏,并配置排序规则。
例如,要按照表格中第二列的字母顺序进行排序,可以在「Sort」宏中设置排序规则为「Column 2 A-Z」。如果需要按照多个列进行排序,可以设置多个排序规则,并指定排序优先级顺序。
注意,「Table Filter and Charts for Confluence」插件是一款商业插件,需要购买许可证才能使用。
如果您不想使用商业插件,也可以使用 Confluence 的用户自定义宏功能来实现表格自定义排序的功能。
您可以使用 JavaScript 或 Velocity 脚本来编写自定义宏,并将其插入到 Confluence 页面中。在自定义宏中,您可以通过操作表格的 DOM 元素来实现自定义排序功能。
下面是一个示例 JavaScript 脚本,用于实现按照第二列升序排序的功能:
(function() {
AJS.$(document).ready(function() {
var table = AJS.$('#table-id'); // 替换为您的表格 ID
var rows = table.find('tr');
rows.slice(1).sort(function(a, b) {
var keyA = AJS.$(a).find('td:nth-child(2)').text().toUpperCase();
var keyB = AJS.$(b).find('td:nth-child(2)').text().toUpperCase();
if (keyA < keyB) return -1;
if (keyA > keyB) return 1;
return 0;
}).appendTo(table);
});
})();
这段代码会在页面加载完成后自动运行,获取 ID 为「table-id」的表格,然后按照第二列的升序进行排序,并重新将排序后的行添加到表格中。
您可以将上述代码保存为一个新的自定义宏,然后将宏插入到您的 Confluence 页面中,以实现表格的自定义排序功能。
如果您需要实现自定义关键词排序,可以修改上述 JavaScript 脚本来实现。以下是一个示例代码,演示了如何使用自定义关键词对表格进行排序:
(function() {
AJS.$(document).ready(function() {
var table = AJS.$('#table-id'); // 替换为您的表格 ID
var rows = table.find('tr');
rows.slice(1).sort(function(a, b) {
var keyA = getSortKey(AJS.$(a)); // 获取第二列的排序关键词
var keyB = getSortKey(AJS.$(b));
if (keyA < keyB) return -1;
if (keyA > keyB) return 1;
return 0;
}).appendTo(table);
});
function getSortKey(row) {
var keyword = row.find('td:nth-child(2)').text(); // 获取第二列的文本内容
switch (keyword.toLowerCase()) {
case 'high':
return 3; // 将关键词 high 转换为数字 3,表示优先级最高
case 'medium':
return 2; // 将关键词 medium 转换为数字 2,表示优先级次高
case 'low':
return 1; // 将关键词 low 转换为数字 1,表示优先级最低
default:
return 0; // 其他关键词按照默认顺序排列
}
}
})();
这段代码与之前的示例代码类似,不同之处在于 getSortKey 函数会根据第二列的文本内容返回一个数字作为排序关键词。在本示例中,我们将关键词 high、medium 和 low 分别转换为数字 3、2 和 1,表示优先级从高到低。其他关键词则按照默认顺序排列。
您可以根据实际需求修改 getSortKey 函数来实现自定义关键词排序的功能。需要注意的是,为了避免脚本注入和安全漏洞,建议只在受信任的 Confluence 环境中使用自定义脚本。
自定义宏需要在 Confluence 管理员设置中启用「高级宏」功能,否则无法插入自定义宏。此外,自定义宏也存在一定的安全风险,因为它可以访问 Confluence 页面的 DOM,因此请谨慎使用自定义宏。
该回答通过自己思路及引用到GPTᴼᴾᴱᴺᴬᴵ搜索,得到内容具体如下:
Confluence本身没有提供内置的宏来实现自定义排序功能。但是,您可以通过编写宏或使用现有的第三方宏来实现这一功能。
例如,您可以使用Bob Swift Atlassian Add-ons的Table Filter and Charts for Confluence插件来实现自定义排序。该插件提供了一个“排序”功能,允许您按照自定义的排序规则对表格进行排序。您可以使用该插件的“表格过滤器”宏和“排序”选项来实现这一功能。
另外,您还可以使用Confluence的User Macro功能来创建自定义宏来实现自定义排序。在自定义宏中,您可以使用JavaScript或其他脚本语言来实现表格排序功能。这需要一定的编程能力和技术知识。
总之,如果您需要在Confluence中实现自定义排序功能,您可以尝试使用第三方插件或编写自定义宏。
如果以上回答对您有所帮助,点击一下采纳该答案~谢谢
以下答案由GPT-3.5大模型与博主波罗歌共同编写:
目前Confluence本身并不原生支持自定义排序的功能,但可以使用一种方法来实现该功能:通过利用Confluence的用户自定义宏(User Macro)来实现该功能。
具体步骤如下:
在Confluence中,用户可以创建自己的用户自定义宏。在Confluence的管理界面中,选择“用户自定义宏”菜单项,然后在页面上创建一个新的用户自定义宏,命名为“CustomSort”。
在添加宏的代码块中输入以下的代码:
## Macro title: CustomSort
## Macro has-body: false
##
## Developed by: [Your name/Your organization]
## Date created: [Date]
## Last modified: [Date]
## Parameters
#set ($key1 = $param_key1)
#set ($key2 = $param_key2)
#set ($key3 = $param_key3)
## Body (empty)
此代码块是一个空的代码块,它还没有实现自定义排序功能。
在上面创建的代码块下方进行填写。在此处,可以编写一个自定义的排序函数,该函数接收一个Confluence表格的参数,并根据使用者定义的排序关键字进行排序。
例如,以下代码可以实现按照三个关键字进行自定义排序:
## Macro title: CustomSort
## Macro has-body: false
##
## Developed by: [Your name/Your organization]
## Date created: [Date]
## Last modified: [Date]
## Parameters
#set ($key1 = $param_key1)
#set ($key2 = $param_key2)
#set ($key3 = $param_key3)
## Body (empty)
## Sort function
#macro(sort $table)
## Get column indices for each key
#set ($key1_index = -1)
#set ($key2_index = -1)
#set ($key3_index = -1)
#foreach ($column in $table.getColumnNames())
#if ($column.equalsIgnoreCase($key1))
#set ($key1_index = $table.getColumnIndex($column))
#end
#if ($column.equalsIgnoreCase($key2))
#set ($key2_index = $table.getColumnIndex($column))
#end
#if ($column.equalsIgnoreCase($key3))
#set ($key3_index = $table.getColumnIndex($column))
#end
#end
## Sort table
#set ($sorted_table = [])
#set ($ctr = 0)
#foreach ($row in $table)
#set ($item = {"row": $ctr, "data": []})
#if ($key1_index >= 0)
#set ($key1_value = $row.getCell($key1_index).getValue())
#set ($item.data.add($key1_value))
#end
#if ($key2_index >= 0)
#set ($key2_value = $row.getCell($key2_index).getValue())
#set ($item.data.add($key2_value))
#end
#if ($key3_index >= 0)
#set ($key3_value = $row.getCell($key3_index).getValue())
#set ($item.data.add($key3_value))
#end
#set ($item.data.add($row))
#set ($sorted_table.add($item))
#set ($ctr = $ctr + 1)
#end
#set ($sorted_table = $sorted_table | sort(function(a,b){return a.data[0] < b.data[0] || (a.data[0] == b.data[0] && (a.data[1] < b.data[1] || (a.data[1] == b.data[1] && a.data[2] < b.data[2]))) }))
## Return sorted table
#foreach ($item in $sorted_table)
#set ($row = $item.data[$item.data.size() - 1])
#output ($row.renderUnformatted())
#end
#end
在以上代码中,我们首先获取了关键字对应列的索引,随后读取每一行的数据并根据关键字进行排序。
在调用自定义函数时需传入三个参数:
可以通过在Confluence编写宏的方式调用该函数,例如:
{CustomSort:param_key1=Title|param_key2=Priority}
在排序结果中,表格会按照关键字"Title"和"Priority"进行排序。
综上所述,以上代码是一个示例,开发人员可以按照自己的需求进行修改和扩展。
如果我的回答解决了您的问题,请采纳!
基于new BIng的回答:
可以使用 \sortitem 和 \sort 的宏来实现自定义排序功能。具体步骤如下:
1、在表格中定义排序关键字的列,例如第一列是姓名,第二列是年龄,第三列是性别。
2、在表格的 \begin{tabular} 和 \end{tabular} 之间加入以下代码:
\newcommand{\sortitem}[2]{\multicolumn{1}{@{}#1}{\textbf{#2}}}
\newcommand{\sort}[2]{\sortitem{#1}{#2}\gdef\key{#2} &}
这里的 \sortitem 宏用来定义排序关键字的格式,可以根据需要自定义。而 \sort 宏则用来定义排序关键字的优先级顺序,其中 #1 表示列的对齐方式,#2 表示排序关键字。
3、在表格的 \end{tabular} 之前加入以下代码:
\makeatletter
\def@xkey{\expandafter@firstoftwo\key\relax}
\def\sortline{@xkey\sortitem{r}}
\def\sortbegin{\let\key@empty\sortline}
\makeatothe
```r
这里的 \sortline 宏用来定义排序关键字的行,\sortbegin 宏则用来定义排序的开始。
4、在需要排序的行前加入 \sortbegin,排序关键字的行前加入 \sort{c}{姓名}、\sort{c}{年龄}、\sort{c}{性别} 等。
例如,以下代码可以实现按照年龄从小到大、性别从男到女、姓名从 A 到 Z 的顺序排序:
\begin{tabular}{ccc}
\hline
\sortbegin
\sort{c}{年龄} \sort{c}{性别} \sort{c}{姓名}
\hline
John & 25 & Male
Mary & 30 & Female
Tom & 20 & Male
Lucy & 25 & Female
\hline
\end{tabular}
```
可以使用 Confluence 的 Table Filter and Charts for Confluence 插件来实现表格的自定义排序功能。该插件支持多种排序方式,包括按数字、日期、文本等排序,并且可以设置多个排序级别。
具体操作步骤如下:
安装 Table Filter and Charts for Confluence 插件,并在 Confluence 中创建一个表格。
在表格中选中需要排序的列,然后点击插件工具栏中的“Sort”按钮。
在弹出的排序对话框中,选择需要排序的列,并设置排序顺序和排序方式。
点击“Apply”按钮,即可按照设定的排序方式对表格进行排序。
下面是一个示例的排序代码:
{table-filtered-sortable:column=1|sort=desc|type=number}
| Name | Score |
| John | 90 |
| Mary | 85 |
| Bob | 95 |
{table-filtered-sortable}
该代码会对表格的第二列按照数字类型进行降序排序。
需要注意的是,在使用该插件进行排序时,需要使用该插件提供的宏来创建表格,而不能使用 Confluence 自带的表格宏。