Slack支持Markdown表格吗?

69

我想使用postMessage API将一个Markdown表格发送到Slack,但在Slack上只得到了原始内容而不是渲染后的表格。Slack是否支持Markdown表格?还有其他方法可以在Slack中呈现表格数据吗?我知道Slack不支持HTML。

我尝试过chat.postMessagefiles.upload,也尝试过使用固定列宽格式化文本,但看起来有点丑陋,所以我正在寻找一种让它看起来更好的方法。

这是我的HTTP请求代码,内容类型为JSON:

url : https://slack.com/api/chat.postMessage
body :
{
    "channel": "RKAID4I",
    "text": " | Tables  | Are   | Cool  |
|---------- |:-------------:    |------:    |
| col 1 is  | left-aligned  | $1600     |
| col 2 is  | centered  | $12   |
| col 3 is  | right-aligned     | $1    |"

}

我原本希望看到表格格式的输出结果,但实际上的输出结果和我发送的内容完全一样。这是因为我的Markdown信息有误还是Slack不支持Markdown表格?


请注意,Slack的标记语言称为mrkdown(缺少“a”)。 - Guildenstern
3
相反,它被称为mrkdwn(缺少"a"和"o")。 - Julian Mehnle
2
为此,我在 Slack 的代码块中使用 ASCII 表格 - Arcones
4个回答

74
不,实际上,Slack根本不支持消息中的Markdown¹。它使用自己类似于 Markdown 的格式,称为mrkdwn,与Markdown有一些显著的区别:
  • 在Markdown中,*_都用于强调
  • 在Markdown中,**__都用于加粗
  • mrkdwn中,*用于加粗_用于强调
  • Markdown 没有删除线的语法(尽管某些实现已经添加了它,例如GFM使用~~),但mrkdwn使用~表示删除线
  • 链接语法非常不同
  • mrkdwn不支持标题
  • 可能还有更多

不要期望任意的Markdown²可以在Slack消息中正常工作。


¹Slack支持在files.upload API endpoint中创建帖子时使用Markdown格式。

²需要注意的是,表格在普通的Markdown格式中也不被支持。像删除线一样,有些实现方式已经添加了这些功能。


@MarcTamsky,我没有说它支持表格。我说它只支持在帖子中使用的Markdown,这与消息不同,在消息中Markdown根本不受支持。消息使用名为mrkdwn的不同语法。(还要注意的是,该链接并不指向Slack的文档。它是一些第三方网站,可能可靠也可能不可靠。如果Slack选择在某个时候添加表格支持,他们很可能会在某个地方记录下来。第三方网站可能永远过时。) - Chris

22

Slack不支持表格渲染,因此这种标记无法起作用。

您有两个选择:

  • 使用字段,它们在大多数设备上会呈现为2列。请参阅布局块中的fields
  • 将您的表格转换为图像(在Slack之外),并将该图像附加到您的消息中。

3
你可以将Markdown表格粘贴到GitHub的gist(使用.md文件扩展名),并在Slack中指向该URL。在gist中,Markdown表格格式化得非常好。不幸的是,在Slack中只有裸链接,没有预览。 - Nicolas Le Thierry d'Ennequin
17
如果结果不在Slack中显示,我认为对于OP来说价值不大。 - Erik Kalkoken
10
为了完整起见,您应该知道在 Slack 消息中使用图像/截图将使那些依赖屏幕阅读器技术的盲人或视力受损用户无法阅读。除非您知道所有当前和未来的收件人都能查看图像,否则请尝试其他更可访问的方法,而不是诉诸于截图。 - GregL
2
那么...有没有办法在Slack聊天中提交使用字段的常规消息?还是这只能作为API /集成的输出可用? - Steven Lu
我碰巧有一个使用两列表的用例。我使用了字段,只是发现每个部分的字段限制为10个元素(5行)。因此,您需要在第5个元素后创建一个新的部分元素,这会添加额外的空白。 - aJetHorn
使用空格字符填充单元格值可以提高可读性。在Excel中使用辅助列,使用Rept()函数添加空格,并使用Len()减去单元格chr长度以确定要添加的正确空格数量。粘贴时,将片段类型设置为电子表格。考虑为空字段添加占位符值。缺点是除了这些额外的步骤之外,数据可能会附加一个“截断..查看完整内容”的链接或直接被拒绝超过最大片段大小,此时附件可能更有意义。 - Brad Smith

9
在您的str消息中,在表格前后添加```。这将使其在Slack消息中转换为代码块。

3
这实际上是一个好答案。将您的 Markdown 表格转换为代码块可以保留间距,因此它看起来就像您期望的样子。只是它不会被渲染成任何正确的表格形式。 - Adam_G

-3

Slack现在支持Markdown,我尝试过了,它可以正常工作。

def notifySlackChannel(content):
    df_markdown=df_variance.to_markdown(tablefmt="grid")
    def notifySlackChannel(content):
    url = SlackWebHookUrl
    request_body_json = {'channel': ChannelName, 'text': table_time_info +content}
    response = requests.post(url, json=request_body_json)


notifySlackChannel(df_markdown)

仅凭这段代码片段,我不确定正在发生什么。由于嵌套的 notifySlackChannel 函数缩进错误,它无法编译。有两个不同的 notifySlackChannel 函数,第一个只是进行了方法调用,并没有对结果做任何处理。df_variance 是什么?table_time_info 是什么?没有提供解释答案的信息。 - Chris
嗨,克里斯,我已经更新了代码,请现在查看它。我希望它能更好地帮助你。 - Sagar Rawal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接