table

table

Node.js文本表格生成库 支持复杂数据格式

Table是一个Node.js文本表格生成库,支持全角字符和ANSI转义码。该库提供可配置的边框样式、内容对齐、填充和列宽等功能,能够处理复杂数据格式并自动换行文本。Table适用于命令行或纯文本环境中展示结构化数据的场景,操作简便直观。

tablenpm包数据表格字符串处理配置选项Github开源项目

<a name="table"></a>

表格

生成一个表示数组数据的文本表格字符串。

Github action 状态 Coveralls NPM 版本 规范代码风格 Twitter 关注

展示登月任务列表的表格演示。

<a name="table-features"></a>

特性

  • 支持包含全角字符的字符串。
  • 支持包含ANSI 转义码的字符串。
  • 可配置的边框字符。
  • 可配置每列的内容对齐方式。
  • 可配置每列的内容填充。
  • 可配置列宽。
  • 文本自动换行。

<a name="table-install"></a>

安装

npm install table

给我买杯咖啡 成为赞助人

<a name="table-usage"></a>

使用

import { table } from 'table'; // 使用 CommonJS? // const { table } = require('table'); const data = [ ['0A', '0B', '0C'], ['1A', '1B', '1C'], ['2A', '2B', '2C'] ]; console.log(table(data));
╔════╤════╤════╗
║ 0A │ 0B │ 0C ║
╟────┼────┼────╢
║ 1A │ 1B │ 1C ║
╟────┼────┼────╢
║ 2A │ 2B │ 2C ║
╚════╧════╧════╝

<a name="table-api"></a>

API

<a name="table-api-table-1"></a>

table

返回表格格式的字符串

参数:

  • data: 要显示的数据

    • 类型:any[][]
    • 必需:true
  • config: 表格配置

    • 类型:object
    • 必需:false

<a name="table-api-table-1-config-border"></a>

config.border

类型:{ [type: string]: string }
默认值:honeywell 模板

自定义边框。键可以是以下任何一个:

  • topLeft, topRight, topBody,topJoin
  • bottomLeft, bottomRight, bottomBody, bottomJoin
  • joinLeft, joinRight, joinBody, joinJoin
  • bodyLeft, bodyRight, bodyJoin
  • headerJoin
const data = [ ['0A', '0B', '0C'], ['1A', '1B', '1C'], ['2A', '2B', '2C'] ]; const config = { border: { topBody: ``, topJoin: ``, topLeft: ``, topRight: ``, bottomBody: ``, bottomJoin: ``, bottomLeft: ``, bottomRight: ``, bodyLeft: ``, bodyRight: ``, bodyJoin: ``, joinBody: ``, joinLeft: ``, joinRight: ``, joinJoin: `` } }; console.log(table(data, config));
┌────┬────┬────┐
│ 0A │ 0B │ 0C │
├────┼────┼────┤
│ 1A │ 1B │ 1C │
├────┼────┼────┤
│ 2A │ 2B │ 2C │
└────┴────┴────┘

<a name="table-api-table-1-config-drawverticalline"></a>

config.drawVerticalLine

类型:(lineIndex: number, columnCount: number) => boolean
默认值:() => true

用于决定是否绘制垂直线。此回调函数会为表格的每个垂直边框调用。 如果表格有 n 列,那么 index 参数会依次接收 [0, n] 范围内的所有数字(包括边界值)。

const data = [ ['0A', '0B', '0C'], ['1A', '1B', '1C'], ['2A', '2B', '2C'], ['3A', '3B', '3C'], ['4A', '4B', '4C'] ]; const config = { drawVerticalLine: (lineIndex, columnCount) => { return lineIndex === 0 || lineIndex === columnCount; } }; console.log(table(data, config));
╔════════════╗
║ 0A  0B  0C ║
╟────────────╢
║ 1A  1B  1C ║
╟────────────╢
║ 2A  2B  2C ║
╟────────────╢
║ 3A  3B  3C ║
╟────────────╢
║ 4A  4B  4C ║
╚════════════╝

<a name="table-api-table-1-config-drawhorizontalline"></a>

config.drawHorizontalLine

类型:(lineIndex: number, rowCount: number) => boolean
默认值:() => true

用于决定是否绘制水平线。此回调函数会为表格的每个水平边框调用。 如果表格有 n 行,那么 index 参数会依次接收 [0, n] 范围内的所有数字(包括边界值)。 如果表格有 n 行且包含表头,那么范围将是 [0, n+1](包括边界值)。

const data = [ ['0A', '0B', '0C'], ['1A', '1B', '1C'], ['2A', '2B', '2C'], ['3A', '3B', '3C'], ['4A', '4B', '4C'] ]; const config = { drawHorizontalLine: (lineIndex, rowCount) => { return lineIndex === 0 || lineIndex === 1 || lineIndex === rowCount - 1 || lineIndex === rowCount; } }; console.log(table(data, config));
╔════╤════╤════╗
║ 0A │ 0B │ 0C ║
╟────┼────┼────╢
║ 1A │ 1B │ 1C ║
║ 2A │ 2B │ 2C ║
║ 3A │ 3B │ 3C ║
╟────┼────┼────╢
║ 4A │ 4B │ 4C ║
╚════╧════╧════╝

<a name="table-api-table-1-config-singleline"></a>

config.singleLine

类型:boolean 默认值:false

如果设为true,表格内部的水平线将不会绘制。此选项也会覆盖指定的config.drawHorizontalLine

const data = [ ['-rw-r--r--', '1', 'pandorym', 'staff', '1529', 'May 23 11:25', 'LICENSE'], ['-rw-r--r--', '1', 'pandorym', 'staff', '16327', 'May 23 11:58', 'README.md'], ['drwxr-xr-x', '76', 'pandorym', 'staff', '2432', 'May 23 12:02', 'dist'], ['drwxr-xr-x', '634', 'pandorym', 'staff', '20288', 'May 23 11:54', 'node_modules'], ['-rw-r--r--', '1,', 'pandorym', 'staff', '525688', 'May 23 11:52', 'package-lock.json'], ['-rw-r--r--@', '1', 'pandorym', 'staff', '2440', 'May 23 11:25', 'package.json'], ['drwxr-xr-x', '27', 'pandorym', 'staff', '864', 'May 23 11:25', 'src'], ['drwxr-xr-x', '20', 'pandorym', 'staff', '640', 'May 23 11:25', 'test'], ]; const config = { singleLine: true }; console.log(table(data, config));
╔═════════════╤═════╤══════════╤═══════╤════════╤══════════════╤═══════════════════╗
║ -rw-r--r--  │ 1   │ pandorym │ staff │ 1529   │ May 23 11:25 │ LICENSE           ║
║ -rw-r--r--  │ 1   │ pandorym │ staff │ 16327  │ May 23 11:58 │ README.md         ║
║ drwxr-xr-x  │ 76  │ pandorym │ staff │ 2432   │ May 23 12:02 │ dist              ║
║ drwxr-xr-x  │ 634 │ pandorym │ staff │ 20288  │ May 23 11:54 │ node_modules      ║
║ -rw-r--r--  │ 1,  │ pandorym │ staff │ 525688 │ May 23 11:52 │ package-lock.json ║
║ -rw-r--r--@ │ 1   │ pandorym │ staff │ 2440   │ May 23 11:25 │ package.json      ║
║ drwxr-xr-x  │ 27  │ pandorym │ staff │ 864    │ May 23 11:25 │ src               ║
║ drwxr-xr-x  │ 20  │ pandorym │ staff │ 640    │ May 23 11:25 │ test              ║
╚═════════════╧═════╧══════════╧═══════╧════════╧══════════════╧═══════════════════╝

<a name="table-api-table-1-config-columns"></a>

config.columns

类型:Column[] | { [columnIndex: number]: Column }

列特定配置。

<a name="table-api-table-1-config-columns-config-columns-width"></a>

config.columns[*].width

类型:number 默认值:该列的最大单元格宽度

列宽(不包括内边距)。

const data = [ ['0A', '0B', '0C'], ['1A', '1B', '1C'], ['2A', '2B', '2C'] ]; const config = { columns: { 1: { width: 10 } } }; console.log(table(data, config));
╔════╤════════════╤════╗
║ 0A │ 0B         │ 0C ║
╟────┼────────────┼────╢
║ 1A │ 1B         │ 1C ║
╟────┼────────────┼────╢
║ 2A │ 2B         │ 2C ║
╚════╧════════════╧════╝

<a name="table-api-table-1-config-columns-config-columns-alignment"></a>

config.columns[*].alignment

类型:'center' | 'justify' | 'left' | 'right' 默认值:'left'

单元格内容的水平对齐方式

const data = [ ['0A', '0B', '0C', '0D 0E 0F'], ['1A', '1B', '1C', '1D 1E 1F'], ['2A', '2B', '2C', '2D 2E 2F'], ]; const config = { columnDefault: { width: 10, }, columns: [ { alignment: 'left' }, { alignment: 'center' }, { alignment: 'right' }, { alignment: 'justify' } ], }; console.log(table(data, config));
╔════════════╤════════════╤════════════╤════════════╗
║ 0A         │     0B     │         0C │ 0D  0E  0F ║
╟────────────┼────────────┼────────────┼────────────╢
║ 1A         │     1B     │         1C │ 1D  1E  1F ║
╟────────────┼────────────┼────────────┼────────────╢
║ 2A         │     2B     │         2C │ 2D  2E  2F ║
╚════════════╧════════════╧════════════╧════════════╝

<a name="table-api-table-1-config-columns-config-columns-verticalalignment"></a>

config.columns[*].verticalAlignment

类型:'top' | 'middle' | 'bottom' 默认值:'top'

单元格内容的垂直对齐方式

const data = [ ['A', 'B', 'C', 'DEF'], ]; const config = { columnDefault: { width: 1, }, columns: [ { verticalAlignment: 'top' }, { verticalAlignment: 'middle' }, { verticalAlignment: 'bottom' }, ], }; console.log(table(data, config));
╔═══╤═══╤═══╤═══╗
║ A │   │   │ D ║
║   │ B │   │ E ║
║   │   │ C │ F ║
╚═══╧═══╧═══╧═══╝

<a name="table-api-table-1-config-columns-config-columns-paddingleft"></a>

config.columns[*].paddingLeft

类型:number 默认值:1

用于在左侧填充内容的空格数。

<a name="table-api-table-1-config-columns-config-columns-paddingright"></a>

config.columns[*].paddingRight

类型:number 默认值:1

用于在右侧填充内容的空格数。

paddingLeftpaddingRight选项不计入列宽。因此,如果列的width为5,paddingLeft为2,paddingRight为2,那么总宽度将为9。

const data = [ ['0A', 'AABBCC', '0C'], ['1A', '1B', '1C'], ['2A', '2B', '2C'] ]; const config = { columns: [ { paddingLeft: 3 }, { width: 2, paddingRight: 3 } ] }; console.log(table(data, config));
╔══════╤══════╤════╗
║   0A │ AA   │ 0C ║
║      │ BB   │    ║
║      │ CC   │    ║
╟──────┼──────┼────╢
║   1A │ 1B   │ 1C ║
╟──────┼──────┼────╢
║   2A │ 2B   │ 2C ║
╚══════╧══════╧════╝

<a name="table-api-table-1-config-columns-config-columns-truncate"></a>

config.columns[*].truncate

类型:number 默认值:Infinity 内容将被截断的字符数。

为了处理超出容器宽度的内容,table包实现了文本换行。然而,有时你可能想要截断太长而无法在表格中显示的内容。

const data = [ ['Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus pulvinar nibh sed mauris convallis dapibus. Nunc venenatis tempus nulla sit amet viverra.'] ]; const config = { columns: [ { width: 20, truncate: 100 } ] }; console.log(table(data, config));
╔══════════════════════╗
║ Lorem ipsum dolor si ║
║ t amet, consectetur  ║
║ adipiscing elit. Pha ║
║ sellus pulvinar nibh ║
║ sed mauris convall…  ║
╚══════════════════════╝

<a name="table-api-table-1-config-columns-config-columns-wrapword"></a>

config.columns[*].wrapWord

类型:boolean 默认值:false

table包实现了自动文本换行,即宽度大于容器宽度的文本将在最近的空格或以下特殊字符处分成多行:\|/_.,;-

wrapWordfalse时:

const data = [ ['Lorem ipsum dolor sit amet, consectetur adipiscing elit. Phasellus pulvinar nibh sed mauris convallis dapibus. Nunc venenatis tempus nulla sit amet viverra.'] ]; const config = { columns: [ { width: 20 } ] }; console.log(table(data, config));
╔══════════════════════╗
║ Lorem ipsum dolor si ║
║ t amet, consectetur  ║
║ adipiscing elit. Pha ║
║ sellus pulvinar nibh ║
║ sed mauris convallis ║
║ dapibus. Nunc venena ║
║ tis tempus nulla sit ║
║ amet viverra.        ║
╚══════════════════════╝

wrapWordtrue时:

╔══════════════════════╗
║ Lorem ipsum dolor    ║
║ sit amet,            ║
║ consectetur          ║
║ adipiscing elit.     ║
║ Phasellus pulvinar   ║
║ nibh sed mauris      ║
║ convallis dapibus.   ║
║ Nunc venenatis       ║
║ tempus nulla sit     ║
║ amet viverra.        ║
╚══════════════════════╝

<a name="table-api-table-1-config-columndefault"></a>

config.columnDefault

类型:Column 默认值:{}

所有列的默认配置。特定列的设置将覆盖默认值。

<a name="table-api-table-1-config-header"></a>

config.header

类型:object

表头配置。

已弃用,推荐使用新的跨越单元格API。

表头配置继承了大部分列的配置,除了:

  • content {string}:表头内容。
  • width::根据内容宽度自动计算。
  • alignment::默认为center
  • verticalAlignment::不支持。
  • config.border.topJoin将变为config.border.topBody以获得更好的外观。
const data = [ ['0A', '0B', '0C'], ['1A', '1B', '1C'], ['2A', '2B', '2C'], ]; const config = { columnDefault: { width: 10, }, header: { alignment: 'center', content: 'THE HEADER\nThis is the table about something', }, } console.log(table(data, config));
╔══════════════════════════════════════╗
║              THE HEADER              ║
║  This is the table about something   ║
╟────────────┬────────────┬────────────╢
║ 0A         │ 0B         │ 0C         ║
╟────────────┼────────────┼────────────╢
║ 1A         │ 1B         │ 1C         ║
╟────────────┼────────────┼────────────╢
║ 2A         │ 2B         │ 2C         ║
╚════════════╧════════════╧════════════╝

<a name="table-api-table-1-config-spanningcells"></a>

config.spanningCells

类型:SpanningCellConfig[]

跨越单元格配置。

配置应该很直观:只需指定一个包含左上角单元格位置以及从该位置扩展的列数和/或行数的最小单元格配置数组。

重叠单元格的内容将被忽略,以保持data形状的一致性。

默认情况下,左上角单元格所属列的配置将应用于整个跨越单元格,除了:

  • width将是所有跨越列的宽度之和。
  • paddingRight将有意从最右边的列接收。

可以为每个跨越单元格配置高级自定义列样式,以覆盖默认行为。

const data = [ ['Test Coverage Report', '', '', '', '', ''], ['Module', 'Component', 'Test Cases', 'Failures', 'Durations', 'Success Rate'], ['Services', 'User', '50', '30', '3m 7s', '60.0%'], ['', 'Payment', '100', '80', '7m 15s', '80.0%'], ['Subtotal', '', '150', '110', '10m 22s', '73.3%'], ['Controllers', 'User', '24', '18', '1m 30s', '75.0%'], ['', 'Payment', '30', '24', '50s', '80.0%'], ['Subtotal', '', '54', '42', '2m 20s', '77.8%'], ['Total', '', '204', '152', '12m 42s', '74.5%'], ]; const config = { columns: [ { alignment: 'center', width: 12 }, { alignment: 'center', width: 10 }, { alignment: 'right' }, { alignment: 'right' }, { alignment: 'right' }, { alignment: 'right' } ], spanningCells: [ { col: 0, row: 0, colSpan: 6 }, { col: 0, row: 2, rowSpan: 2, verticalAlignment: 'middle'}, { col: 0, row: 4, colSpan: 2, alignment: 'right'}, { col: 0, row: 5, rowSpan: 2, verticalAlignment: 'middle'}, { col: 0, row: 7, colSpan: 2, alignment: 'right' }, { col: 0, row: 8, colSpan: 2, alignment: 'right' } ], }; console.log(table(data, config));
╔════════════════════════════════════════════════════════════════════════════════╗
║                                 测试覆盖率报告                                 ║
╟──────────────┬────────────┬────────────┬──────────┬───────────┬──────────────╢
║     模块     │    组件    │  测试用例  │  失败数  │   耗时    │   成功率     ║
╟──────────────┼────────────┼────────────┼──────────┼───────────┼──────────────╢
║              │   用户     │         50 │       30 │     3分7秒│        60.0% ║
║   服务       ├────────────┼────────────┼──────────┼───────────┼──────────────╢
║              │   支付     │        100 │       80 │   7分15秒 │        80.0% ║
╟──────────────┴────────────┼────────────┼──────────┼───────────┼──────────────╢
║                    小计   │        150 │      110 │  10分22秒 │        73.3% ║
╟──────────────┬────────────┼────────────┼──────────┼───────────┼──────────────╢
║              │   用户     │         24 │       18 │   1分30秒 │        75.0% ║
║   控制器     ├────────────┼────────────┼──────────┼───────────┼──────────────╢
║              │   支付     │         30 │       24 │      50秒 │        80.0% ║
╟──────────────┴────────────┼────────────┼──────────┼───────────┼──────────────╢
║                    小计   │         54 │       42 │   2分20秒 │        77.8% ║
╟───────────────────────────┼────────────┼──────────┼───────────┼──────────────╢
║                    总计   │        204 │      152 │  12分42秒 │        74.5% ║
╚═══════════════════════════╧════════════╧══════════╧═══════════╧══════════════╝

<a name="table-api-createstream"></a>

createStream

table 包导出 createStream 函数用于绘制表格并追加行。

参数:

  • config:table 的配置相同,除了 config.columnDefault.widthconfig.columnCount 必须提供。
import { createStream } from 'table'; const config = { columnDefault: { width: 50 }, columnCount: 1 }; const stream = createStream(config); setInterval(() => { stream.write([new Date()]); }, 500);

流式输出当前日期。

table 包使用 ANSI 转义码在打印新行时覆盖最后一行的输出。

底层实现在这个 Stack Overflow 回答 中有解释。

流式输出支持静态表格的所有配置属性和功能(如自动文本换行、对齐和填充),例如:

import { createStream } from 'table'; import _ from 'lodash'; const config = { columnDefault: { width: 50 }, columnCount: 3, columns: [ { width: 10, alignment: 'right' }, { alignment: 'center' }, { width: 10 } ] }; const stream = createStream(config); let i = 0; setInterval(() => { let random; random = _.sample('abcdefghijklmnopqrstuvwxyz', _.random(1, 30)).join(''); stream.write([i++, new Date(), random]); }, 500);

流式输出随机数据。

<a name="table-api-getbordercharacters"></a>

getBorderCharacters

参数:

  • template
    • 类型: 'honeywell' | 'norc' | 'ramac' | 'void'
    • 必需: true

你可以使用 getBorderCharacters 函数加载预定义的边框模板之一。

import { table, getBorderCharacters } from 'table'; const data = [ ['0A', '0B', '0C'], ['1A', '1B', '1C'], ['2A', '2B', '2C'] ]; const config = { border: getBorderCharacters(`模板名称`) }; console.log(table(data, config));
# honeywell

╔════╤════╤════╗
║ 0A │ 0B │ 0C ║
╟────┼────┼────╢
║ 1A │ 1B │ 1C ║
╟────┼────┼────╢
║ 2A │ 2B │ 2C ║
╚════╧════╧════╝

# norc

┌────┬────┬────┐
│ 0A │ 0B │ 0C │
├────┼────┼────┤
│ 1A │ 1B │ 1C │
├────┼────┼────┤
│ 2A │ 2B │ 2C │
└────┴────┴────┘

# ramac (ASCII; 用于不支持 Unicode 字符的终端)

+----+----+----+
| 0A | 0B | 0C |
|----|----|----|
| 1A | 1B | 1C |
|----|----|----|
| 2A | 2B | 2C |
+----+----+----+

# void (无边框; 参见文档的"无边框表格"部分)

 0A  0B  0C

 1A  1B  1C

 2A  2B  2C

如果你想贡献新的边框模板,请提出 issue

<a name="table-api-getbordercharacters-borderless-table"></a>

无边框表格

简单使用 void 边框字符模板会创建一个有很多不必要空格的表格。

要创建一个更美观的表格,重置填充并移除连接行,例如:

const output = table(data, { border: getBorderCharacters('void'), columnDefault: { paddingLeft: 0, paddingRight: 1 }, drawHorizontalLine: () => false } ); console.log(output);
0A 0B 0C
1A 1B 1C
2A 2B 2C

编辑推荐精选

TRAE编程

TRAE编程

AI辅助编程,代码自动修复

Trae是一种自适应的集成开发环境(IDE),通过自动化和多元协作改变开发流程。利用Trae,团队能够更快速、精确地编写和部署代码,从而提高编程效率和项目交付速度。Trae具备上下文感知和代码自动完成功能,是提升开发效率的理想工具。

AI工具TraeAI IDE协作生产力转型热门
蛙蛙写作

蛙蛙写作

AI小说写作助手,一站式润色、改写、扩写

蛙蛙写作—国内先进的AI写作平台,涵盖小说、学术、社交媒体等多场景。提供续写、改写、润色等功能,助力创作者高效优化写作流程。界面简洁,功能全面,适合各类写作者提升内容品质和工作效率。

AI辅助写作AI工具蛙蛙写作AI写作工具学术助手办公助手营销助手AI助手
问小白

问小白

全能AI智能助手,随时解答生活与工作的多样问题

问小白,由元石科技研发的AI智能助手,快速准确地解答各种生活和工作问题,包括但不限于搜索、规划和社交互动,帮助用户在日常生活中提高效率,轻松管理个人事务。

热门AI助手AI对话AI工具聊天机器人
Transly

Transly

实时语音翻译/同声传译工具

Transly是一个多场景的AI大语言模型驱动的同声传译、专业翻译助手,它拥有超精准的音频识别翻译能力,几乎零延迟的使用体验和支持多国语言可以让你带它走遍全球,无论你是留学生、商务人士、韩剧美剧爱好者,还是出国游玩、多国会议、跨国追星等等,都可以满足你所有需要同传的场景需求,线上线下通用,扫除语言障碍,让全世界的语言交流不再有国界。

讯飞智文

讯飞智文

一键生成PPT和Word,让学习生活更轻松

讯飞智文是一个利用 AI 技术的项目,能够帮助用户生成 PPT 以及各类文档。无论是商业领域的市场分析报告、年度目标制定,还是学生群体的职业生涯规划、实习避坑指南,亦或是活动策划、旅游攻略等内容,它都能提供支持,帮助用户精准表达,轻松呈现各种信息。

AI办公办公工具AI工具讯飞智文AI在线生成PPTAI撰写助手多语种文档生成AI自动配图热门
讯飞星火

讯飞星火

深度推理能力全新升级,全面对标OpenAI o1

科大讯飞的星火大模型,支持语言理解、知识问答和文本创作等多功能,适用于多种文件和业务场景,提升办公和日常生活的效率。讯飞星火是一个提供丰富智能服务的平台,涵盖科技资讯、图像创作、写作辅助、编程解答、科研文献解读等功能,能为不同需求的用户提供便捷高效的帮助,助力用户轻松获取信息、解决问题,满足多样化使用场景。

热门AI开发模型训练AI工具讯飞星火大模型智能问答内容创作多语种支持智慧生活
Spark-TTS

Spark-TTS

一种基于大语言模型的高效单流解耦语音令牌文本到语音合成模型

Spark-TTS 是一个基于 PyTorch 的开源文本到语音合成项目,由多个知名机构联合参与。该项目提供了高效的 LLM(大语言模型)驱动的语音合成方案,支持语音克隆和语音创建功能,可通过命令行界面(CLI)和 Web UI 两种方式使用。用户可以根据需求调整语音的性别、音高、速度等参数,生成高质量的语音。该项目适用于多种场景,如有声读物制作、智能语音助手开发等。

咔片PPT

咔片PPT

AI助力,做PPT更简单!

咔片是一款轻量化在线演示设计工具,借助 AI 技术,实现从内容生成到智能设计的一站式 PPT 制作服务。支持多种文档格式导入生成 PPT,提供海量模板、智能美化、素材替换等功能,适用于销售、教师、学生等各类人群,能高效制作出高品质 PPT,满足不同场景演示需求。

讯飞绘文

讯飞绘文

选题、配图、成文,一站式创作,让内容运营更高效

讯飞绘文,一个AI集成平台,支持写作、选题、配图、排版和发布。高效生成适用于各类媒体的定制内容,加速品牌传播,提升内容营销效果。

热门AI辅助写作AI工具讯飞绘文内容运营AI创作个性化文章多平台分发AI助手
材料星

材料星

专业的AI公文写作平台,公文写作神器

AI 材料星,专业的 AI 公文写作辅助平台,为体制内工作人员提供高效的公文写作解决方案。拥有海量公文文库、9 大核心 AI 功能,支持 30 + 文稿类型生成,助力快速完成领导讲话、工作总结、述职报告等材料,提升办公效率,是体制打工人的得力写作神器。

下拉加载更多