空想家。654 2023-04-13 21:03 采纳率: 0%
浏览 47
已结题

用什么宏可以使表格有自定义排序的功能

类似于Excel表格的自定义排序功能,可以已经定义排序关键字,还有排序的优先级顺序,貌似conflunce里没有这样的宏,是需要脚本吗

img

  • 写回答

5条回答 默认 最新

  • 「已注销」 2023-04-13 21:26
    关注

    引用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,因此请谨慎使用自定义宏。

    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 4月21日
  • 创建了问题 4月13日