@amaster.ai/pi-lark 0.1.4 → 0.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +3 -3
- package/skills/lark-approval/SKILL.md +99 -0
- package/skills/lark-approval/references/lark-approval-approvals-get.md +128 -0
- package/skills/lark-approval/references/lark-approval-approvals-search.md +103 -0
- package/skills/lark-approval/references/lark-approval-initiate.md +221 -0
- package/skills/lark-approval/references/lark-approval-instance-form-control-parameters.md +606 -0
- package/skills/lark-approval/references/lark-approval-instance-value-sourcing.md +108 -0
- package/skills/lark-approval/references/lark-approval-instances-cancel.md +78 -0
- package/skills/lark-approval/references/lark-approval-instances-cc.md +105 -0
- package/skills/lark-approval/references/lark-approval-instances-get.md +145 -0
- package/skills/lark-approval/references/lark-approval-instances-initiated.md +128 -0
- package/skills/lark-approval/references/lark-approval-tasks-add-sign.md +120 -0
- package/skills/lark-approval/references/lark-approval-tasks-approve.md +81 -0
- package/skills/lark-approval/references/lark-approval-tasks-query.md +85 -0
- package/skills/lark-approval/references/lark-approval-tasks-reject.md +73 -0
- package/skills/lark-approval/references/lark-approval-tasks-remind.md +82 -0
- package/skills/lark-approval/references/lark-approval-tasks-rollback.md +89 -0
- package/skills/lark-approval/references/lark-approval-tasks-transfer.md +91 -0
- package/skills/lark-apps/SKILL.md +110 -0
- package/skills/lark-apps/references/lark-apps-access-scope-get.md +28 -0
- package/skills/lark-apps/references/lark-apps-access-scope-set.md +40 -0
- package/skills/lark-apps/references/lark-apps-automation.md +164 -0
- package/skills/lark-apps/references/lark-apps-cloud-dev.md +120 -0
- package/skills/lark-apps/references/lark-apps-create.md +40 -0
- package/skills/lark-apps/references/lark-apps-db-execute.md +228 -0
- package/skills/lark-apps/references/lark-apps-db.md +162 -0
- package/skills/lark-apps/references/lark-apps-env-pull.md +37 -0
- package/skills/lark-apps/references/lark-apps-env.md +48 -0
- package/skills/lark-apps/references/lark-apps-file.md +96 -0
- package/skills/lark-apps/references/lark-apps-get.md +43 -0
- package/skills/lark-apps/references/lark-apps-git-credential.md +37 -0
- package/skills/lark-apps/references/lark-apps-html-publish.md +62 -0
- package/skills/lark-apps/references/lark-apps-init.md +36 -0
- package/skills/lark-apps/references/lark-apps-list.md +37 -0
- package/skills/lark-apps/references/lark-apps-local-dev.md +78 -0
- package/skills/lark-apps/references/lark-apps-observability.md +48 -0
- package/skills/lark-apps/references/lark-apps-openapi-key.md +79 -0
- package/skills/lark-apps/references/lark-apps-plugin-install.md +36 -0
- package/skills/lark-apps/references/lark-apps-plugin-list.md +23 -0
- package/skills/lark-apps/references/lark-apps-plugin-uninstall.md +25 -0
- package/skills/lark-apps/references/lark-apps-release-create.md +32 -0
- package/skills/lark-apps/references/lark-apps-release-get.md +28 -0
- package/skills/lark-apps/references/lark-apps-release-list.md +31 -0
- package/skills/lark-apps/references/lark-apps-role.md +133 -0
- package/skills/lark-apps/references/lark-apps-session-messages-list.md +53 -0
- package/skills/lark-apps/references/lark-apps-update.md +30 -0
- package/skills/lark-attendance/SKILL.md +57 -0
- package/skills/lark-base/SKILL.md +161 -0
- package/skills/lark-base/references/dashboard-block-data-config.md +376 -0
- package/skills/lark-base/references/formula-field-guide.md +737 -0
- package/skills/lark-base/references/lark-base-cell-value.md +158 -0
- package/skills/lark-base/references/lark-base-dashboard-block-get-data.md +717 -0
- package/skills/lark-base/references/lark-base-dashboard.md +247 -0
- package/skills/lark-base/references/lark-base-data-analysis-sop.md +210 -0
- package/skills/lark-base/references/lark-base-data-query-guide.md +61 -0
- package/skills/lark-base/references/lark-base-data-query.md +454 -0
- package/skills/lark-base/references/lark-base-field-create.md +105 -0
- package/skills/lark-base/references/lark-base-field-json.md +527 -0
- package/skills/lark-base/references/lark-base-field-update.md +173 -0
- package/skills/lark-base/references/lark-base-form-detail.md +71 -0
- package/skills/lark-base/references/lark-base-form-questions-create.md +118 -0
- package/skills/lark-base/references/lark-base-form-questions-update.md +92 -0
- package/skills/lark-base/references/lark-base-form-submit.md +170 -0
- package/skills/lark-base/references/lark-base-record-batch-create.md +57 -0
- package/skills/lark-base/references/lark-base-record-batch-update.md +52 -0
- package/skills/lark-base/references/lark-base-record-history-list.md +43 -0
- package/skills/lark-base/references/lark-base-record-upsert.md +63 -0
- package/skills/lark-base/references/lark-base-role-guide.md +65 -0
- package/skills/lark-base/references/lark-base-view-set-filter.md +191 -0
- package/skills/lark-base/references/lark-base-workflow-guide.md +830 -0
- package/skills/lark-base/references/lark-base-workflow-schema.md +1071 -0
- package/skills/lark-base/references/lookup-field-guide.md +512 -0
- package/skills/lark-base/references/role-config.md +549 -0
- package/skills/lark-calendar/SKILL.md +198 -0
- package/skills/lark-calendar/references/lark-calendar-create.md +83 -0
- package/skills/lark-calendar/references/lark-calendar-meeting.md +40 -0
- package/skills/lark-calendar/references/lark-calendar-recurring.md +90 -0
- package/skills/lark-calendar/references/lark-calendar-room-find.md +109 -0
- package/skills/lark-calendar/references/lark-calendar-rsvp.md +38 -0
- package/skills/lark-calendar/references/lark-calendar-schedule-clear-time.md +59 -0
- package/skills/lark-calendar/references/lark-calendar-schedule-fuzzy-time.md +88 -0
- package/skills/lark-calendar/references/lark-calendar-schedule-meeting.md +122 -0
- package/skills/lark-calendar/references/lark-calendar-suggestion.md +121 -0
- package/skills/lark-calendar/references/lark-calendar-update.md +100 -0
- package/skills/lark-contact/SKILL.md +55 -0
- package/skills/lark-contact/references/lark-contact-get-user.md +19 -0
- package/skills/lark-contact/references/lark-contact-search-user.md +123 -0
- package/skills/lark-doc/SKILL.md +84 -0
- package/skills/lark-doc/references/lark-doc-create.md +80 -0
- package/skills/lark-doc/references/lark-doc-fetch.md +140 -0
- package/skills/lark-doc/references/lark-doc-history.md +107 -0
- package/skills/lark-doc/references/lark-doc-md.md +76 -0
- package/skills/lark-doc/references/lark-doc-media-download.md +50 -0
- package/skills/lark-doc/references/lark-doc-media-insert.md +114 -0
- package/skills/lark-doc/references/lark-doc-media-preview.md +41 -0
- package/skills/lark-doc/references/lark-doc-mindnote.md +128 -0
- package/skills/lark-doc/references/lark-doc-resource-cover.md +70 -0
- package/skills/lark-doc/references/lark-doc-update.md +260 -0
- package/skills/lark-doc/references/lark-doc-whiteboard.md +158 -0
- package/skills/lark-doc/references/lark-doc-word-stat.md +93 -0
- package/skills/lark-doc/references/lark-doc-xml-extended-blocks.md +35 -0
- package/skills/lark-doc/references/lark-doc-xml.md +182 -0
- package/skills/lark-doc/references/style/lark-doc-create-workflow.md +47 -0
- package/skills/lark-doc/references/style/lark-doc-style.md +68 -0
- package/skills/lark-doc/references/style/lark-doc-update-workflow.md +48 -0
- package/skills/lark-doc/scripts/doc_word_stat.py +1243 -0
- package/skills/lark-drive/SKILL.md +232 -0
- package/skills/lark-drive/references/lark-drive-add-comment.md +193 -0
- package/skills/lark-drive/references/lark-drive-apply-permission.md +77 -0
- package/skills/lark-drive/references/lark-drive-comment-location.md +205 -0
- package/skills/lark-drive/references/lark-drive-comments-guide.md +80 -0
- package/skills/lark-drive/references/lark-drive-cover.md +79 -0
- package/skills/lark-drive/references/lark-drive-create-folder.md +73 -0
- package/skills/lark-drive/references/lark-drive-create-shortcut.md +103 -0
- package/skills/lark-drive/references/lark-drive-delete.md +103 -0
- package/skills/lark-drive/references/lark-drive-download.md +31 -0
- package/skills/lark-drive/references/lark-drive-export-download.md +50 -0
- package/skills/lark-drive/references/lark-drive-export.md +174 -0
- package/skills/lark-drive/references/lark-drive-files-list.md +183 -0
- package/skills/lark-drive/references/lark-drive-import.md +178 -0
- package/skills/lark-drive/references/lark-drive-inspect.md +52 -0
- package/skills/lark-drive/references/lark-drive-list-comments.md +125 -0
- package/skills/lark-drive/references/lark-drive-member-add.md +66 -0
- package/skills/lark-drive/references/lark-drive-move.md +122 -0
- package/skills/lark-drive/references/lark-drive-permission-guide.md +53 -0
- package/skills/lark-drive/references/lark-drive-preview.md +87 -0
- package/skills/lark-drive/references/lark-drive-pull.md +137 -0
- package/skills/lark-drive/references/lark-drive-push.md +189 -0
- package/skills/lark-drive/references/lark-drive-reactions.md +113 -0
- package/skills/lark-drive/references/lark-drive-search.md +273 -0
- package/skills/lark-drive/references/lark-drive-secure-label.md +52 -0
- package/skills/lark-drive/references/lark-drive-status.md +135 -0
- package/skills/lark-drive/references/lark-drive-task-result.md +355 -0
- package/skills/lark-drive/references/lark-drive-upload.md +101 -0
- package/skills/lark-drive/references/lark-drive-version-delete.md +38 -0
- package/skills/lark-drive/references/lark-drive-version-get.md +71 -0
- package/skills/lark-drive/references/lark-drive-version-history.md +73 -0
- package/skills/lark-drive/references/lark-drive-version-revert.md +35 -0
- package/skills/lark-drive/references/lark-drive-workflow-knowledge-organize-analysis.md +249 -0
- package/skills/lark-drive/references/lark-drive-workflow-knowledge-organize-discovery.md +253 -0
- package/skills/lark-drive/references/lark-drive-workflow-knowledge-organize-execution.md +200 -0
- package/skills/lark-drive/references/lark-drive-workflow-knowledge-organize-planning.md +336 -0
- package/skills/lark-drive/references/lark-drive-workflow-knowledge-organize-rollback.md +308 -0
- package/skills/lark-drive/references/lark-drive-workflow-knowledge-organize.md +232 -0
- package/skills/lark-drive/references/lark-drive-workflow-permission-governance-commands.md +168 -0
- package/skills/lark-drive/references/lark-drive-workflow-permission-governance-outputs.md +424 -0
- package/skills/lark-drive/references/lark-drive-workflow-permission-governance.md +207 -0
- package/skills/lark-drive/references/lark-drive-workflow.md +131 -0
- package/skills/lark-event/SKILL.md +155 -0
- package/skills/lark-event/references/lark-event-approval.md +170 -0
- package/skills/lark-event/references/lark-event-im.md +87 -0
- package/skills/lark-event/references/lark-event-minutes.md +54 -0
- package/skills/lark-event/references/lark-event-task.md +78 -0
- package/skills/lark-event/references/lark-event-vc.md +106 -0
- package/skills/lark-event/references/lark-event-whiteboard.md +67 -0
- package/skills/lark-im/SKILL.md +249 -0
- package/skills/lark-im/references/card/card-2.0-schema.md +107 -0
- package/skills/lark-im/references/card/components/button.md +63 -0
- package/skills/lark-im/references/card/components/chart.md +57 -0
- package/skills/lark-im/references/card/components/checker.md +38 -0
- package/skills/lark-im/references/card/components/collapsible_panel.md +46 -0
- package/skills/lark-im/references/card/components/column_set.md +53 -0
- package/skills/lark-im/references/card/components/date_picker.md +34 -0
- package/skills/lark-im/references/card/components/div.md +36 -0
- package/skills/lark-im/references/card/components/form.md +51 -0
- package/skills/lark-im/references/card/components/header.md +34 -0
- package/skills/lark-im/references/card/components/hr.md +17 -0
- package/skills/lark-im/references/card/components/img.md +34 -0
- package/skills/lark-im/references/card/components/img_combination.md +30 -0
- package/skills/lark-im/references/card/components/input.md +43 -0
- package/skills/lark-im/references/card/components/interactive_container.md +46 -0
- package/skills/lark-im/references/card/components/markdown.md +56 -0
- package/skills/lark-im/references/card/components/multi_select_person.md +40 -0
- package/skills/lark-im/references/card/components/multi_select_static.md +40 -0
- package/skills/lark-im/references/card/components/overflow.md +36 -0
- package/skills/lark-im/references/card/components/person.md +30 -0
- package/skills/lark-im/references/card/components/person_list.md +31 -0
- package/skills/lark-im/references/card/components/picker_datetime.md +34 -0
- package/skills/lark-im/references/card/components/picker_time.md +34 -0
- package/skills/lark-im/references/card/components/recycling_container.md +35 -0
- package/skills/lark-im/references/card/components/select_img.md +42 -0
- package/skills/lark-im/references/card/components/select_person.md +39 -0
- package/skills/lark-im/references/card/components/select_static.md +43 -0
- package/skills/lark-im/references/card/components/table.md +53 -0
- package/skills/lark-im/references/card/lark-im-card-create.md +180 -0
- package/skills/lark-im/references/card/lark-im-card-style.md +281 -0
- package/skills/lark-im/references/card/resource/colors.md +34 -0
- package/skills/lark-im/references/card/resource/icons.md +38 -0
- package/skills/lark-im/references/lark-im-card-action-reply.md +175 -0
- package/skills/lark-im/references/lark-im-chat-create.md +162 -0
- package/skills/lark-im/references/lark-im-chat-identity.md +55 -0
- package/skills/lark-im/references/lark-im-chat-list.md +166 -0
- package/skills/lark-im/references/lark-im-chat-members-list.md +83 -0
- package/skills/lark-im/references/lark-im-chat-messages-list.md +157 -0
- package/skills/lark-im/references/lark-im-chat-search.md +142 -0
- package/skills/lark-im/references/lark-im-chat-update.md +84 -0
- package/skills/lark-im/references/lark-im-feed-group-list-item.md +68 -0
- package/skills/lark-im/references/lark-im-feed-group-list.md +65 -0
- package/skills/lark-im/references/lark-im-feed-group-query-item.md +44 -0
- package/skills/lark-im/references/lark-im-feed-groups.md +452 -0
- package/skills/lark-im/references/lark-im-feed-shortcut-create.md +97 -0
- package/skills/lark-im/references/lark-im-feed-shortcut-list.md +103 -0
- package/skills/lark-im/references/lark-im-feed-shortcut-remove.md +48 -0
- package/skills/lark-im/references/lark-im-flag-cancel.md +67 -0
- package/skills/lark-im/references/lark-im-flag-create.md +67 -0
- package/skills/lark-im/references/lark-im-flag-list.md +100 -0
- package/skills/lark-im/references/lark-im-message-enrichment.md +54 -0
- package/skills/lark-im/references/lark-im-messages-mget.md +99 -0
- package/skills/lark-im/references/lark-im-messages-reply.md +277 -0
- package/skills/lark-im/references/lark-im-messages-resources-download.md +94 -0
- package/skills/lark-im/references/lark-im-messages-search.md +234 -0
- package/skills/lark-im/references/lark-im-messages-send.md +279 -0
- package/skills/lark-im/references/lark-im-reactions.md +299 -0
- package/skills/lark-im/references/lark-im-threads-messages-list.md +115 -0
- package/skills/lark-mail/SKILL.md +290 -0
- package/skills/lark-mail/assets/templates/job-application--resume.html +33 -0
- package/skills/lark-mail/assets/templates/newsletter--weekly-brief.html +50 -0
- package/skills/lark-mail/assets/templates/research--market-report.html +256 -0
- package/skills/lark-mail/assets/templates/weekly--personal-report.html +43 -0
- package/skills/lark-mail/assets/templates/weekly--team-report.html +9 -0
- package/skills/lark-mail/references/lark-mail-calendar-invite.md +36 -0
- package/skills/lark-mail/references/lark-mail-decline-receipt.md +115 -0
- package/skills/lark-mail/references/lark-mail-draft-create.md +127 -0
- package/skills/lark-mail/references/lark-mail-draft-edit.md +404 -0
- package/skills/lark-mail/references/lark-mail-forward.md +239 -0
- package/skills/lark-mail/references/lark-mail-html.md +333 -0
- package/skills/lark-mail/references/lark-mail-lint-html.md +243 -0
- package/skills/lark-mail/references/lark-mail-message-modify.md +48 -0
- package/skills/lark-mail/references/lark-mail-message-trash.md +41 -0
- package/skills/lark-mail/references/lark-mail-message.md +233 -0
- package/skills/lark-mail/references/lark-mail-messages.md +108 -0
- package/skills/lark-mail/references/lark-mail-recall.md +66 -0
- package/skills/lark-mail/references/lark-mail-recipient-search.md +59 -0
- package/skills/lark-mail/references/lark-mail-reply-all.md +213 -0
- package/skills/lark-mail/references/lark-mail-reply.md +249 -0
- package/skills/lark-mail/references/lark-mail-rules.md +31 -0
- package/skills/lark-mail/references/lark-mail-send-as.md +44 -0
- package/skills/lark-mail/references/lark-mail-send-receipt.md +120 -0
- package/skills/lark-mail/references/lark-mail-send-status.md +46 -0
- package/skills/lark-mail/references/lark-mail-send.md +222 -0
- package/skills/lark-mail/references/lark-mail-share-to-chat.md +87 -0
- package/skills/lark-mail/references/lark-mail-signature.md +98 -0
- package/skills/lark-mail/references/lark-mail-template-create.md +129 -0
- package/skills/lark-mail/references/lark-mail-template-update.md +150 -0
- package/skills/lark-mail/references/lark-mail-template.md +54 -0
- package/skills/lark-mail/references/lark-mail-thread.md +111 -0
- package/skills/lark-mail/references/lark-mail-triage.md +131 -0
- package/skills/lark-mail/references/lark-mail-watch.md +94 -0
- package/skills/lark-markdown/SKILL.md +70 -0
- package/skills/lark-markdown/references/lark-markdown-create.md +114 -0
- package/skills/lark-markdown/references/lark-markdown-diff.md +156 -0
- package/skills/lark-markdown/references/lark-markdown-fetch.md +79 -0
- package/skills/lark-markdown/references/lark-markdown-overwrite.md +85 -0
- package/skills/lark-markdown/references/lark-markdown-patch.md +160 -0
- package/skills/lark-minutes/SKILL.md +207 -0
- package/skills/lark-minutes/references/lark-minutes-detail.md +62 -0
- package/skills/lark-minutes/references/lark-minutes-download.md +135 -0
- package/skills/lark-minutes/references/lark-minutes-search.md +202 -0
- package/skills/lark-minutes/references/lark-minutes-speaker-replace.md +107 -0
- package/skills/lark-minutes/references/lark-minutes-summary.md +120 -0
- package/skills/lark-minutes/references/lark-minutes-todo.md +136 -0
- package/skills/lark-minutes/references/lark-minutes-update.md +39 -0
- package/skills/lark-minutes/references/lark-minutes-upload.md +104 -0
- package/skills/lark-note/SKILL.md +94 -0
- package/skills/lark-note/references/lark-note-detail.md +26 -0
- package/skills/lark-note/references/lark-note-transcript.md +23 -0
- package/skills/lark-okr/SKILL.md +122 -0
- package/skills/lark-okr/references/lark-okr-alignments.md +180 -0
- package/skills/lark-okr/references/lark-okr-batch-create.md +106 -0
- package/skills/lark-okr/references/lark-okr-contentblock.md +427 -0
- package/skills/lark-okr/references/lark-okr-cycle-detail.md +91 -0
- package/skills/lark-okr/references/lark-okr-cycle-list.md +93 -0
- package/skills/lark-okr/references/lark-okr-entities.md +329 -0
- package/skills/lark-okr/references/lark-okr-image-upload.md +116 -0
- package/skills/lark-okr/references/lark-okr-indicator-update.md +80 -0
- package/skills/lark-okr/references/lark-okr-indicators.md +223 -0
- package/skills/lark-okr/references/lark-okr-patch.md +104 -0
- package/skills/lark-okr/references/lark-okr-progress-create.md +85 -0
- package/skills/lark-okr/references/lark-okr-progress-delete.md +47 -0
- package/skills/lark-okr/references/lark-okr-progress-get.md +93 -0
- package/skills/lark-okr/references/lark-okr-progress-list.md +80 -0
- package/skills/lark-okr/references/lark-okr-progress-update.md +85 -0
- package/skills/lark-okr/references/lark-okr-reorder.md +81 -0
- package/skills/lark-okr/references/lark-okr-weight.md +96 -0
- package/skills/lark-openapi-explorer/SKILL.md +153 -0
- package/skills/lark-shared/SKILL.md +211 -0
- package/skills/lark-shared/references/lark-wiki-token-routing.md +42 -0
- package/skills/lark-sheets/SKILL.md +234 -0
- package/skills/lark-sheets/references/lark-sheets-batch-update.md +200 -0
- package/skills/lark-sheets/references/lark-sheets-changeset.md +105 -0
- package/skills/lark-sheets/references/lark-sheets-chart.md +332 -0
- package/skills/lark-sheets/references/lark-sheets-conditional-format.md +181 -0
- package/skills/lark-sheets/references/lark-sheets-filter-view.md +137 -0
- package/skills/lark-sheets/references/lark-sheets-filter.md +130 -0
- package/skills/lark-sheets/references/lark-sheets-float-image.md +159 -0
- package/skills/lark-sheets/references/lark-sheets-formula-translation.md +276 -0
- package/skills/lark-sheets/references/lark-sheets-formula-verify.md +77 -0
- package/skills/lark-sheets/references/lark-sheets-history.md +93 -0
- package/skills/lark-sheets/references/lark-sheets-pivot-table.md +171 -0
- package/skills/lark-sheets/references/lark-sheets-range-operations.md +297 -0
- package/skills/lark-sheets/references/lark-sheets-read-data.md +235 -0
- package/skills/lark-sheets/references/lark-sheets-search-replace.md +111 -0
- package/skills/lark-sheets/references/lark-sheets-sheet-structure.md +212 -0
- package/skills/lark-sheets/references/lark-sheets-sparkline.md +149 -0
- package/skills/lark-sheets/references/lark-sheets-visual-standards.md +205 -0
- package/skills/lark-sheets/references/lark-sheets-workbook.md +420 -0
- package/skills/lark-sheets/references/lark-sheets-write-cells.md +575 -0
- package/skills/lark-sheets/scripts/sheets_df.py +32 -0
- package/skills/lark-skill-maker/SKILL.md +85 -0
- package/skills/lark-slides/SKILL.md +285 -0
- package/skills/lark-slides/references/asset-planning.md +135 -0
- package/skills/lark-slides/references/examples.md +91 -0
- package/skills/lark-slides/references/iconpark-index.json +41901 -0
- package/skills/lark-slides/references/iconpark.md +46 -0
- package/skills/lark-slides/references/lark-slides-create.md +156 -0
- package/skills/lark-slides/references/lark-slides-edit-workflows.md +144 -0
- package/skills/lark-slides/references/lark-slides-media-upload.md +127 -0
- package/skills/lark-slides/references/lark-slides-pptx-template-workflows.md +89 -0
- package/skills/lark-slides/references/lark-slides-replace-pages.md +95 -0
- package/skills/lark-slides/references/lark-slides-replace-slide.md +240 -0
- package/skills/lark-slides/references/lark-slides-screenshot.md +97 -0
- package/skills/lark-slides/references/lark-slides-whiteboard.md +331 -0
- package/skills/lark-slides/references/lark-slides-xml-get.md +100 -0
- package/skills/lark-slides/references/lark-slides-xml-presentation-slide-delete.md +125 -0
- package/skills/lark-slides/references/lark-slides-xml-presentation-slide-get.md +110 -0
- package/skills/lark-slides/references/lark-slides-xml-presentation-slide-replace.md +189 -0
- package/skills/lark-slides/references/lark-slides-xml-presentations-get.md +99 -0
- package/skills/lark-slides/references/planning-layer.md +246 -0
- package/skills/lark-slides/references/slide-templates.md +201 -0
- package/skills/lark-slides/references/slides_chart_demo.xml +1 -0
- package/skills/lark-slides/references/slides_demo.xml +226 -0
- package/skills/lark-slides/references/slides_xml_schema_definition.xml +3054 -0
- package/skills/lark-slides/references/troubleshooting.md +45 -0
- package/skills/lark-slides/references/validation-checklist.md +119 -0
- package/skills/lark-slides/references/visual-planning.md +255 -0
- package/skills/lark-slides/references/xml-format-guide.md +433 -0
- package/skills/lark-slides/references/xml-schema-quick-ref.md +249 -0
- package/skills/lark-slides/scripts/iconpark_tool.py +362 -0
- package/skills/lark-slides/scripts/iconpark_tool_test.py +177 -0
- package/skills/lark-slides/scripts/xml_text_overlap_lint.py +1220 -0
- package/skills/lark-slides/scripts/xml_text_overlap_lint_test.py +1170 -0
- package/skills/lark-task/SKILL.md +168 -0
- package/skills/lark-task/references/lark-task-assign.md +38 -0
- package/skills/lark-task/references/lark-task-comment.md +28 -0
- package/skills/lark-task/references/lark-task-complete.md +27 -0
- package/skills/lark-task/references/lark-task-create.md +70 -0
- package/skills/lark-task/references/lark-task-followers.md +35 -0
- package/skills/lark-task/references/lark-task-get-my-tasks.md +61 -0
- package/skills/lark-task/references/lark-task-get-related-tasks.md +53 -0
- package/skills/lark-task/references/lark-task-reminder.md +36 -0
- package/skills/lark-task/references/lark-task-reopen.md +27 -0
- package/skills/lark-task/references/lark-task-search.md +41 -0
- package/skills/lark-task/references/lark-task-set-ancestor.md +32 -0
- package/skills/lark-task/references/lark-task-tasklist-create.md +35 -0
- package/skills/lark-task/references/lark-task-tasklist-members.md +36 -0
- package/skills/lark-task/references/lark-task-tasklist-search.md +38 -0
- package/skills/lark-task/references/lark-task-tasklist-task-add.md +38 -0
- package/skills/lark-task/references/lark-task-update.md +37 -0
- package/skills/lark-task/references/lark-task-upload-attachment.md +59 -0
- package/skills/lark-vc/SKILL.md +205 -0
- package/skills/lark-vc/references/lark-vc-detail.md +44 -0
- package/skills/lark-vc/references/lark-vc-recording.md +152 -0
- package/skills/lark-vc/references/lark-vc-search.md +163 -0
- package/skills/lark-vc/references/vc-domain-boundaries.md +196 -0
- package/skills/lark-vc-agent/SKILL.md +201 -0
- package/skills/lark-vc-agent/references/lark-vc-agent-meeting-events.md +315 -0
- package/skills/lark-vc-agent/references/lark-vc-agent-meeting-join.md +141 -0
- package/skills/lark-vc-agent/references/lark-vc-agent-meeting-leave.md +105 -0
- package/skills/lark-vc-agent/references/lark-vc-agent-meeting-list-active.md +91 -0
- package/skills/lark-vc-agent/references/lark-vc-agent-meeting-message-send.md +134 -0
- package/skills/lark-whiteboard/SKILL.md +47 -0
- package/skills/lark-whiteboard/elements/connectors.md +102 -0
- package/skills/lark-whiteboard/elements/content.md +40 -0
- package/skills/lark-whiteboard/elements/image.md +80 -0
- package/skills/lark-whiteboard/elements/layout.md +374 -0
- package/skills/lark-whiteboard/elements/schema.md +357 -0
- package/skills/lark-whiteboard/elements/style.md +318 -0
- package/skills/lark-whiteboard/elements/typography.md +73 -0
- package/skills/lark-whiteboard/references/lark-whiteboard-query.md +60 -0
- package/skills/lark-whiteboard/references/lark-whiteboard-update.md +122 -0
- package/skills/lark-whiteboard/references/lark-whiteboard-workflow.md +97 -0
- package/skills/lark-whiteboard/routes/dsl.md +107 -0
- package/skills/lark-whiteboard/routes/mermaid.md +27 -0
- package/skills/lark-whiteboard/routes/svg-edit.md +85 -0
- package/skills/lark-whiteboard/routes/svg.md +54 -0
- package/skills/lark-whiteboard/scenes/architecture.md +433 -0
- package/skills/lark-whiteboard/scenes/bar-chart.md +187 -0
- package/skills/lark-whiteboard/scenes/comparison.md +135 -0
- package/skills/lark-whiteboard/scenes/fishbone.md +238 -0
- package/skills/lark-whiteboard/scenes/flowchart.md +185 -0
- package/skills/lark-whiteboard/scenes/flywheel.md +195 -0
- package/skills/lark-whiteboard/scenes/funnel.md +101 -0
- package/skills/lark-whiteboard/scenes/line-chart.md +214 -0
- package/skills/lark-whiteboard/scenes/mermaid.md +130 -0
- package/skills/lark-whiteboard/scenes/milestone.md +139 -0
- package/skills/lark-whiteboard/scenes/organization.md +173 -0
- package/skills/lark-whiteboard/scenes/photo-showcase.md +126 -0
- package/skills/lark-whiteboard/scenes/pyramid.md +99 -0
- package/skills/lark-whiteboard/scenes/swimlane.md +371 -0
- package/skills/lark-whiteboard/scenes/treemap.md +216 -0
- package/skills/lark-wiki/SKILL.md +114 -0
- package/skills/lark-wiki/references/lark-wiki-delete-space.md +205 -0
- package/skills/lark-wiki/references/lark-wiki-member-add.md +67 -0
- package/skills/lark-wiki/references/lark-wiki-member-list.md +76 -0
- package/skills/lark-wiki/references/lark-wiki-member-remove.md +61 -0
- package/skills/lark-wiki/references/lark-wiki-move-to-drive.md +122 -0
- package/skills/lark-wiki/references/lark-wiki-move.md +185 -0
- package/skills/lark-wiki/references/lark-wiki-node-copy.md +72 -0
- package/skills/lark-wiki/references/lark-wiki-node-create.md +127 -0
- package/skills/lark-wiki/references/lark-wiki-node-delete.md +62 -0
- package/skills/lark-wiki/references/lark-wiki-node-get.md +57 -0
- package/skills/lark-wiki/references/lark-wiki-node-list.md +95 -0
- package/skills/lark-wiki/references/lark-wiki-space-create.md +46 -0
- package/skills/lark-wiki/references/lark-wiki-space-list.md +68 -0
- package/skills/lark-workflow-meeting-summary/SKILL.md +122 -0
- package/skills/lark-workflow-standup-report/SKILL.md +122 -0
|
@@ -0,0 +1,332 @@
|
|
|
1
|
+
# Lark Sheet Chart
|
|
2
|
+
|
|
3
|
+
## 真对象硬约束
|
|
4
|
+
|
|
5
|
+
当用户要求"画个图 / 数据可视化 / 趋势图 / 对比图 / 占比图"时,**必须**通过 `+chart-{create|update|delete}` 创建真实的图表对象。**禁止**用本地脚本调 matplotlib / seaborn 生成图片再插入到表格代替——静态图片无法随源数据更新,且失去交互能力。判断标准:交付后 `+chart-list` 必须能返回该对象。
|
|
6
|
+
|
|
7
|
+
## 使用场景
|
|
8
|
+
|
|
9
|
+
读写图表对象。本 reference 覆盖 4 个 shortcut:
|
|
10
|
+
|
|
11
|
+
| 操作需求 | 使用工具 | 说明 |
|
|
12
|
+
|---------|---------|------|
|
|
13
|
+
| 查看已有图表 | `+chart-list` | 获取图表的类型、数据源和样式配置 |
|
|
14
|
+
| 创建/更新/删除图表 | `+chart-{create|update|delete}` | 对图表对象执行写入操作 |
|
|
15
|
+
|
|
16
|
+
典型工作流:先读取现有图表了解配置 → 执行创建/更新/删除 → 再次读取验证结果。
|
|
17
|
+
|
|
18
|
+
## 需求→图表类型映射(创建前必查)
|
|
19
|
+
|
|
20
|
+
| 用户说 | 图表类型 | 备注 |
|
|
21
|
+
|--------|---------|------|
|
|
22
|
+
| "占比"、"比例"、"各XX占多少" | 饼图(pie) | 单维度占比首选 |
|
|
23
|
+
| "对比"、"各XX的YY" | 柱形图(column,纵向) | 多类别数值对比;横向条形用 `bar` |
|
|
24
|
+
| "趋势"、"变化"、"走势" | 折线图(line) | 时间序列首选 |
|
|
25
|
+
| "堆积"、"组成构成" | 堆积柱形图(column + stack) | 多系列累加 |
|
|
26
|
+
| "分布"、"相关性" | 散点图(scatter) | 两变量关系 |
|
|
27
|
+
|
|
28
|
+
**多图表需求**:当用户同时提到多种分析(如"统计占比 + 对比数量"),必须创建多个图表,每个对应一种类型,不要只做一个。
|
|
29
|
+
|
|
30
|
+
**`--properties` 结构锚点(构造前必读)**:`--properties` 顶层只有 `position` / `offset` / `size` / `snapshot` 四个字段,**没有**顶层 `data`,也没有再嵌一层 `properties`。图表数据配置全部挂在 `snapshot.data` 下——下文及示例里出现的 `refs` / `headerMode` / `dim1` / `dim2` / `nameRef` 一律指 `snapshot.data.refs` / `snapshot.data.headerMode` / `snapshot.data.dim1` / `snapshot.data.dim2`(及其下的 `serie.nameRef` / `series[].nameRef`);样式 / 堆叠 / 数据标签等在 `snapshot.plotArea` 下。完整结构以 `lark-cli sheets +chart-create --print-schema --flag-name properties` 为准。
|
|
31
|
+
|
|
32
|
+
**常见配置错误(必须注意)**:
|
|
33
|
+
- **图表类型选择错误**:用户说"堆积柱形图/百分比堆积"时,应在 `properties.snapshot.plotArea.plot.extra.stack` 中配置堆叠;百分比堆叠需在该 stack 下设置 `percentage: true`。用户说"占比/比例"时,优先考虑饼图或百分比堆积图。注意区分 `column`(柱形图,纵向)与 `bar`(条形图,横向)是两个不同的 type 取值,"对比/各 XX" 类纵向柱默认用 `column`
|
|
34
|
+
- **数据标签开关**:`plotArea.plot.labels` 对象的**存在性即开关**——
|
|
35
|
+
- 用户需要看到具体数值/类别时:传入 `labels` 并配置 `value` / `category` / `series` / `percentage` 等显示位。
|
|
36
|
+
- 用户明确说"不要数据标签 / 关掉标签"时:**整个 `labels` 字段省略**。不要用 `labels: { value: false, category: false, series: false }` 这种"全部置 false"的写法关闭——只要传了 `labels`,系统就会显示数据标签(且默认兜底显示 value)。
|
|
37
|
+
- **数据源范围与系列名来源要对齐**:
|
|
38
|
+
- **默认情况(inline 模式)**:`refs` 范围**应包含表头行**(首行/首列即系列名),且范围要精确覆盖目标数据,不要多选或少选。
|
|
39
|
+
- **合并标题行要跳过**:如果表格在表头上方存在合并的标题行(如"员工统计表"横跨多列的大标题),`refs` 必须跳过标题行、从真正的列标题行开始。例如表头在第 3 行、数据在第 4-20 行,则 `refs` 应为 `A3:G20` 而非 `A1:G20`。包含合并标题行会导致列名识别错误、表头被当作数据参与聚合计算。
|
|
40
|
+
- **数据与表头分离时必须用 detached 模式**:当 `refs` 只覆盖完整数据的一个子集(按筛选/分组只画其中一段),而真正的语义表头在该子集之外时,**必须**设置 `snapshot.data.headerMode='detached'`:refs 仅传纯数据范围,维度名/系列名通过 `snapshot.data.dim1.serie.nameRef` / `snapshot.data.dim2.series[].nameRef` 指向真正的表头单元格。详见下文"硬性规则:数据与表头分离场景必须使用 detached 模式"。
|
|
41
|
+
- **axes[].label 不接受 `format` / `number_format` 字段**:想给坐标轴数值加千分位、百分号等格式化时,不要在 `axes[i].label` 里传 `format` 或 `number_format`(schema 未定义,会报 `unexpected property "format" is not defined in schema`)。数值格式化统一在源数据单元格的 `cell_styles.number_format` 里设置(写 `+cells-set` 时),图表会沿用单元格格式。**日期轴同理**:横轴显示成 `45297` 这类 Excel 序列号,是因为源日期列没设日期格式——给源列设 `number_format="yyyy-mm-dd"` 后横轴才会显示成日期(反例:折线图横轴日期显示为序列号)。大数值轴显示科学计数法同理,给源列设整数 / 千分位格式(反例:透视表数值轴显示科学计数法)。
|
|
42
|
+
- **轴口径要对齐用户要的指标**:用户要"占比 / 比例"时,**纵轴应是百分比**——用饼图,或柱 / 条形图设 `stack.percentage: true` 让纵轴变 %,并把数据源指向占比列 / 让数据标签显示百分比;不要交付纵轴仍是原始计数的图(反例:要求看各类占比,却用普通堆积柱、纵轴是 0–350 的人数而非百分比)。
|
|
43
|
+
- **创建后必须验证**:图表创建后必须调用 `+chart-list` 验证配置是否正确
|
|
44
|
+
|
|
45
|
+
> **⚠️ 硬性规则:当用户通过列标题名称(而非列索引)指定横轴/纵轴系列时,必须先读取表格首行(表头)来确定列名与列索引的对应关系,再设置 `dim1`/`dim2` 的 `index`。**
|
|
46
|
+
> 例如用户说"横轴为车型系列,纵轴为Q1-Q4的销量",你不能猜测列索引,必须先通过读取表格数据源范围的首行内容(使用 `lark-sheets-read-data` 的 `+cells-get` 或其他读取单元格的工具),确认"车型系列"是第几列、"Q1"~"Q4"分别是第几列,然后再将正确的列索引填入 `dim1.serie.index` 和 `dim2.series[].index`。
|
|
47
|
+
|
|
48
|
+
> **⚠️ 硬性规则:数据与表头分离场景必须使用 detached 模式。** 当 `refs` 仅覆盖数据的一个子集,而真正的语义表头行/列位于该子集之外时,**必须** `snapshot.data.headerMode='detached'` 并配上 `nameRef`。不能用 inline 模式 + 把 refs 多带 1 行兜底表头来替代——那种写法已废弃。否则图表会把错误的首行/首列当系列名,或图例显示成"系列1/系列2"等默认名,或者 refs 里混入相邻分组的数据。
|
|
49
|
+
>
|
|
50
|
+
> **触发该规则的典型信号**(满足任意一条都必须走 detached):
|
|
51
|
+
> - 用户要求"针对 X 类的数据画图"、"只看某个分组"、"只画筛选后的部分",而 X 类对应的行段在数据中间或末尾,与表头不连续;
|
|
52
|
+
> - 用户要求"按 X 分别画图"、"按某个维度(部门/品类/地区/时间段等)拆图"——**多张图共享同一组表头**;
|
|
53
|
+
> - `refs` 起始行 > 表头行(如表头在第 1 行,但 `refs` 从第 11 行开始);
|
|
54
|
+
> - `refs` 起始列 > 表头列(如表头在 A 列,但 `refs` 从 C 列开始)。
|
|
55
|
+
>
|
|
56
|
+
> **正确做法**:
|
|
57
|
+
> 1. 在 `data` 下显式设置 `"headerMode": "detached"`;
|
|
58
|
+
> 2. `refs` **只覆盖该子集的纯数据**,不要向上/向左多带 1 行/列,也不要把全局表头整段并进来(否则会把其它分组的数据混进图);
|
|
59
|
+
> 3. **`nameRef` 必填**:给 `dim1.serie.nameRef` 写真正表头中"类别名"那一格的 A1 引用(如 `'Sheet2'!A1`,sheet 名按 A1 标准单引号包裹),给每个 `dim2.series[i].nameRef` 写对应数值列的 A1 引用(如 `'Sheet2'!C1`、`'Sheet2'!D1`)。任一缺失会被校验拦下并报 `headerMode=detached requires ... nameRef`;
|
|
60
|
+
> 4. `refs[i].value` 必须是单元格或普通矩形范围(CELL / NORMAL),不接受整行/整列/开区间;`direction='column'` 时起始行必须 > 0,`direction='row'` 时起始列必须 > 0;
|
|
61
|
+
> 5. `index` 仍按 `refs` 内的列/行号填,从 1 开始。
|
|
62
|
+
>
|
|
63
|
+
> **两种场景对照(互斥,二选一)**:
|
|
64
|
+
>
|
|
65
|
+
> | 场景 | 何时命中 | 写法 |
|
|
66
|
+
> |---|---|---|
|
|
67
|
+
> | A. 表头与数据连在一起 | 单张图、refs 首行/首列就是表头(典型整段画图) | **省略 headerMode**(默认 inline),refs 含表头,**不写 nameRef** |
|
|
68
|
+
> | B. 表头与数据分离 | 上面 4 条信号任一命中(数据子集、按维度拆图等) | **`headerMode='detached'`**,refs 仅纯数据,**`nameRef` 必填** |
|
|
69
|
+
>
|
|
70
|
+
> **反向约束**:场景 A 下不要写 `nameRef`——首行命名已经生效,多写反而冗余。`nameRef` 仅在场景 B 下使用(且必填)。
|
|
71
|
+
|
|
72
|
+
## ⚠️ chart 数据源引用 pivot 时必须排除总计行
|
|
73
|
+
|
|
74
|
+
当 chart 要基于刚创建的 pivot 产物画图时,**禁止凭猜写 `refs`**。pivot 默认启用 `show_row_grand_total` / `show_col_grand_total`,产物最后一行/一列通常是"总计"。如果 `refs` 把总计行一并框进去:
|
|
75
|
+
- **柱形图**末尾会多一根天文数字柱子(=所有数据求和),把其他柱子压扁到看不见
|
|
76
|
+
- **饼图**会多一个"总计"扇区占 33%+,真实类别的比例完全失真
|
|
77
|
+
|
|
78
|
+
**正确流程**:
|
|
79
|
+
1. `+pivot-create create` 返回 `sheet_id` + `pivot_table_id`
|
|
80
|
+
2. 调 `+csv-get(sheet_id, 'A1:E30')` 或 `+pivot-list` 读 pivot 产物的**实际数据范围**
|
|
81
|
+
3. 识别并排除"总计"/"小计"行(通常最后一行;嵌套 pivot 还要排除中间层小计)
|
|
82
|
+
4. `+chart-create create` 时 `snapshot.data.refs` 精确到数据行(如 pivot 占 A1:D9、总计在 row9 → chart 用 `A1:D8`)
|
|
83
|
+
|
|
84
|
+
## 图表位置选择(创建前必做)
|
|
85
|
+
|
|
86
|
+
凭感觉挑列号/行号会被 API 拒(`position is out of sheet range`)。按以下四步走:
|
|
87
|
+
|
|
88
|
+
1. **查尺寸**:`+workbook-info` 拿该 sheet 的 `row_count` / `column_count`(下文记为 rowCount / columnCount;`+sheet-info` 只返回布局,不含行列总数)。
|
|
89
|
+
2. **估跨度**:默认单元格 **105 px 宽 × 27 px 高**,`needCols = ceil(width/105)`,`needRows = ceil(height/27)`。
|
|
90
|
+
3. **校验**:`position.row + needRows ≤ rowCount` 且 `col_idx + needCols ≤ columnCount`(`position.row` 为 **0-based**:首行 = `row:0`,与 A1 区间 / `+dim-insert --position` 的 1-based 行号不同;col 按 A=0、B=1、…、Z=25、AA=26… 换算)。
|
|
91
|
+
4. **不够就先扩表**,二选一,禁止硬塞越界位置:
|
|
92
|
+
- **优先**放数据下方空区:`position = {row: data_end_row + 2, col: "A"}`;
|
|
93
|
+
- 否则先调 `+dim-insert`(`lark-sheets-sheet-structure`)扩行/列,再 create。
|
|
94
|
+
|
|
95
|
+
⚠️ **图表落点禁止压在已有数据矩形内**——必须落在数据区**右侧或下方的空白**,否则图表浮层会遮挡原始数据被判失败(反例:折线图落在数据区中间,遮挡了下方原始数据)。
|
|
96
|
+
|
|
97
|
+
**示例**:21 列 sheet 放 600×400 图 → `needCols=6, needRows=15`
|
|
98
|
+
- ❌ `{row: 0, col: "W"}` — col=22 越界
|
|
99
|
+
- ✅ `{row: 42, col: "A"}` — 放数据下方
|
|
100
|
+
- ✅ 先 `+dim-insert --position V --count 6`(在 V 列前插 6 列,即 U 列之后),再放图到 `{row: 0, col: "V"}`
|
|
101
|
+
|
|
102
|
+
## Shortcuts
|
|
103
|
+
|
|
104
|
+
| Shortcut | Risk | 分组 |
|
|
105
|
+
| --- | --- | --- |
|
|
106
|
+
| `+chart-list` | read | 对象 |
|
|
107
|
+
| `+chart-create` | write | 对象 |
|
|
108
|
+
| `+chart-update` | write | 对象 |
|
|
109
|
+
| `+chart-delete` | high-risk-write | 对象 |
|
|
110
|
+
|
|
111
|
+
## Flags
|
|
112
|
+
|
|
113
|
+
### `+chart-list`
|
|
114
|
+
|
|
115
|
+
_公共四件套 · 系统:`--dry-run`_
|
|
116
|
+
|
|
117
|
+
| Flag | Type | 必填 | 说明 |
|
|
118
|
+
| --- | --- | --- | --- |
|
|
119
|
+
| `--chart-id` | string | optional | 指定单个图表 reference_id 过滤 |
|
|
120
|
+
|
|
121
|
+
### `+chart-create`
|
|
122
|
+
|
|
123
|
+
_公共四件套 · 系统:`--dry-run`_
|
|
124
|
+
|
|
125
|
+
| Flag | Type | 必填 | 说明 |
|
|
126
|
+
| --- | --- | --- | --- |
|
|
127
|
+
| `--properties` | string + File + Stdin(复合 JSON) | required | 图表完整配置 JSON。顶层字段为 `position` / `offset` / `size` / `snapshot`(无顶层 `data`,也无再嵌一层 `properties`);图表数据配置在 `snapshot.data` 下(含 `refs` / `headerMode` / `dim1` / `dim2`);必须至少含 `snapshot.data.dim1.serie.index` 或 `dim2.series[].index` 之一,否则 server 拒。结构嵌套深,完整结构跑 `--print-schema --flag-name properties` |
|
|
128
|
+
|
|
129
|
+
### `+chart-update`
|
|
130
|
+
|
|
131
|
+
_公共四件套 · 系统:`--dry-run`_
|
|
132
|
+
|
|
133
|
+
| Flag | Type | 必填 | 说明 |
|
|
134
|
+
| --- | --- | --- | --- |
|
|
135
|
+
| `--chart-id` | string | required | 目标图表 reference_id |
|
|
136
|
+
| `--properties` | string + File + Stdin(复合 JSON) | required | 完整或足够完整的图表配置 JSON(先 `+chart-list` 回读再 patch) |
|
|
137
|
+
|
|
138
|
+
### `+chart-delete`
|
|
139
|
+
|
|
140
|
+
_公共四件套 · 系统:`--yes`、`--dry-run`_
|
|
141
|
+
|
|
142
|
+
| Flag | Type | 必填 | 说明 |
|
|
143
|
+
| --- | --- | --- | --- |
|
|
144
|
+
| `--chart-id` | string | required | 目标图表 reference_id |
|
|
145
|
+
|
|
146
|
+
## Schemas
|
|
147
|
+
|
|
148
|
+
> 复合 JSON flag 字段速查(只列顶层 + 一层嵌套)。深层结构看下方 `## Examples`,或用 `--print-schema` 读完整 JSON Schema(用法见 SKILL.md「公共 flag 速查」与「Agent 使用提示」)。
|
|
149
|
+
|
|
150
|
+
### `+chart-create` `--properties` / `+chart-update` `--properties`
|
|
151
|
+
|
|
152
|
+
_创建/更新的图表属性_
|
|
153
|
+
|
|
154
|
+
**顶层字段**:
|
|
155
|
+
- `position` (object?) — 必填 { row: number, col: string }
|
|
156
|
+
- `offset` (object?) — 可选 { row_offset?: number, col_offset?: number }
|
|
157
|
+
- `size` (object?) — 必填 { width: number, height: number }
|
|
158
|
+
- `snapshot` (object?) — 图表快照配置 { title?: object, subTitle?: object, style?: object, legend?: oneOf, plotArea: object, …共 6 项 }
|
|
159
|
+
|
|
160
|
+
## Examples
|
|
161
|
+
|
|
162
|
+
公共四件套:所有 shortcut 顶部排列 `--url` / `--spreadsheet-token` / `--sheet-id` / `--sheet-name`(XOR 规则同 `+csv-get`)。
|
|
163
|
+
|
|
164
|
+
### `+chart-list`
|
|
165
|
+
|
|
166
|
+
输出契约:返回按工作表分组的图表列表,每个图表含 `chart_id` / `position` / `details.snapshot` 等。
|
|
167
|
+
|
|
168
|
+
### `+chart-create`
|
|
169
|
+
|
|
170
|
+
> **`snapshot.data` 必填 `dim1.serie.index` 或 `dim2.series[].index` 之一**(1-based,对应 `refs.value` 范围内的列序)。schema 允许传空 `{}` 但 server 运行时强制:缺则被拒为 `snapshot.data.dim1.serie.index and dim2.series[].index are both missing; at least one must be set`,即便侥幸通过也只会渲染空图。
|
|
171
|
+
|
|
172
|
+
> ⚠️ **含 `'Sheet'!` 前缀的 `--properties` 必须走 stdin 或 `@file`,不要用 inline 单引号**。`refs` / `nameRef` 里的 sheet 前缀带单引号(`'Sheet1'!A1`),若塞进 inline 的 `--properties '{...}'`,bash 会把内层那对单引号吃掉(sheet 名带空格还会被拆成多个词),JSON 直接被破坏。下面示例统一用 `--properties - <<'JSON' … JSON`(heredoc 定界符加引号 = 不做 shell 替换),或 `--properties @file.json`(`@` 只接 cwd 下相对路径)。
|
|
173
|
+
|
|
174
|
+
最小可用列图(inline 模式:refs 含表头行):
|
|
175
|
+
|
|
176
|
+
```bash
|
|
177
|
+
lark-cli sheets +chart-create --url "https://example.feishu.cn/sheets/shtXXX" \
|
|
178
|
+
--sheet-name "Sheet1" --properties - <<'JSON'
|
|
179
|
+
{
|
|
180
|
+
"position":{"row":42,"col":"A"},
|
|
181
|
+
"size":{"width":600,"height":400},
|
|
182
|
+
"snapshot":{
|
|
183
|
+
"data":{
|
|
184
|
+
"refs":[{"value":"'Sheet1'!A1:B10"}],
|
|
185
|
+
"dim1":{"serie":{"index":1}},
|
|
186
|
+
"dim2":{"series":[{"index":2}]}
|
|
187
|
+
},
|
|
188
|
+
"plotArea":{"plot":{"type":"column"}}
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
JSON
|
|
192
|
+
|
|
193
|
+
# 或落到 cwd 下相对路径文件再用 @file
|
|
194
|
+
lark-cli sheets +chart-create --url "..." --sheet-name "Sheet1" --properties @chart-config.json
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
**饼图专属示例**(`sectors` 必须嵌在 `plotArea.plot.series[i].sectors.sector[]`,且 `sector[].index` 1-based):
|
|
198
|
+
|
|
199
|
+
饼图比 column / bar 更复杂:`sectors` 是 object,里面再包一个**单数** `sector` 数组——CLI 不替你 normalize,写错路径会被 server schema 直接拒。
|
|
200
|
+
|
|
201
|
+
```bash
|
|
202
|
+
lark-cli sheets +chart-create --url "..." --sheet-name "Sheet1" --properties - <<'JSON'
|
|
203
|
+
{
|
|
204
|
+
"position":{"row":24,"col":"F"},
|
|
205
|
+
"size":{"width":600,"height":450},
|
|
206
|
+
"snapshot":{
|
|
207
|
+
"title":{"text":"各部门员工人数占比"},
|
|
208
|
+
"plotArea":{"plot":{
|
|
209
|
+
"type":"pie",
|
|
210
|
+
"series":[{
|
|
211
|
+
"index":1,
|
|
212
|
+
"sectors":{"sector":[{"index":1,"offsetRadius":0.05}]}
|
|
213
|
+
}]
|
|
214
|
+
}},
|
|
215
|
+
"data":{
|
|
216
|
+
"refs":[{"value":"'Sheet1'!A1:B11"}],
|
|
217
|
+
"dim1":{"serie":{"index":1,"aggregate":true}},
|
|
218
|
+
"dim2":{"series":[{"index":2,"aggregateType":"sum"}]}
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
JSON
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
**数据与表头分离(必须用 `detached` + `nameRef`)**:
|
|
226
|
+
|
|
227
|
+
场景:周度销量明细表,真实表头在第 1 行(A1=周次、C1=订单量、D1=退款量),数据按 B 列"店铺"分段;用户只要"3 号店"那一段(第 11–17 行)。
|
|
228
|
+
|
|
229
|
+
```bash
|
|
230
|
+
lark-cli sheets +chart-create --url "..." --sheet-name "Sheet2" --properties - <<'JSON'
|
|
231
|
+
{
|
|
232
|
+
"position":{"row":7,"col":"F"},
|
|
233
|
+
"size":{"width":600,"height":360},
|
|
234
|
+
"snapshot":{
|
|
235
|
+
"title":{"text":"3 号店周度订单/退款"},
|
|
236
|
+
"plotArea":{"plot":{"type":"column"}},
|
|
237
|
+
"data":{
|
|
238
|
+
"headerMode":"detached",
|
|
239
|
+
"direction":"column",
|
|
240
|
+
"refs":[{"value":"'Sheet2'!A11:D17"}],
|
|
241
|
+
"dim1":{"serie":{"index":1,"nameRef":"'Sheet2'!A1"}},
|
|
242
|
+
"dim2":{"series":[
|
|
243
|
+
{"index":3,"nameRef":"'Sheet2'!C1"},
|
|
244
|
+
{"index":4,"nameRef":"'Sheet2'!D1"}
|
|
245
|
+
]}
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
JSON
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
约束:
|
|
253
|
+
- `refs` 只覆盖纯数据 `A11:D17`,**不要**把表头行 A1 并进来
|
|
254
|
+
- `nameRef` 在 detached 模式下**必填**,缺了被校验报 `headerMode=detached requires ... nameRef`
|
|
255
|
+
- `index` 按 refs 内的列序算(A=1、B=2、C=3、D=4),**不是**全表列号
|
|
256
|
+
- `nameRef` 必须配对应的 `index`;单写 `nameRef` 不传 `index` 直接报参数错
|
|
257
|
+
|
|
258
|
+
**多张图共享同一组表头(按维度拆图,必须用 detached)**:
|
|
259
|
+
|
|
260
|
+
场景:销售明细表头在 A1:E1(月份/区域/销售额/订单数/客单价),数据按区域分 3 段(华北 A2:E9、华东 A10:E17、华南 A18:E25),要分别画 3 张图。
|
|
261
|
+
|
|
262
|
+
❌ 常见错误:
|
|
263
|
+
|
|
264
|
+
```jsonc
|
|
265
|
+
// 错误 1:refs 含全局表头但跨段 —— 多个区域被混进同一张图
|
|
266
|
+
{"data":{"refs":[{"value":"'Sheet'!A1:E17"}], ... }} // 华东图混进华北 8 行
|
|
267
|
+
// 错误 2:inline + refs 只取数据段、不写 detached/nameRef —— 图例显示成具体数据值
|
|
268
|
+
{"data":{"refs":[{"value":"'Sheet'!A10:E17"}],"dim1":{"serie":{"index":1}}, ... }}
|
|
269
|
+
```
|
|
270
|
+
|
|
271
|
+
✅ 正确模式:3 张图各自 detached、refs 干净不重叠:
|
|
272
|
+
|
|
273
|
+
```jsonc
|
|
274
|
+
// 图 1:华北
|
|
275
|
+
{"data":{
|
|
276
|
+
"headerMode":"detached","direction":"column",
|
|
277
|
+
"refs":[{"value":"'Sheet'!A2:E9"}],
|
|
278
|
+
"dim1":{"serie":{"index":1,"nameRef":"'Sheet'!A1"}},
|
|
279
|
+
"dim2":{"series":[
|
|
280
|
+
{"index":3,"nameRef":"'Sheet'!C1"},
|
|
281
|
+
{"index":4,"nameRef":"'Sheet'!D1"}
|
|
282
|
+
]}
|
|
283
|
+
}}
|
|
284
|
+
// 图 2:华东 —— refs 改 'Sheet'!A10:E17,其余同上
|
|
285
|
+
// 图 3:华南 —— refs 改 'Sheet'!A18:E25,其余同上
|
|
286
|
+
```
|
|
287
|
+
|
|
288
|
+
> `--properties` JSON 关键字段:
|
|
289
|
+
> - `position.row` / `position.col` 必须留足空间,越界会被 API 拒(按本文件"图表位置选择"四步走)
|
|
290
|
+
> - `snapshot.data.headerMode`:默认 inline;当 refs 仅覆盖数据子集而语义表头在子集之外,必须 `detached` + `nameRef`
|
|
291
|
+
> - chart 引用 pivot 输出时,`snapshot.data.refs` 必须排除总计 / 小计行
|
|
292
|
+
|
|
293
|
+
### `+chart-update`
|
|
294
|
+
|
|
295
|
+
**Update 三步法**(缺一步会丢字段):
|
|
296
|
+
|
|
297
|
+
1. `+chart-list --chart-id <id>` 拿到完整 snapshot
|
|
298
|
+
2. 在拿到的 snapshot 上**局部**修改要改的字段,其余保持不变
|
|
299
|
+
3. 把**完整 snapshot** 整个回写到 `--properties.snapshot`
|
|
300
|
+
|
|
301
|
+
```bash
|
|
302
|
+
lark-cli sheets +chart-update --url "..." --sheet-id "$SID" --chart-id "chrXXX" \
|
|
303
|
+
--properties '{
|
|
304
|
+
"position":{"row":0,"col":"A"},
|
|
305
|
+
"size":{"width":480,"height":320},
|
|
306
|
+
"snapshot": <完整快照(由 +chart-list 取回后局部修改)>
|
|
307
|
+
}'
|
|
308
|
+
```
|
|
309
|
+
|
|
310
|
+
> 关键:**不能只提交局部 snapshot**,否则未传字段会被还原为默认值。`+chart-update` 的语义是 PUT(整体覆盖),不是 PATCH。
|
|
311
|
+
|
|
312
|
+
### `+chart-delete`
|
|
313
|
+
|
|
314
|
+
示例:
|
|
315
|
+
|
|
316
|
+
```bash
|
|
317
|
+
# dry-run 先看会删什么(sheet 定位必填)
|
|
318
|
+
lark-cli sheets +chart-delete --url "https://example.feishu.cn/sheets/shtXXX" --sheet-id "$SID" \
|
|
319
|
+
--chart-id "chrXXX" --dry-run
|
|
320
|
+
|
|
321
|
+
# 真正执行
|
|
322
|
+
lark-cli sheets +chart-delete --url "https://example.feishu.cn/sheets/shtXXX" --sheet-id "$SID" \
|
|
323
|
+
--chart-id "chrXXX" --yes
|
|
324
|
+
```
|
|
325
|
+
|
|
326
|
+
### Validate / DryRun / Execute 约束
|
|
327
|
+
|
|
328
|
+
- `Validate`:XOR 公共四件套;`+chart-create` / `+chart-update` 的 `--properties` 必须能解析为合法 JSON;`+chart-delete`(high-risk-write)校验 `--yes` 或 `--dry-run` 至少一个。
|
|
329
|
+
- `DryRun`:`+chart-create` / `+chart-update` 输出"将要 POST 的 body 模板";`+chart-delete` 输出"将要删除的 chart_id 及隶属 sheet",零网络副作用。
|
|
330
|
+
- `Execute`:写操作执行后不自动回读;如需确认,自行调用 `+chart-list` 比对结果。
|
|
331
|
+
|
|
332
|
+
> `+chart-create` / `+chart-update` 是 write 级别,按需可用 `--dry-run` 预览,不要求 `--yes`。只有 `+chart-delete`(high-risk-write)必须 `--yes`。
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
# Lark Sheet Conditional Format
|
|
2
|
+
|
|
3
|
+
## 真对象硬约束 + 触发词清单
|
|
4
|
+
|
|
5
|
+
用户出现以下口语指令时,**强制**走 `+cond-format-{create|update|delete}`,**禁止**用 `+cells-set` 写静态背景色 / 字体色代替:
|
|
6
|
+
|
|
7
|
+
- **颜色动作**:"标红 / 标黄 / 标绿 / 上色 / 染色 / 涂色 / 表红色 / 表黄色"
|
|
8
|
+
- **视觉强调**:"高亮 / 突出 / 标记 / 标注 / 区分"
|
|
9
|
+
- **条件触发**:"重复的标出来 / 异常的圈出来 / 过期的染红 / 大于 X 的标黄 / 不达标的标红"
|
|
10
|
+
- **联动语义**:"颜色随数据变 / 联动 / 自动更新 / 改了数据颜色也跟着变"
|
|
11
|
+
- **数值可视化**:"数据条 / 色阶 / 渐变色 / 进度条样式"
|
|
12
|
+
|
|
13
|
+
飞书表格的"颜色标记"语义 = 条件格式规则 ≠ 静态背景色。如果用 `+cells-set` 写静态,源数据变化时颜色不会跟着变(典型反例:用户要求"过期单元格标红"时,模型用静态填充——日期变化后单元格颜色不再准确反映过期状态)。
|
|
14
|
+
|
|
15
|
+
**判断标准**:交付后 `+cond-format-list` 必须能返回该规则;否则视为违规。
|
|
16
|
+
|
|
17
|
+
**大数据量首选**:当数据量 > 1000 行时,条件格式是首选——它由飞书自身渲染,比"本地脚本逐行计算 + `+cells-set` 写静态背景色"更高效、更稳(颜色还能随源数据自动联动)。
|
|
18
|
+
|
|
19
|
+
## 使用场景
|
|
20
|
+
|
|
21
|
+
读写条件格式对象。本 reference 覆盖 4 个 shortcut:
|
|
22
|
+
|
|
23
|
+
| 操作需求 | 使用工具 | 说明 |
|
|
24
|
+
|---------|---------|------|
|
|
25
|
+
| 查看已有条件格式 | `+cond-format-list` | 获取规则类型、范围和样式配置 |
|
|
26
|
+
| 创建/更新/删除条件格式 | `+cond-format-{create|update|delete}` | 对条件格式规则执行写入操作 |
|
|
27
|
+
|
|
28
|
+
典型工作流:先读取现有条件格式了解配置 → 执行创建/更新/删除 → **必须再次读取验证结果**。
|
|
29
|
+
|
|
30
|
+
**常见配置错误(必须注意)**:
|
|
31
|
+
- **创建后必须验证**:条件格式创建后必须调用 `+cond-format-list` 验证规则是否生效。如果验证发现规则未生效或配置不正确,应立即修复并重试
|
|
32
|
+
- **范围要精确**:条件格式的应用范围必须精确覆盖用户指定的列/行,不要遗漏
|
|
33
|
+
- **`style.back_color` vs `style.fore_color` 的中文语义**:用户中文语境下的"**标红/高亮/染色/标记**"指**单元格背景色**,用 `back_color`;"**文字红/字体红/把字变红**"才用 `fore_color`。默认无说明时选 `back_color`。把过期数据涂红、重复值高亮等都应该是 `back_color: "#FFE6E6"`(或类似浅红)配合可选的 `fore_color` 加深字体
|
|
34
|
+
- **日期/空值比较必须防空**:用户说"过期的标红"时,除了 `TODAY()`,公式必须排除空单元格,否则空白格也会被误判为"早于今天"而全表标红。正确公式:`=AND(E1<>"", E1<=TODAY())`;错误公式:`=E1<=TODAY()`(空值会被当作 0 判为过期)
|
|
35
|
+
- **公式条件注意引用方式**:自定义公式条件中的单元格引用需要根据实际场景选择相对/绝对引用(如 `=E1<=TODAY()` 而非 `=$E$1<=TODAY()`,后者只比较一个格)
|
|
36
|
+
|
|
37
|
+
⚠️ **用户明确要求"辅助列+条件格式"两步走时,禁止用 `expression` 绕过**:当用户说以下任意一种表达时,必须按两步走(先建辅助列 → 再基于辅助列做条件格式),**禁止**直接用一个 `rule_type: "expression"` 公式一步完成:
|
|
38
|
+
|
|
39
|
+
- "**增加辅助列**,再/然后标记……"
|
|
40
|
+
- "**先计算/判断** XX **是否** YY,**再**标记……"
|
|
41
|
+
- "**新建一列**放结果,再用结果染色"
|
|
42
|
+
- 明确要求用 "辅助列"、"辅助字段"、"判断列"、"标记列"
|
|
43
|
+
|
|
44
|
+
**正确做法(两步走)**:
|
|
45
|
+
|
|
46
|
+
Step 1 的 `+cells-set` 及 `--copy-to-range` 等 flag 以 `lark-sheets-write-cells` 为准。
|
|
47
|
+
|
|
48
|
+
```
|
|
49
|
+
Step 1: `+cells-set` 在新列写判断公式(形成"是/否"或布尔辅助列)
|
|
50
|
+
range="H2", cells=[[{formula: "=IF(A2>B2, \"是\", \"否\")"}]], --copy-to-range="H2:H100"
|
|
51
|
+
|
|
52
|
+
Step 2: 基于辅助列值做条件格式(用 cellIs 或引用辅助列的 expression)
|
|
53
|
+
`+cond-format-{create|update|delete}` create
|
|
54
|
+
rule_type: "expression"
|
|
55
|
+
ranges: ["A2:H100"] // 整行高亮
|
|
56
|
+
attrs: [{formula: ["=$H2=\"是\""]}] // 引用辅助列
|
|
57
|
+
style: {back_color: "#FFECEC"}
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
**错误做法(一步走绕过辅助列)**:
|
|
61
|
+
|
|
62
|
+
```
|
|
63
|
+
`+cond-format-{create|update|delete}` create
|
|
64
|
+
rule_type: "expression"
|
|
65
|
+
ranges: ["2:145"]
|
|
66
|
+
attrs: [{formula: ["=$O2>$H2"]}] ← 虽然逻辑等价,但产物里缺辅助列 → 不满足用户明确要求的"辅助列"诉求
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
为什么禁止一步走:用户明确要求辅助列是有**业务意图**的——让人肉眼能在表里看到"是/否"列;条件格式只是视觉辅助。一步 expression 虽然效果对了,但用户打开表格看不到辅助列,被视为"操作不完整/未采用公式"。
|
|
70
|
+
|
|
71
|
+
`expression` 单独使用的场景是:用户**没有**明确要求辅助列、只要"标红符合条件的行"时。
|
|
72
|
+
|
|
73
|
+
⚠️ **创建条件格式前必须读数据行确认列对应**:仅读首行表头(`+csv-get range="A1:Z1"`)不够——如果表头语义含糊(比如"时间"、"日期"这种多列同义词),formula 里引用的列字母可能张冠李戴。必须再读 3-5 行**数据样本**(如 `range="A2:Z6"`)确认:①列名对应的实际值;②字段含义匹配用户描述;③数据类型是日期/数字/文本。特别是比较类条件格式(`=$A2>$B2` 这种),列字母选错整条规则就废了。
|
|
74
|
+
|
|
75
|
+
## Shortcuts
|
|
76
|
+
|
|
77
|
+
| Shortcut | Risk | 分组 |
|
|
78
|
+
| --- | --- | --- |
|
|
79
|
+
| `+cond-format-list` | read | 对象 |
|
|
80
|
+
| `+cond-format-create` | write | 对象 |
|
|
81
|
+
| `+cond-format-update` | write | 对象 |
|
|
82
|
+
| `+cond-format-delete` | high-risk-write | 对象 |
|
|
83
|
+
|
|
84
|
+
## Flags
|
|
85
|
+
|
|
86
|
+
### `+cond-format-list`
|
|
87
|
+
|
|
88
|
+
_公共四件套 · 系统:`--dry-run`_
|
|
89
|
+
|
|
90
|
+
| Flag | Type | 必填 | 说明 |
|
|
91
|
+
| --- | --- | --- | --- |
|
|
92
|
+
| `--rule-id` | string | optional | 按规则 id 过滤 |
|
|
93
|
+
|
|
94
|
+
### `+cond-format-create`
|
|
95
|
+
|
|
96
|
+
_公共四件套 · 系统:`--dry-run`_
|
|
97
|
+
|
|
98
|
+
| Flag | Type | 必填 | 说明 |
|
|
99
|
+
| --- | --- | --- | --- |
|
|
100
|
+
| `--properties` | string + File + Stdin(复合 JSON) | required | 规则配置 JSON,含 `style`(命中样式,必填)和 `attrs?`(规则参数列表,因 `rule_type` 不同结构而异)/ `has_ref?`。`rule_type` 和 `ranges` 已拎为独立 flag |
|
|
101
|
+
| `--rule-type` | string | required | 条件格式规则类型;优先级高于 `--properties` 中同名字段(可选值:`duplicateValues` / `uniqueValues` / `cellIs` / `containsText` / `timePeriod` / `containsBlanks` / `notContainsBlanks` / `dataBar` / `colorScale` / `rank` / `aboveAverage` / `expression` / `iconSet`) |
|
|
102
|
+
| `--ranges` | string + File + Stdin(简单 JSON) | required | 应用条件格式的 A1 范围 JSON 数组(如 `["A1:A100","C2:C50"]`);优先级高于 `--properties` 中同名字段 |
|
|
103
|
+
|
|
104
|
+
### `+cond-format-update`
|
|
105
|
+
|
|
106
|
+
_公共四件套 · 系统:`--dry-run`_
|
|
107
|
+
|
|
108
|
+
| Flag | Type | 必填 | 说明 |
|
|
109
|
+
| --- | --- | --- | --- |
|
|
110
|
+
| `--rule-id` | string | required | 目标规则 id |
|
|
111
|
+
| `--properties` | string + File + Stdin(复合 JSON) | required | 规则配置 JSON,结构同 `+cond-format-create` 的 `--properties`;update 是整组覆盖式 |
|
|
112
|
+
| `--rule-type` | string | required | 条件格式规则类型;优先级高于 `--properties` 中同名字段(可选值:`duplicateValues` / `uniqueValues` / `cellIs` / `containsText` / `timePeriod` / `containsBlanks` / `notContainsBlanks` / `dataBar` / `colorScale` / `rank` / `aboveAverage` / `expression` / `iconSet`) |
|
|
113
|
+
| `--ranges` | string + File + Stdin(简单 JSON) | required | 应用条件格式的 A1 范围 JSON 数组(如 `["A1:A100","C2:C50"]`);优先级高于 `--properties` 中同名字段 |
|
|
114
|
+
|
|
115
|
+
### `+cond-format-delete`
|
|
116
|
+
|
|
117
|
+
_公共四件套 · 系统:`--yes`、`--dry-run`_
|
|
118
|
+
|
|
119
|
+
| Flag | Type | 必填 | 说明 |
|
|
120
|
+
| --- | --- | --- | --- |
|
|
121
|
+
| `--rule-id` | string | required | 目标规则 id |
|
|
122
|
+
|
|
123
|
+
## Schemas
|
|
124
|
+
|
|
125
|
+
> 复合 JSON flag 字段速查(只列顶层 + 一层嵌套)。深层结构看下方 `## Examples`,或用 `--print-schema` 读完整 JSON Schema(用法见 SKILL.md「公共 flag 速查」与「Agent 使用提示」)。
|
|
126
|
+
|
|
127
|
+
### `+cond-format-create` `--properties` / `+cond-format-update` `--properties`
|
|
128
|
+
|
|
129
|
+
_创建/更新的条件格式属性_
|
|
130
|
+
|
|
131
|
+
**顶层字段**:
|
|
132
|
+
- `rule_type` (enum) — 条件格式规则类型 [duplicateValues / uniqueValues / cellIs / containsText / timePeriod / containsBlanks / notContainsBlanks / dataBar / colorScale / rank / aboveAverage / expression / iconSet] — ⚠️ 已拎为独立 flag `--rule-type`,请勿在此 JSON 内重复填写(同名以独立 flag 为准)
|
|
133
|
+
- `ranges` (array<string>) — 应用条件格式的 A1 范围列表 — ⚠️ 已拎为独立 flag `--ranges`,请勿在此 JSON 内重复填写(同名以独立 flag 为准)
|
|
134
|
+
- `style` (object) — 命中规则时应用的单元格样式 { back_color?: string, fore_color?: string, text_decoration?: enum, font?: enum }
|
|
135
|
+
- `attrs` (array<oneOf>?) — 规则参数列表
|
|
136
|
+
- `has_ref` (boolean?) — 可选
|
|
137
|
+
|
|
138
|
+
## Examples
|
|
139
|
+
|
|
140
|
+
公共四件套:所有 shortcut 顶部排列 `--url` / `--spreadsheet-token` / `--sheet-id` / `--sheet-name`(XOR)。
|
|
141
|
+
|
|
142
|
+
### `+cond-format-list`
|
|
143
|
+
|
|
144
|
+
```bash
|
|
145
|
+
# 列出当前 sheet 全部条件格式规则(拿 rule_id 供 update/delete)
|
|
146
|
+
lark-cli sheets +cond-format-list --url "..." --sheet-id "$SID"
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
### `+cond-format-create`
|
|
150
|
+
|
|
151
|
+
`--rule-type` / `--ranges` 是独立 flag(不要再放 `--properties`);`style` / `attrs` 等结构走 `--properties`:
|
|
152
|
+
|
|
153
|
+
```bash
|
|
154
|
+
# 重复值高亮
|
|
155
|
+
lark-cli sheets +cond-format-create --url "..." --sheet-id "$SID" \
|
|
156
|
+
--rule-type duplicateValues --ranges '["A1:A100"]' \
|
|
157
|
+
--properties '{"style":{"back_color":"#FFD7D7"}}'
|
|
158
|
+
|
|
159
|
+
# 数据条
|
|
160
|
+
lark-cli sheets +cond-format-create --url "..." --sheet-id "$SID" \
|
|
161
|
+
--rule-type dataBar --ranges '["B2:B100"]' \
|
|
162
|
+
--properties @rule.json
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
### `+cond-format-update`
|
|
166
|
+
|
|
167
|
+
整组覆盖式:先 `+cond-format-list --rule-id <id>` 拿当前完整配置,改后整组传回。
|
|
168
|
+
|
|
169
|
+
### `+cond-format-delete`
|
|
170
|
+
|
|
171
|
+
```bash
|
|
172
|
+
lark-cli sheets +cond-format-delete --url "..." --sheet-id "$SID" --rule-id "$RULE_ID" --yes
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
> 一次只删一个 `--rule-id`。要删**多个**条件格式时,先 `+cond-format-list` 拿到各 `rule-id`,再用 `+batch-update` 把多个 `+cond-format-delete` 合并为单次原子提交,不要逐个调用。
|
|
176
|
+
|
|
177
|
+
### Validate / DryRun / Execute 约束
|
|
178
|
+
|
|
179
|
+
- `Validate`:XOR 公共四件套;`--rule-type` / `--ranges` 必填;`--properties` 必须能解析为合法 JSON;按 `--rule-type` 检查必填子字段(`cellIs` 需 `attrs.operator` + `attrs.value`、`expression` 需 `attrs.formula`、`colorScale` 需 `min/mid/max` 配色等);`+cond-format-delete` 强制 `--yes` 或 `--dry-run`。
|
|
180
|
+
- `DryRun`:写操作输出"将要 POST/PATCH/DELETE 的 conditional_format 请求模板"。
|
|
181
|
+
- `Execute`:写后不自动回读;如需确认,自行调用 `+cond-format-list --rule-id <id>` 比对规则 / 范围 / 样式。
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
# Lark Sheet Filter View
|
|
2
|
+
|
|
3
|
+
## 概念回顾
|
|
4
|
+
|
|
5
|
+
筛选视图是 sheet 内的多份独立筛选配置,每个视图持有自己的 `range` 和 `rules`,由独立 `view_id`(10 位随机字符串)标识。一个 sheet 可有多个视图,视图的隐藏行仅在用户进入该视图时本地生效,不影响其他协作者,也不与该 sheet 上可能并存的筛选器(filter)互相影响。
|
|
6
|
+
|
|
7
|
+
`+filter-view-{create|update|delete}` 负责视图本身的 CRUD(create / update / delete);视图的"进入 / 退出"(激活态)是本地状态,不在工具语义内。
|
|
8
|
+
|
|
9
|
+
## 使用场景
|
|
10
|
+
|
|
11
|
+
读写筛选视图对象。本 reference 覆盖 4 个 shortcut:
|
|
12
|
+
|
|
13
|
+
| 操作需求 | 使用工具 | 说明 |
|
|
14
|
+
|---------|---------|------|
|
|
15
|
+
| 查看已有筛选视图 | `+filter-view-list` | 获取 sheet 上所有视图(视图名、范围、规则) |
|
|
16
|
+
| 创建 / 更新 / 删除筛选视图 | `+filter-view-{create|update|delete}` | create / update / delete 三个独立 shortcut |
|
|
17
|
+
|
|
18
|
+
典型工作流:先读取现有视图了解配置 → 执行创建 / 更新 / 删除 → **必须再次读取验证结果**。
|
|
19
|
+
|
|
20
|
+
**常见配置错误(必须注意)**:
|
|
21
|
+
- **视图范围必须覆盖表头行**:视图的 range 必须从表头行开始(如 `A1:F100`),不能只包含数据行
|
|
22
|
+
- **更新前先读取**:用户说"调整这个视图"时,先用 `+filter-view-list` 拉到目标视图当前 rules,**只改差异列**再回写
|
|
23
|
+
- **多次 create 不能复用 view_id**:复用应走 `update`,重复 `create` 会产生新视图
|
|
24
|
+
- **筛选不支持正则表达式**:飞书表格筛选器不支持正则表达式,传入正则会当成普通文本处理
|
|
25
|
+
|
|
26
|
+
## Shortcuts
|
|
27
|
+
|
|
28
|
+
| Shortcut | Risk | 分组 |
|
|
29
|
+
| --- | --- | --- |
|
|
30
|
+
| `+filter-view-list` | read | 对象 |
|
|
31
|
+
| `+filter-view-create` | write | 对象 |
|
|
32
|
+
| `+filter-view-update` | write | 对象 |
|
|
33
|
+
| `+filter-view-delete` | high-risk-write | 对象 |
|
|
34
|
+
|
|
35
|
+
## Flags
|
|
36
|
+
|
|
37
|
+
### `+filter-view-list`
|
|
38
|
+
|
|
39
|
+
_公共四件套 · 系统:`--dry-run`_
|
|
40
|
+
|
|
41
|
+
| Flag | Type | 必填 | 说明 |
|
|
42
|
+
| --- | --- | --- | --- |
|
|
43
|
+
| `--view-id` | string | optional | 按筛选视图 reference_id 过滤(命中即只返回单个视图) |
|
|
44
|
+
|
|
45
|
+
### `+filter-view-create`
|
|
46
|
+
|
|
47
|
+
_公共四件套 · 系统:`--dry-run`_
|
|
48
|
+
|
|
49
|
+
| Flag | Type | 必填 | 说明 |
|
|
50
|
+
| --- | --- | --- | --- |
|
|
51
|
+
| `--properties` | string + File + Stdin(复合 JSON) | required | 筛选视图规则 JSON,含 `rules?`(列级筛选规则数组)和 `filtered_columns?`。`range` 和 `view_name` 是独立 flag |
|
|
52
|
+
| `--range` | string | required | 筛选视图作用的单元格范围(A1 表示法,如 `A1:F1000`);优先级高于 `--properties` 中同名字段;create 必填,必须覆盖表头行 |
|
|
53
|
+
| `--view-name` | string | optional | 筛选视图名称;不传时系统自动分配;优先级高于 `--properties` 中同名字段 |
|
|
54
|
+
|
|
55
|
+
### `+filter-view-update`
|
|
56
|
+
|
|
57
|
+
_公共四件套 · 系统:`--dry-run`_
|
|
58
|
+
|
|
59
|
+
| Flag | Type | 必填 | 说明 |
|
|
60
|
+
| --- | --- | --- | --- |
|
|
61
|
+
| `--view-id` | string | required | 目标筛选视图 reference_id |
|
|
62
|
+
| `--properties` | string + File + Stdin(复合 JSON) | required | 筛选视图规则 JSON,含 `rules?` 和 `filtered_columns?`;update 是整组覆盖式(先 `+filter-view-list` 回读再 patch;传空 `rules: []` 清空)。`range` 和 `view_name` 是独立 flag |
|
|
63
|
+
| `--range` | string | optional | 筛选视图作用的单元格范围(A1 表示法,如 `A1:F1000`);优先级高于 `--properties` 中同名字段;update 时省略表示保留当前 range |
|
|
64
|
+
| `--view-name` | string | optional | 筛选视图名称;create 不传时系统自动分配,update 不传时保留原名;优先级高于 `--properties` 中同名字段 |
|
|
65
|
+
|
|
66
|
+
### `+filter-view-delete`
|
|
67
|
+
|
|
68
|
+
_公共四件套 · 系统:`--yes`、`--dry-run`_
|
|
69
|
+
|
|
70
|
+
| Flag | Type | 必填 | 说明 |
|
|
71
|
+
| --- | --- | --- | --- |
|
|
72
|
+
| `--view-id` | string | required | 目标筛选视图 reference_id |
|
|
73
|
+
|
|
74
|
+
## Schemas
|
|
75
|
+
|
|
76
|
+
> 复合 JSON flag 字段速查(只列顶层 + 一层嵌套)。深层结构看下方 `## Examples`,或用 `--print-schema` 读完整 JSON Schema(用法见 SKILL.md「公共 flag 速查」与「Agent 使用提示」)。
|
|
77
|
+
|
|
78
|
+
### `+filter-view-create` `--properties` / `+filter-view-update` `--properties`
|
|
79
|
+
|
|
80
|
+
_create / update 的视图属性_
|
|
81
|
+
|
|
82
|
+
**顶层字段**:
|
|
83
|
+
- `view_name` (string?) — 可选 — ⚠️ 已拎为独立 flag `--view-name`,请勿在此 JSON 内重复填写(同名以独立 flag 为准)
|
|
84
|
+
- `range` (string?) — 视图作用的单元格范围(A1 表示法) — ⚠️ 已拎为独立 flag `--range`,请勿在此 JSON 内重复填写(同名以独立 flag 为准)
|
|
85
|
+
- `rules` (array<object>?) — 列级筛选规则列表,每一项对应一个具体列的筛选条件 each: { column_index: string, conditions: array<oneOf>, filtered_rows?: array<number> }
|
|
86
|
+
- `filtered_columns` (array<string>?) — 可选
|
|
87
|
+
|
|
88
|
+
## Examples
|
|
89
|
+
|
|
90
|
+
公共四件套:所有 shortcut 顶部排列 `--url` / `--spreadsheet-token` / `--sheet-id` / `--sheet-name`(XOR)。`view_id` 是 10 位随机字符串,每个 sheet 可有多个视图。
|
|
91
|
+
|
|
92
|
+
### `+filter-view-list`
|
|
93
|
+
|
|
94
|
+
```bash
|
|
95
|
+
# 列出某个 sheet 的全部筛选视图
|
|
96
|
+
lark-cli sheets +filter-view-list --url "..." --sheet-id "$SID"
|
|
97
|
+
|
|
98
|
+
# 按 view_id 精确定位
|
|
99
|
+
lark-cli sheets +filter-view-list --url "..." --sheet-id "$SID" --view-id vAbcde1234
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
### `+filter-view-create`
|
|
103
|
+
|
|
104
|
+
`--range`(必填)/ `--view-name`(可选)是独立 flag;`rules` 走 `--properties`:
|
|
105
|
+
|
|
106
|
+
```bash
|
|
107
|
+
lark-cli sheets +filter-view-create --url "..." --sheet-id "$SID" \
|
|
108
|
+
--view-name "活跃用户" --range "A1:F1000" \
|
|
109
|
+
--properties '{"rules":[{"column_index":"C","conditions":[{"type":"number","compare_type":"greaterThan","values":[100]}]}]}'
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
**`conditions[].type` × `compare_type` 取值**(`type` 决定可用的 `compare_type`;两者均必填):
|
|
113
|
+
|
|
114
|
+
| `type` | 可用 `compare_type` | `values` |
|
|
115
|
+
|---|---|---|
|
|
116
|
+
| `text` | `contains` / `doesNotContain` / `beginsWith` / `doesNotBeginWith` / `endsWith` / `doesNotEndWith` / `equals` / `notEquals` | 字符串数组 |
|
|
117
|
+
| `number` | `equal` / `notEqual` / `greaterThan` / `greaterThanOrEqual` / `lessThan` / `lessThanOrEqual` / `between` / `notBetween` | 数值(或数值字符串)数组;`between` / `notBetween` 传两个边界 |
|
|
118
|
+
| `multiValue` | `equal` / `notEqual` | 字符串数组(精确匹配其中任一值) |
|
|
119
|
+
| `color` | `backgroundColor` / `foregroundColor` | 不传 `values`(按单元格颜色筛选) |
|
|
120
|
+
|
|
121
|
+
> ⚠️ `text` 用 `equals` / `notEquals`(**带 s**),`number` / `multiValue` 用 `equal` / `notEqual`(**不带 s**)——别混。完整 schema 跑 `+filter-view-create --print-schema --flag-name properties`。
|
|
122
|
+
|
|
123
|
+
> `--range` **必须覆盖表头行**(如 `A1:F1000`),不能只包含数据行;`--view-name` 重名时服务端自动改名。
|
|
124
|
+
|
|
125
|
+
### `+filter-view-update`
|
|
126
|
+
|
|
127
|
+
> ⚠️ update 是整组覆盖(PUT 语义):`--properties` **必传**,未在请求里出现的 rules / filtered_columns 会被清空。如要保留已有 rules,先 `+filter-view-list` 读回再合并写回。`--range` 变更会丢弃已有筛选规则属预期行为(rules 跟当前 range 绑定)。重复 `+filter-view-create` 不会复用 view_id,会产生新视图。
|
|
128
|
+
|
|
129
|
+
### `+filter-view-delete`
|
|
130
|
+
|
|
131
|
+
> ⚠️ 删除**已存在**的视图不可逆;目标 view_id **不存在**时按幂等成功返回(不报错)。先 `--dry-run` 看 view_id 确认。
|
|
132
|
+
|
|
133
|
+
### Validate / DryRun / Execute 约束
|
|
134
|
+
|
|
135
|
+
- `Validate`:XOR 公共四件套;`+filter-view-create` 校验 `--range` 起始行为表头(第一行);`+filter-view-update` 必须先 `+filter-view-list` 确认 view 存在,`--properties` 必传(整组覆盖式);`+filter-view-delete` 强制 `--yes` 或 `--dry-run`。
|
|
136
|
+
- `DryRun`:输出"将要 POST/PATCH/DELETE 的 view 请求模板",零网络副作用;`--sheet-name` 在 dry-run 输出里生成为 `<resolve:Sheet1>` 占位符。
|
|
137
|
+
- `Execute`:写后不自动回读;如需确认,自行调用 `+filter-view-list --view-id <new>` 比对当前 range + rules。
|