@microi.net/cli 5.8.5 → 5.8.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/.codebuddy-plugin/marketplace.json +2 -2
- package/.codebuddy-plugin/plugin.json +1 -1
- package/.codex-plugin/plugin.json +1 -1
- package/.mcp.json +1 -1
- package/.workbuddy-plugin/marketplace.json +2 -2
- package/.workbuddy-plugin/plugin.json +1 -1
- package/LICENSE +21 -21
- package/README.md +71 -71
- package/assets/build-meta.json +6 -6
- package/assets/feature-matrix.json +138 -138
- package/assets/logo.svg +4 -4
- package/cordis.patch.yml +1 -1
- package/package.json +1 -1
- package/scripts/codex-marketplace.json +20 -20
- package/scripts/mcp-codex-stdio-adapter.js +189 -189
- package/scripts/mcp-trae-windows-launcher.cmd +21 -21
- package/scripts/microi-cli-mcp.js +7 -7
- package/scripts/microi-cli.js +66 -65
- package/scripts/microi-codex-broker.js +450 -450
- package/scripts/microi-codex-router.js +618 -618
- package/scripts/microi-skills.meta.json +384 -384
- package/skills/.microi-skills-version.json +2 -2
- package/skills/.progressive-disclosure-manifest.json +3566 -3566
- package/skills/README.md +287 -287
- package/skills/ai-engine/SKILL.md +269 -265
- package/skills/ai-engine/agents/openai.yaml +4 -4
- package/skills/ai-engine/references/ai-employees.md +48 -48
- package/skills/ai-engine/references/self-hosted-digital-human.md +59 -59
- package/skills/ai-platform-governance/SKILL.md +177 -177
- package/skills/ai-platform-governance/references/progressive-01-/345/212/237/350/203/275/345/274/200/345/205/263.md +190 -190
- package/skills/app-store/SKILL.md +525 -525
- package/skills/app-store/agents/openai.yaml +4 -4
- package/skills/business-blueprint/SKILL.md +193 -193
- package/skills/datasource-engine/SKILL.md +93 -93
- package/skills/datasource-engine/agents/openai.yaml +4 -4
- package/skills/dos-orm/SKILL.md +97 -97
- package/skills/dos-orm/references/api-reference.md +229 -229
- package/skills/email-engine/SKILL.md +81 -81
- package/skills/email-engine/references/v8-email.md +34 -34
- package/skills/job-engine/SKILL.md +176 -176
- package/skills/job-engine/agents/openai.yaml +4 -4
- package/skills/message-notification/SKILL.md +156 -156
- package/skills/message-notification/agents/openai.yaml +5 -5
- package/skills/message-notification/references/contracts.md +102 -102
- package/skills/microi/SKILL.md +14 -14
- package/skills/microi-ai-app-auth.js +652 -652
- package/skills/microi-ai-application/SKILL.md +115 -115
- package/skills/microi-ai-application/agents/openai.yaml +4 -4
- package/skills/microi-ai-application/references/frontend-baseline.md +164 -164
- package/skills/microi-client-frontend/SKILL.md +244 -244
- package/skills/microi-client-frontend/references/progressive-01-3-/345/212/250/346/200/201/346/214/211/351/222/256/347/263/273/347/273/237.md +144 -144
- package/skills/microi-client-frontend/references/progressive-02-8-/350/277/220/350/241/214/346/227/266/351/253/230/351/242/221/345/235/221/345/244/215/347/233/230.md +196 -196
- package/skills/microi-client-frontend/references/progressive-03-vue3-/345/211/215/347/253/257/345/276/256/346/234/215/345/212/241/345/256/277/344/270/273/350/247/204/345/210/231.md +167 -167
- package/skills/microi-codex/SKILL.md +102 -102
- package/skills/microi-codex-installer/SKILL.md +231 -231
- package/skills/microi-codex-installer/agents/openai.yaml +7 -7
- package/skills/microi-datasource-mapping/SKILL.md +122 -122
- package/skills/microi-db-schema/SKILL.md +175 -175
- package/skills/microi-db-schema/agents/openai.yaml +4 -4
- package/skills/microi-db-schema/references/core-tables.md +695 -695
- package/skills/microi-db-schema/references/form-component-options.md +256 -256
- package/skills/microi-db-schema/references/schema-overview.md +202 -202
- package/skills/microi-db-schema/references/schema.md +646 -646
- package/skills/microi-db-schema/references/table-catalog.md +1599 -1599
- package/skills/microi-deployment/SKILL.md +221 -221
- package/skills/microi-deployment/references/deployment-matrix.md +109 -109
- package/skills/microi-docs-coverage/SKILL.md +133 -133
- package/skills/microi-docs-coverage/references/capability-map.md +91 -91
- package/skills/microi-docs-coverage/scripts/audit-doc-skill-coverage.mjs +894 -894
- package/skills/microi-form-engine/SKILL.md +333 -333
- package/skills/microi-form-engine/references/component-catalog.md +218 -218
- package/skills/microi-form-engine/references/data-source-events.md +124 -124
- package/skills/microi-form-layout/SKILL.md +205 -205
- package/skills/microi-form-layout/references/progressive-01-3-/344/270/211/347/247/215/345/210/206/347/273/204/347/232/204/345/255/230/345/202/250/344/270/216/351/205/215/347/275/256.md +235 -235
- package/skills/microi-frontend-sdk/SKILL.md +194 -194
- package/skills/microi-frontend-sdk/references/progressive-01-token-/345/275/223/345/211/215/347/231/273/345/275/225/347/224/250/346/210/267/344/270/216/345/275/223/345/211/215/347/273/210/347/253/257/347/231/273/345/275/225/345/215/217/350/256/256.md +176 -176
- package/skills/microi-left-right-layout/SKILL.md +141 -141
- package/skills/microi-microservice/SKILL.md +326 -324
- package/skills/microi-microservice/references/runtime-delivery.md +278 -278
- package/skills/microi-mobile-app-quality/SKILL.md +185 -185
- package/skills/microi-mobile-app-quality/references/progressive-01-4-/351/207/215/350/246/201/346/214/211/351/222/256/345/277/205/351/241/273/345/270/246/345/233/276/346/240/207.md +213 -213
- package/skills/microi-mobile-app-quality/references/progressive-02-9-/344/270/273/351/242/230/345/210/207/346/215/242/345/277/205/351/241/273/347/234/237/345/256/236/344/270/224/345/205/250/345/261/200/347/224/237/346/225/210.md +128 -128
- package/skills/microi-solution-quotation/SKILL.md +78 -78
- package/skills/microi-solution-quotation/agents/openai.yaml +4 -4
- package/skills/microi-solution-quotation/scripts/build_solution_quote.py +296 -296
- package/skills/microi-sso/SKILL.md +92 -92
- package/skills/microi-sso/references/acceptance.md +49 -49
- package/skills/microi-sso/references/configuration-and-security.md +53 -53
- package/skills/microi-sso/references/inbound.md +53 -53
- package/skills/microi-sso/references/outbound.md +39 -39
- package/skills/microi-system-delivery/SKILL.md +137 -137
- package/skills/microi-system-delivery/references/progressive-01-/346/240/207/345/207/206/345/267/245/344/275/234/346/265/201.md +193 -193
- package/skills/microi-system-delivery/references/progressive-02-/350/207/252/345/212/250/345/214/226/346/265/213/350/257/225/345/277/205/351/241/273/350/246/206/347/233/226/347/232/204/345/235/221.md +217 -217
- package/skills/microi-ui/SKILL.md +192 -192
- package/skills/microi-ui/references/progressive-01-/347/247/273/345/212/250/347/253/257/345/234/272/346/231/257/350/223/235/345/233/276.md +183 -183
- package/skills/microi-uniapp-frontend/SKILL.md +193 -193
- package/skills/microi-uniapp-frontend/references/progressive-01-/347/247/273/345/212/250/347/253/257/345/210/206/347/261/273-/345/217/214/346/240/217/345/210/227/350/241/250/347/213/254/347/253/213/346/273/232/345/212/250.md +225 -225
- package/skills/microi-uniapp-frontend/references/progressive-02-/345/205/263/351/224/256/344/270/232/345/212/241/350/265/204/344/272/247/344/270/215/345/276/227/351/273/230/350/256/244/351/200/211/344/270/255.md +154 -154
- package/skills/microi.v8.js +1921 -1921
- package/skills/module-engine/SKILL.md +255 -255
- package/skills/module-engine/references/module-config.md +204 -204
- package/skills/ocr-engine/SKILL.md +113 -113
- package/skills/ocr-engine/agents/openai.yaml +4 -4
- package/skills/page-engine/SKILL.md +206 -206
- package/skills/page-engine/examples/compact-dashboard.json +1444 -1444
- package/skills/page-engine/references/progressive-01-/346/211/200/346/234/211/347/273/204/344/273/266/347/261/273/345/236/213.md +234 -234
- package/skills/page-engine/references/progressive-02-/347/211/210/346/234/254/345/216/206/345/217/262-/345/271/266/345/217/221/344/277/235/345/255/230/344/270/216/345/233/236/346/273/232.md +60 -60
- package/skills/performance-testing/SKILL.md +221 -221
- package/skills/playwright-e2e/SKILL.md +196 -196
- package/skills/playwright-e2e/references/progressive-01-/345/205/250/350/207/252/345/212/250/347/231/273/345/275/225-/345/205/215/351/252/214/350/257/201/347/240/201-/344/275/206/344/270/215/345/205/215/345/257/206/347/240/201-/345/277/205/350/257/273.md +173 -173
- package/skills/playwright-e2e/references/progressive-02-/346/226/207/345/255/227/345/257/271/346/257/224/345/272/246/344/270/216/345/217/257/350/257/273/346/200/247/350/207/252/345/212/250/345/214/226/346/243/200/346/237/245-/345/277/205/345/201/232.md +183 -183
- package/skills/playwright-e2e/references/progressive-03-microi-helper-/346/250/241/346/235/277.md +221 -221
- package/skills/playwright-e2e/references/progressive-04-ci-/345/273/272/350/256/256.md +115 -115
- package/skills/print-engine/SKILL.md +259 -259
- package/skills/production-readonly-audit/SKILL.md +41 -41
- package/skills/report-engine/SKILL.md +71 -71
- package/skills/report-engine/agents/openai.yaml +4 -4
- package/skills/scripts/optimize-progressive-disclosure.mjs +204 -204
- package/skills/scripts/refresh-progressive-disclosure.mjs +64 -64
- package/skills/scripts/sync-embedded-skills.mjs +46 -46
- package/skills/scripts/validate-progressive-disclosure.mjs +57 -57
- package/skills/search-engine/SKILL.md +75 -75
- package/skills/search-engine/agents/openai.yaml +4 -4
- package/skills/spider-engine/SKILL.md +190 -190
- package/skills/system-observability/SKILL.md +248 -248
- package/skills/system-observability/references/memory-incident-triage.md +77 -77
- package/skills/translate-engine/SKILL.md +140 -140
- package/skills/translate-engine/agents/openai.yaml +4 -4
- package/skills/ui-design/SKILL.md +223 -223
- package/skills/ui-design/assets/pattern-showcase/app.js +54 -54
- package/skills/ui-design/assets/pattern-showcase/index.html +163 -163
- package/skills/ui-design/assets/pattern-showcase/styles.css +311 -311
- package/skills/ui-design/assets/templates/MCI-DESIGN.md +206 -206
- package/skills/ui-design/references/design-pattern-library.md +184 -184
- package/skills/ui-design/references/mci-design-contract.md +163 -163
- package/skills/ui-design/references/motion-and-media.md +78 -78
- package/skills/ui-design/references/product-flow-recipes.md +94 -94
- package/skills/ui-design/references/progressive-01-/351/242/234/350/211/262/344/275/223/347/263/273-css-variables-/346/224/257/346/214/201/344/270/273/351/242/230/345/210/207/346/215/242.md +218 -218
- package/skills/ui-design/references/progressive-02-/345/255/227/344/275/223.md +164 -164
- package/skills/ui-design/references/progressive-03-/345/212/250/346/225/210/350/247/204/350/214/203-/344/270/260/345/257/214/344/275/206/344/270/215/345/215/241.md +235 -235
- package/skills/ui-design/references/progressive-04-/347/273/204/344/273/266/351/243/216/346/240/274/351/200/237/346/237/245.md +152 -152
- package/skills/ui-design/references/progressive-05-/347/247/273/345/212/250/347/253/257/344/270/223/347/224/250/350/247/204/350/214/203.md +238 -238
- package/skills/ui-design/references/progressive-06-/344/270/273/351/242/230/345/210/207/346/215/242/345/256/236/347/216/260.md +194 -194
- package/skills/ui-design/references/progressive-07-/351/200/237/346/237/245-/344/273/216/345/244/264/346/220/255/345/273/272/344/270/200/344/270/252/347/247/273/345/212/250/347/253/257/351/241/265/351/235/242.md +207 -207
- package/skills/ui-design/references/progressive-08-/350/241/250/345/215/225/345/210/206/347/273/204/350/247/204/350/214/203-tabs-vs-collapsegroup-/345/274/272/345/210/266.md +142 -142
- package/skills/uniapp-mall-assets/SKILL.md +176 -176
- package/skills/unity-integration/SKILL.md +171 -171
- package/skills/unity-integration/agents/openai.yaml +4 -4
- package/skills/unity-integration/references/ai-app-delivery.md +119 -119
- package/skills/unity-integration/references/sdk-api.md +82 -82
- package/skills/unity-integration/references/toolbox-migration.md +66 -66
- package/skills/unity-integration/references/webgl-hosting.md +57 -57
- package/skills/v8-api-config/SKILL.md +388 -388
- package/skills/v8-cache-pattern/SKILL.md +312 -312
- package/skills/v8-crud-api/SKILL.md +178 -178
- package/skills/v8-crud-api/references/progressive-01-/346/237/245/350/257/242/345/210/227/350/241/250-/345/210/206/351/241/265.md +226 -226
- package/skills/v8-crud-api/references/progressive-02-where-/346/235/241/344/273/266/350/257/255/346/263/225/351/200/237/346/237/245.md +49 -49
- package/skills/v8-debugging/SKILL.md +284 -284
- package/skills/v8-explorer-tree/SKILL.md +228 -228
- package/skills/v8-export-import/SKILL.md +219 -219
- package/skills/v8-export-import/references/progressive-01-excellayout-/351/253/230/347/272/247/350/207/252/347/224/261/345/270/203/345/261/200.md +211 -211
- package/skills/v8-export-import/references/progressive-02-powerpoint-/345/257/274/345/207/272.md +202 -202
- package/skills/v8-export-import/references/progressive-03-/345/256/211/345/205/250-/346/200/247/350/203/275/346/263/250/346/204/217.md +42 -42
- package/skills/v8-file-upload/SKILL.md +284 -284
- package/skills/v8-file-upload/references/progressive-01-/345/205/254/346/234/211/346/241/266-vs-/347/247/201/346/234/211/346/241/266.md +263 -263
- package/skills/v8-file-upload/references/progressive-02-office-/346/226/207/344/273/266/345/234/250/347/272/277/347/274/226/350/276/221/347/211/210/346/234/254/345/217/267/350/247/204/345/210/231.md +161 -161
- package/skills/v8-formengine-http/SKILL.md +238 -238
- package/skills/v8-frontend-events/SKILL.md +180 -180
- package/skills/v8-frontend-events/references/bluetooth-print-api.md +135 -135
- package/skills/v8-frontend-events/references/bluetooth-print.md +258 -258
- package/skills/v8-frontend-events/references/progressive-01-/345/210/227/350/241/250/344/272/213/344/273/266.md +219 -219
- package/skills/v8-http-integration/SKILL.md +182 -182
- package/skills/v8-http-integration/references/progressive-01-get-/350/257/267/346/261/202.md +220 -220
- package/skills/v8-http-integration/references/progressive-02-/351/224/231/350/257/257/345/244/204/347/220/206/346/250/241/345/274/217.md +44 -44
- package/skills/v8-image-processing/SKILL.md +190 -190
- package/skills/v8-image-processing/agents/openai.yaml +4 -4
- package/skills/v8-image-processing/references/api-reference.md +623 -623
- package/skills/v8-menu-buttons/SKILL.md +186 -186
- package/skills/v8-menu-buttons/references/progressive-01-2-/346/214/211/351/222/256/345/257/271/350/261/241-schema.md +222 -222
- package/skills/v8-menu-buttons/references/progressive-02-8-/346/250/241/345/274/217-f-/345/220/216/345/217/260/344/273/273/345/212/241/346/214/211/351/222/256-/351/225/277/344/273/273/345/212/241.md +228 -228
- package/skills/v8-menu-buttons/references/progressive-03-10-/345/217/215/346/250/241/345/274/217-/351/201/277/345/205/215.md +104 -104
- package/skills/v8-mongodb/SKILL.md +200 -200
- package/skills/v8-mq-mqtt/SKILL.md +176 -176
- package/skills/v8-mq-mqtt/references/mqtt-production.md +342 -342
- package/skills/v8-mq-mqtt/references/progressive-01-v8-mqtt-iot-/347/211/251/350/201/224/347/275/221.md +181 -181
- package/skills/v8-mq-mqtt/scripts/check-mqtt-skill-coverage.mjs +203 -203
- package/skills/v8-saas-multi-tenant/SKILL.md +305 -305
- package/skills/v8-security/SKILL.md +210 -210
- package/skills/v8-security/references/progressive-01-2-/346/235/203/351/231/220/346/240/241/351/252/214.md +200 -200
- package/skills/v8-security/references/progressive-02-7-/346/227/245/345/277/227/350/256/260/345/275/225.md +160 -160
- package/skills/v8-sql-query/SKILL.md +302 -302
- package/skills/v8-table-event/SKILL.md +176 -176
- package/skills/v8-table-event/references/progressive-01-informv8-js-/350/241/250/345/215/225/346/211/223/345/274/200/344/272/213/344/273/266.md +216 -216
- package/skills/v8-table-event/references/progressive-02-/345/211/215/347/253/257/344/272/213/344/273/266/345/220/215-v8-eventname-/345/217/257/350/203/275/347/232/204/345/200/274.md +46 -46
- package/skills/v8-tcp-integration/SKILL.md +147 -147
- package/skills/v8-tcp-integration/agents/openai.yaml +4 -4
- package/skills/v8-template-engine/SKILL.md +167 -167
- package/skills/v8-utilities/SKILL.md +104 -104
- package/skills/v8-utilities/references/client-api-index.md +143 -143
- package/skills/v8-utilities/references/platform-http-routes.md +83 -83
- package/skills/v8-utilities/references/server-api-index.md +188 -188
- package/skills/v8-workflow/SKILL.md +252 -252
- package/skills/v8-workflow/references/progressive-01-/350/212/202/347/202/271/345/274/200/345/247/213-v8-/344/272/213/344/273/266.md +180 -180
- package/skills/v8-workflow/references/workflow-configuration.md +49 -49
- package/skills/vision-engine/SKILL.md +160 -160
- package/skills/vision-engine/agents/openai.yaml +4 -4
- package/skills/vision-engine/references/architecture-and-acceptance.md +194 -194
- package/skills/workspace-conventions/SKILL.md +273 -273
- package/skills/workspace-conventions/references/progressive-01-/347/211/210/346/234/254/346/233/264/346/226/260/346/227/245/345/277/227/344/277/235/346/212/244/350/247/204/345/210/231-/345/274/272/345/210/266.md +209 -209
- package/skills/workspace-conventions/references/progressive-02-microi-net-api-/346/234/254/345/234/260/345/220/257/345/212/250/347/272/246/345/256/232.md +217 -217
- package/skills/workspace-conventions/references/progressive-03-cli-/344/270/216-ide-/346/217/222/344/273/266/351/224/231/347/211/210/345/205/261/345/255/230/347/272/246/345/256/232.md +27 -27
|
@@ -1,219 +1,219 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: v8-export-import
|
|
3
|
-
description: Microi V8 Office 导入导出指南。用于使用 V8.Office 导出单/多 Sheet Excel、Word、PowerPoint,解析 Excel,自定义表头/图片、文件响应和批量导入校验。
|
|
4
|
-
---
|
|
5
|
-
|
|
6
|
-
> **Microi吾码基础规范(强制):** 任何 AI 模型与宿主每次新建或接续吾码任务,先完整读取 `../workspace-conventions/SKILL.md`,必须执行版本播报、`@microi.net/cli` 后台自动升级、Skills/MCP 同步和进度播报。安装与诊断读取 `../microi-codex-installer/SKILL.md`;更新失败延后重试,不阻断当前工作。
|
|
7
|
-
|
|
8
|
-
# Microi V8 Office 导入导出
|
|
9
|
-
|
|
10
|
-
你正在为 Microi 吾码平台编写自定义 Excel、Word、PowerPoint 导入/导出代码。平台通过 `V8.Office` 提供 Office 处理能力,源码在 `Microi.Office` 插件中。
|
|
11
|
-
|
|
12
|
-
文档维护必须优先更新既有后端 V8 主文档 `microi.doc/docs/doc/v8-engine/v8-server.md`,再按需补充已有专题页;不得为同一组 `V8.Office` API 新建重复 Markdown 页面或文档路由。只维护 `microi.doc/docs/doc/` 中文文档,`docs/en/` 由官网统一翻译生成,不手工同步英文版。
|
|
13
|
-
|
|
14
|
-
<!-- microi-progressive:begin -->
|
|
15
|
-
<!-- microi-progressive:chunk id=v8-export-import-000 sha256=ea1d8edd1c2da7c7aeea5aa415d7b11d64c6243752b48b50667f3ba80be76e5b -->
|
|
16
|
-
## 核心 API
|
|
17
|
-
|
|
18
|
-
标准表格导出使用 `.xlsx` 文件名及对应 OpenXML MIME。历史平台生成的“XLSX 内容但扩展名为 .xls”仅在 Excel 导入入口兼容:必须验证 OpenXML 工作簿包结构,再由 NPOI 解析;真正的 `.xls` 继续支持。禁止取消文件签名检查或把此兼容扩张到 OnlyOffice 回源、任意 ZIP、HTML/可执行文件。
|
|
19
|
-
|
|
20
|
-
| 方法 | 说明 |
|
|
21
|
-
|------|------|
|
|
22
|
-
| `V8.Office.ExportExcel({...})` | 自定义导出 `.xlsx`;支持标准表格、高级自由布局、单/多 Sheet、图片、公式、合并、边框、打印和行分组 |
|
|
23
|
-
| `V8.Office.ExcelToList({...})` | 解析上传的 Excel 文件为 JSON 数组 |
|
|
24
|
-
| `V8.Office.ExportWordText({...})` | 兼容旧版纯文本 Word 导出 |
|
|
25
|
-
| `V8.Office.ExportWord({...})` | 导出 `.docx`;支持段落、章节、表格、图片、页眉页脚和页码 |
|
|
26
|
-
| `V8.Office.ExportPowerPoint({...})` | 导出 `.pptx`;支持多页、文本、项目符号、表格、图片、主题和页码 |
|
|
27
|
-
| `V8.Office.SendEmail({...})` | 发送邮件(HTML 内容) |
|
|
28
|
-
|
|
29
|
-
<!-- /microi-progressive:chunk -->
|
|
30
|
-
<!-- microi-progressive:chunk id=v8-export-import-001 sha256=71c2d539b2dbc034927410e093775be9251b5883e2551a77d87d4e6121eed73a -->
|
|
31
|
-
## 自定义导出 Excel(接口引擎)
|
|
32
|
-
|
|
33
|
-
平台默认导出仅支持表格已展示的字段。如需自定义(如列重排、合并、计算列、图片),用接口引擎替换【导出接口】。
|
|
34
|
-
|
|
35
|
-
```javascript
|
|
36
|
-
// 1. 查询数据(动态条件)
|
|
37
|
-
var dataResult = V8.FormEngine.GetTableData('diy_blog_test', {
|
|
38
|
-
_Where: [['Xingming', 'Like', V8.Param.keyword || '']]
|
|
39
|
-
});
|
|
40
|
-
if (dataResult.Code !== 1) return dataResult;
|
|
41
|
-
|
|
42
|
-
// 2. 定义动态表头
|
|
43
|
-
var header = [
|
|
44
|
-
{
|
|
45
|
-
Name: 'Biaoti', Label: '标题', Component: 'Text',
|
|
46
|
-
Width: 30,
|
|
47
|
-
HeaderStyle: { BackgroundColor: '17365D', FontColor: 'FFFFFF' },
|
|
48
|
-
Style: { WrapText: true }
|
|
49
|
-
},
|
|
50
|
-
{ Name: 'Xingming', Label: '姓名', Component: 'Text', Width: 16 },
|
|
51
|
-
{
|
|
52
|
-
Name: 'ImgUpload57',
|
|
53
|
-
Label: '公有单图',
|
|
54
|
-
Component: 'ImgUpload',
|
|
55
|
-
Config: '{"ImgUpload":{"Multiple":0,"Limit":0}}'
|
|
56
|
-
},
|
|
57
|
-
{
|
|
58
|
-
Name: 'ImgUpload64',
|
|
59
|
-
Label: '公有多图',
|
|
60
|
-
Component: 'ImgUpload',
|
|
61
|
-
Config: '{"ImgUpload":{"Multiple":1,"Limit":0}}' // Multiple=1 自动多图分列
|
|
62
|
-
}
|
|
63
|
-
];
|
|
64
|
-
|
|
65
|
-
// 3. 调用导出引擎
|
|
66
|
-
var excelResult = V8.Office.ExportExcel({
|
|
67
|
-
OsClient: V8.OsClient,
|
|
68
|
-
ExcelData: dataResult.Data,
|
|
69
|
-
ExcelHeader: header,
|
|
70
|
-
ExcelOptions: {
|
|
71
|
-
SheetName: '业务数据',
|
|
72
|
-
DefaultColumnWidth: 14,
|
|
73
|
-
HeaderRowHeight: 30,
|
|
74
|
-
DataRowHeight: 24,
|
|
75
|
-
FreezeHeader: true,
|
|
76
|
-
AutoFilter: true,
|
|
77
|
-
HeaderStyle: {
|
|
78
|
-
FontName: 'Microsoft YaHei', FontSize: 11, Bold: true,
|
|
79
|
-
HorizontalAlignment: 'Center', VerticalAlignment: 'Center'
|
|
80
|
-
},
|
|
81
|
-
CellStyle: { FontName: 'Microsoft YaHei', FontSize: 10 }
|
|
82
|
-
}
|
|
83
|
-
});
|
|
84
|
-
if (excelResult.Code !== 1) return excelResult;
|
|
85
|
-
|
|
86
|
-
// 4. 返回文件流(接口引擎必须开启【响应文件】配置)
|
|
87
|
-
return {
|
|
88
|
-
Code: 1,
|
|
89
|
-
Data: {
|
|
90
|
-
FileName: '导出_' + DateNow('yyyyMMdd_HHmmss') + '.xlsx',
|
|
91
|
-
ContentType: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
|
|
92
|
-
FileByteBase64: System.Convert.ToBase64String(excelResult.Data)
|
|
93
|
-
}
|
|
94
|
-
};
|
|
95
|
-
```
|
|
96
|
-
|
|
97
|
-
### Excel 尺寸与样式参数
|
|
98
|
-
|
|
99
|
-
`ExcelOptions` 是工作表级默认配置:
|
|
100
|
-
|
|
101
|
-
| 参数 | 说明 |
|
|
102
|
-
|------|------|
|
|
103
|
-
| `SheetName` | 单 Sheet 名称 |
|
|
104
|
-
| `DefaultColumnWidth` | 默认列宽,单位为 Excel 字符宽度,范围 `0.1~255` |
|
|
105
|
-
| `DefaultRowHeight` | 默认行高,单位为磅(pt),最大 `409.5` |
|
|
106
|
-
| `HeaderRowHeight` / `DataRowHeight` | 表头/数据行高,单位为磅(pt),最大 `409.5` |
|
|
107
|
-
| `FreezeHeader` / `FreezeRows` / `FreezeColumns` | 冻结首行、顶部指定行数、左侧指定列数;`FreezeRows` 优先于 `FreezeHeader` |
|
|
108
|
-
| `AutoFilter` / `AutoFilterRange` | 启用自动筛选或指定筛选区域;传 `AutoFilterRange` 会自动启用 |
|
|
109
|
-
| `AutoSizeColumns` | 自动计算全部列宽;大数据量优先显式设置 `Width` |
|
|
110
|
-
| `ShowGridLines` | 是否显示工作表网格线 |
|
|
111
|
-
| `Zoom` | 工作表缩放比例 `10~400` |
|
|
112
|
-
| `PrintOrientation` / `PaperSize` | 打印方向及 A3/A4/A5/Letter/Legal 纸张 |
|
|
113
|
-
| `FitToWidth` / `FitToHeight` / `PrintArea` | 缩放打印页数与 A1 打印区域 |
|
|
114
|
-
| `MarginTop/Right/Bottom/Left` | 打印页边距,单位为英寸 |
|
|
115
|
-
| `CenterHorizontally/Vertically` | 打印水平/垂直居中 |
|
|
116
|
-
| `HeaderText` / `FooterText` / `ShowPageNumber` | 页眉、页脚和页码 |
|
|
117
|
-
| `HeaderStyle` / `CellStyle` | 全局表头/数据单元格样式 |
|
|
118
|
-
|
|
119
|
-
`ExcelHeader` 除 `Name/Label/Component/Type/Config` 外,还支持:
|
|
120
|
-
|
|
121
|
-
| 参数 | 说明 |
|
|
122
|
-
|------|------|
|
|
123
|
-
| `Width`(兼容 `ColumnWidth`) | 固定列宽,单位为 Excel 字符宽度 |
|
|
124
|
-
| `AutoSize`、`MinWidth`、`MaxWidth` | 单列自动宽度及上下限 |
|
|
125
|
-
| `Hidden` | 隐藏列但保留数据 |
|
|
126
|
-
| `HeaderHeight` / `RowHeight` | 表头/数据行高候选值,同一 Sheet 取最大值 |
|
|
127
|
-
| `NumberFormat` | 数字或日期格式,如 `#,##0.00`、`0.00%`、`yyyy-mm-dd` |
|
|
128
|
-
| `HeaderStyle` / `Style` | 当前列表头/数据样式,覆盖全局同名属性 |
|
|
129
|
-
|
|
130
|
-
样式对象支持:`FontName/FontSize/FontColor/Bold/Italic/Underline/BackgroundColor/HorizontalAlignment/VerticalAlignment/WrapText/ShrinkToFit/Rotation/NumberFormat/BorderStyle/BorderColor`。边框还可用 `BorderTop/Right/Bottom/LeftStyle` 和对应 `Color` 分别控制四条边;类型可用 `Thin/Medium/Dashed/Dotted/Double/DashDot` 等。颜色使用 `RRGGBB` 或 `#RRGGBB`。对数值字段仍应传 `Type:'int'` 或 `Type:'decimal'`,否则 `NumberFormat` 只改变显示格式,不会把文本强制转换成数值。
|
|
131
|
-
|
|
132
|
-
优先级:列级样式覆盖全局样式;`Width` 覆盖 `DefaultColumnWidth`;开启 `AutoSize` 后以自动宽度为准,再应用 `MinWidth/MaxWidth`。不传这些新参数时保持旧版导出行为。
|
|
133
|
-
|
|
134
|
-
<!-- /microi-progressive:chunk -->
|
|
135
|
-
<!-- microi-progressive:chunk id=v8-export-import-002 sha256=d26555b9a045d6a5920cf3dfd69cd20e2351aa3bab9c8499d3a5d79f58ffa6cd -->
|
|
136
|
-
## 文件响应与前端调用约定
|
|
137
|
-
|
|
138
|
-
- 接口引擎必须开启【响应文件】,并返回正确的 `FileName`、`ContentType`、`FileByteBase64`。
|
|
139
|
-
- 后台菜单的【导出接口替换】默认仍是登录态调用,不要为了消除“请求未携带 Token”而开启【允许匿名调用】。平台会把当前 DiyToken 放入 `Authorization: Bearer ...` 请求头;接口引擎保持【允许匿名调用】关闭即可使用 `V8.CurrentUser` 和既有权限边界。
|
|
140
|
-
- 自定义导出无论收到业务错误、无法解析的文件响应还是网络异常,都必须结束按钮 Loading;前端应 `await` 导出 Promise 并在 `finally` 恢复状态,不能只依赖成功分支回调。
|
|
141
|
-
- `V8.Office.ExportExcel/ExportWord/ExportPowerPoint` 返回的是 `DosResult<byte[]>`;先判断 `Code`,再对 `Data` 调用 `System.Convert.ToBase64String`。
|
|
142
|
-
- 前端调用 Office 导出接口时,新代码优先使用 `V8.Http.GetResponse/PostResponse`;`V8.Post/V8.Get` 仅用于兼容历史代码,不再作为新代码首选。
|
|
143
|
-
|
|
144
|
-
### 表头基础配置项
|
|
145
|
-
|
|
146
|
-
| 字段 | 说明 |
|
|
147
|
-
|------|------|
|
|
148
|
-
| `Name` | 数据字段名(对应 `ExcelData[i].Name`) |
|
|
149
|
-
| `Label` | Excel 列标题 |
|
|
150
|
-
| `Component` | 组件类型,决定渲染方式:`Text`/`Select`/`Switch`/`ImgUpload`/`DateTime`/`NumberText` 等 |
|
|
151
|
-
| `Config` | 组件配置 JSON 字符串。`ImgUpload.Multiple=1` 时自动生成多列并合并;`Limit=0` 公有桶,`1` 私有桶(需临时URL) |
|
|
152
|
-
| `Width/AutoSize/MinWidth/MaxWidth/Hidden` | 列宽、自动宽度限制和隐藏列 |
|
|
153
|
-
| `HeaderHeight/RowHeight` | 表头与数据行高(磅)候选值 |
|
|
154
|
-
| `NumberFormat/HeaderStyle/Style` | 数字格式与列级样式 |
|
|
155
|
-
|
|
156
|
-
<!-- /microi-progressive:chunk -->
|
|
157
|
-
<!-- microi-progressive:chunk id=v8-export-import-003 sha256=9adee471586dce589c6cf5dcaa32820ad05025c670ca885801cfa4711c584cdb -->
|
|
158
|
-
## 解析上传的 Excel / CSV(导入)
|
|
159
|
-
|
|
160
|
-
```javascript
|
|
161
|
-
// 接口引擎接收 V8.FilesByteBase64
|
|
162
|
-
var filesByteBase64 = V8.FilesByteBase64;
|
|
163
|
-
if (!filesByteBase64) return { Code: 0, Msg: '请上传 Excel 文件' };
|
|
164
|
-
|
|
165
|
-
var base64 = Object.values(filesByteBase64)[0];
|
|
166
|
-
|
|
167
|
-
// 可直接解析旧的首行表头模板
|
|
168
|
-
var parsed = V8.Office.ExcelToList({
|
|
169
|
-
FileByteBase64: base64,
|
|
170
|
-
SheetIndex: 0
|
|
171
|
-
});
|
|
172
|
-
if (parsed.Code !== 1) return parsed;
|
|
173
|
-
|
|
174
|
-
var dataList = parsed.Data; // [{ 列标题: 值, ... }, ...]
|
|
175
|
-
return { Code: 1, Data: dataList, DataCount: dataList.length };
|
|
176
|
-
```
|
|
177
|
-
|
|
178
|
-
`ExcelToList` 的增强参数为 `FileType/FileName/Encoding/Delimiter/HeaderStartRow/HeaderEndRow/DataStartRow/DataEndRow/Columns/MaxDataRows/MaxColumns`。CSV 传 `FileType:'csv'` 或 `.csv` 文件名,编码和分隔符通常省略,由服务端自动识别 UTF-8/GBK 与逗号、制表符、分号、竖线;结果通过 `DataAppend.Encoding/Delimiter` 回传实际识别值。除 `SheetIndex` 和 `Columns[].ColumnIndex` 从 `0` 开始外,行号都从 `1` 开始;传增强范围后每行带 `_ExcelRow`。参数全省略时继续兼容“首行表头、第二行开始数据”。
|
|
179
|
-
|
|
180
|
-
### 固定版式模板与后台自定义导入
|
|
181
|
-
|
|
182
|
-
通用【导入】和 `V8.OpenImportDialog` 共用智能导入弹层:默认宽度 `80%`,支持 `.xls/.xlsx/.csv`,选择文件后自动识别工作表、单行/多级合并表头、首条与末条数据行和字段映射;先按每页 `15` 条预览,用户确认后才写入。数据预览必须独立保留全部源列、源行,不能因为零字段匹配而显示空白;未匹配列头以红色和悬停原因标记。低可信度时必须允许用户人工指定表头/数据起止行和逐列映射。模板顶部图片、标题、说明文字以及 A 列为空的数据行都不能破坏识别。
|
|
183
|
-
|
|
184
|
-
【列映射】后的【原始工作簿】页签必须不依赖解析可信度,直接显示完整工作簿/CSV,包括所有工作表、合并表头、图片、说明、样式和原始数据;该视图只用于核对,不能绕过目标字段映射和服务端校验。
|
|
185
|
-
|
|
186
|
-
`.xlsx` 原始预览必须兼容 OpenPyXL 等生成器使用等价 DrawingML 默认命名空间的锚定图片。只允许在内存中的预览副本规范化 `xdr` 命名空间和关系目标;正式上传、接口引擎和服务端复核始终使用未经改写的原始文件。
|
|
187
|
-
|
|
188
|
-
- 页面 V8 可只声明 `ApiEngineKey`;`Workbook.Cells/Columns/HeaderStartRow/HeaderEndRow/DataStartRow/DataEndRow/KeyField` 均为模板提示或固定约束,不传时自动识别。不得拼上传 DOM、传完整工作簿 Base64 或自行轮询。
|
|
189
|
-
- 弹层必须让用户在 `RollbackAll`(默认,任一错误整批回滚)和 `ContinueOnError`(逐行提交/跳过错误行)之间明确选择;未传时保持旧版 `RollbackAll`。最终值同时写入 `_ImportErrorPolicy` 与 `_ImportMetaJson.ErrorPolicy`,不能由服务端静默改成另一策略。
|
|
190
|
-
- 当前表的唯一配置必须在上传前可读展示:每个 `Unique=1 + Config.Unique.Type=Alone` 字段各自是一条规则,全部 `Type=All` 字段共同组成一条组合规则;无唯一规则时明确警告“只能新增,重复导入可能产生重复数据”。
|
|
191
|
-
- 标准导入的服务端必须从权威 `diy_field` 重新计算唯一规则,不能信任前端快照。任一完整规则命中同一 Id 则按 Id 修改,均未命中则新增;不同规则命中不同 Id、或一条规则命中多条脏数据时按行报冲突,禁止任意选记录或按宽泛条件更新多行。
|
|
192
|
-
- `V8.OpenImportDialog` 后台接口引擎从 `V8.Param._ImportRowsJson`、`_ImportMetaJson`、`_ImportErrorPolicy` 和 `_ImportUniqueRulesJson` 取值;必须重做模板、权限、字段、唯一性和状态校验。v2.2 元数据中的 `UniqueRules` 只用于说明和诊断。
|
|
193
|
-
- 菜单【导入接口替换】仍接收原始文件 `V8.FilesByteBase64`,并接收上述策略/规则元数据。接口引擎必须把元数据里的 `FileType/SheetIndex/HeaderStartRow/HeaderEndRow/DataStartRow/DataEndRow/Columns` 传给 `V8.Office.ExcelToList`,由服务端按同一范围重读原文件;CSV 应省略固定 `Encoding/Delimiter` 让服务端独立识别,再用 `DataAppend` 与元数据交叉复核。不能只信任浏览器预览,也不能固定读取第一行。
|
|
194
|
-
- `RollbackAll` 在首个行错误时返回 `Code != 1`,依靠平台事务整体回滚;`ContinueOnError` 捕获并记录行错误、继续下一行,最后返回 `Code=1` 提交成功行。两种模式都禁止手动 Commit/Rollback;若底层异常使事务不可继续,必须先做整批预校验或使用平台允许的独立幂等行操作。
|
|
195
|
-
- 结果与进度必须分别统计 `Added/Updated/Failed/Errors`;整批回滚后成功、新增、修改数必须归零,不能把已回滚行计作成功。
|
|
196
|
-
- 用 `V8.Method.UpdateBackgroundTask({Current,Total,Msg,Log})` 上报真实校验/写入工作量;未知总量保持不确定进度,不伪造百分比。
|
|
197
|
-
- 业务幂等键使用后台任务 Id 或明确的导入操作 Id;重试前回读批次,避免重复写入。
|
|
198
|
-
- 平台审计字段(`Id/CreateTime/UpdateTime/UserId/UserName/IsDeleted/OsClient/TenantId/TenantName`)由导入事务统一生成或由 `_CurrentUser` 归属填充,不参与写入。导出的表格天然包含这些列,服务端必须把映射到的保护字段从 INSERT/UPDATE 列清单里剔除,否则会出现 `Column 'CreateTime' specified twice`,或把旧记录的创建时间、租户归属改成 Excel 里的快照值。导入钩子(ImportV8)返回的 `FixedValues` 也不能回填这些字段,命中时按未授权字段拒绝。
|
|
199
|
-
- 写回策略是“新增保护、更新不覆盖”:同一批导入既能安全新增,也不会改写既有记录的平台审计字段;需要保留 Excel 里的原始时间时,另建业务时间字段,不要复用 `CreateTime`。
|
|
200
|
-
|
|
201
|
-
完整前端参数见 `microi.doc/docs/doc/v8-engine/v8-client.md#v8openimportdialog`。
|
|
202
|
-
|
|
203
|
-
<!-- /microi-progressive:chunk -->
|
|
204
|
-
## 详细参考路由(渐进披露)
|
|
205
|
-
|
|
206
|
-
仅在当前任务涉及对应主题时读取;下列文件合计保留了原 SKILL.md 的全部详细知识。
|
|
207
|
-
|
|
208
|
-
- [references/progressive-01-excellayout-高级自由布局.md](references/progressive-01-excellayout-高级自由布局.md):`ExcelLayout` 高级自由布局;多 Sheet Excel 导出;Word 导出
|
|
209
|
-
- [references/progressive-02-powerpoint-导出.md](references/progressive-02-powerpoint-导出.md):PowerPoint 导出;完整导入模式(含进度跟踪);接收并下载文件(HTTP 链接转 Excel);子表导入自动关联主表
|
|
210
|
-
- [references/progressive-03-安全-性能注意.md](references/progressive-03-安全-性能注意.md):安全 / 性能注意
|
|
211
|
-
<!-- microi-progressive:end -->
|
|
212
|
-
|
|
213
|
-
## 复盘:通用导入需要事务内整批业务校验
|
|
214
|
-
|
|
215
|
-
- 触发场景:业务要求按整批汇总校验额度,并在并发导入时锁定稳定的主记录;完全替换导入接口会重复实现文件解析、字段映射、权限、进度和错误报告。
|
|
216
|
-
- 通用规则:模块 `ImportV8` 显式配置为 `ApiEngine:<ApiEngineKey>` 时,平台标准导入器在 `RollbackAll` 的同一数据库事务内,把服务端重新解析并应用固定父表值后的全部行传给接口引擎;接口只负责校验和加锁,不自行写入或提交事务。平台通过 `V8.Param.Capabilities.PreflightFixedValuesV1=true` 声明支持安全回填;接口确认该能力后,若能从权威数据唯一推导出本批共同缺失的业务字段,可在成功结果的 `Data.FixedValues` 返回字段名到非空标量值的对象。平台只接受当前表可导入业务字段,拒绝平台字段、未知字段以及覆盖既有父表固定上下文,并把通过校验的值应用到本批全部写入。其它历史 `ImportV8` 文本保持原兼容行为。
|
|
217
|
-
- 父子表边界:固定父记录外键优先于 Excel 同名列;接口引擎仍须核对目标表、项目/主记录存在性、业务状态和额度。需要整批钩子的模块禁止 `ContinueOnError`。
|
|
218
|
-
- 重复提交:客户端每次重新选择文件生成新的 `_ImportIdempotencyKey`,同一 HTTP 重试沿用该键;服务端按租户、表、菜单、用户和请求键保存状态,`Pending/Running/Succeeded` 均不得重复创建写入任务。该机制不等同于“相同文件作为新请求再次上传”的内容判重。
|
|
219
|
-
- 自动化检查:至少覆盖同批汇总超量、稳定行锁先于累计回查、整批回滚、父外键不可被 Excel 覆盖、同一请求重试只写一次,以及错误中包含行号和业务上限明细。
|
|
1
|
+
---
|
|
2
|
+
name: v8-export-import
|
|
3
|
+
description: Microi V8 Office 导入导出指南。用于使用 V8.Office 导出单/多 Sheet Excel、Word、PowerPoint,解析 Excel,自定义表头/图片、文件响应和批量导入校验。
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
> **Microi吾码基础规范(强制):** 任何 AI 模型与宿主每次新建或接续吾码任务,先完整读取 `../workspace-conventions/SKILL.md`,必须执行版本播报、`@microi.net/cli` 后台自动升级、Skills/MCP 同步和进度播报。安装与诊断读取 `../microi-codex-installer/SKILL.md`;更新失败延后重试,不阻断当前工作。
|
|
7
|
+
|
|
8
|
+
# Microi V8 Office 导入导出
|
|
9
|
+
|
|
10
|
+
你正在为 Microi 吾码平台编写自定义 Excel、Word、PowerPoint 导入/导出代码。平台通过 `V8.Office` 提供 Office 处理能力,源码在 `Microi.Office` 插件中。
|
|
11
|
+
|
|
12
|
+
文档维护必须优先更新既有后端 V8 主文档 `microi.doc/docs/doc/v8-engine/v8-server.md`,再按需补充已有专题页;不得为同一组 `V8.Office` API 新建重复 Markdown 页面或文档路由。只维护 `microi.doc/docs/doc/` 中文文档,`docs/en/` 由官网统一翻译生成,不手工同步英文版。
|
|
13
|
+
|
|
14
|
+
<!-- microi-progressive:begin -->
|
|
15
|
+
<!-- microi-progressive:chunk id=v8-export-import-000 sha256=ea1d8edd1c2da7c7aeea5aa415d7b11d64c6243752b48b50667f3ba80be76e5b -->
|
|
16
|
+
## 核心 API
|
|
17
|
+
|
|
18
|
+
标准表格导出使用 `.xlsx` 文件名及对应 OpenXML MIME。历史平台生成的“XLSX 内容但扩展名为 .xls”仅在 Excel 导入入口兼容:必须验证 OpenXML 工作簿包结构,再由 NPOI 解析;真正的 `.xls` 继续支持。禁止取消文件签名检查或把此兼容扩张到 OnlyOffice 回源、任意 ZIP、HTML/可执行文件。
|
|
19
|
+
|
|
20
|
+
| 方法 | 说明 |
|
|
21
|
+
|------|------|
|
|
22
|
+
| `V8.Office.ExportExcel({...})` | 自定义导出 `.xlsx`;支持标准表格、高级自由布局、单/多 Sheet、图片、公式、合并、边框、打印和行分组 |
|
|
23
|
+
| `V8.Office.ExcelToList({...})` | 解析上传的 Excel 文件为 JSON 数组 |
|
|
24
|
+
| `V8.Office.ExportWordText({...})` | 兼容旧版纯文本 Word 导出 |
|
|
25
|
+
| `V8.Office.ExportWord({...})` | 导出 `.docx`;支持段落、章节、表格、图片、页眉页脚和页码 |
|
|
26
|
+
| `V8.Office.ExportPowerPoint({...})` | 导出 `.pptx`;支持多页、文本、项目符号、表格、图片、主题和页码 |
|
|
27
|
+
| `V8.Office.SendEmail({...})` | 发送邮件(HTML 内容) |
|
|
28
|
+
|
|
29
|
+
<!-- /microi-progressive:chunk -->
|
|
30
|
+
<!-- microi-progressive:chunk id=v8-export-import-001 sha256=71c2d539b2dbc034927410e093775be9251b5883e2551a77d87d4e6121eed73a -->
|
|
31
|
+
## 自定义导出 Excel(接口引擎)
|
|
32
|
+
|
|
33
|
+
平台默认导出仅支持表格已展示的字段。如需自定义(如列重排、合并、计算列、图片),用接口引擎替换【导出接口】。
|
|
34
|
+
|
|
35
|
+
```javascript
|
|
36
|
+
// 1. 查询数据(动态条件)
|
|
37
|
+
var dataResult = V8.FormEngine.GetTableData('diy_blog_test', {
|
|
38
|
+
_Where: [['Xingming', 'Like', V8.Param.keyword || '']]
|
|
39
|
+
});
|
|
40
|
+
if (dataResult.Code !== 1) return dataResult;
|
|
41
|
+
|
|
42
|
+
// 2. 定义动态表头
|
|
43
|
+
var header = [
|
|
44
|
+
{
|
|
45
|
+
Name: 'Biaoti', Label: '标题', Component: 'Text',
|
|
46
|
+
Width: 30,
|
|
47
|
+
HeaderStyle: { BackgroundColor: '17365D', FontColor: 'FFFFFF' },
|
|
48
|
+
Style: { WrapText: true }
|
|
49
|
+
},
|
|
50
|
+
{ Name: 'Xingming', Label: '姓名', Component: 'Text', Width: 16 },
|
|
51
|
+
{
|
|
52
|
+
Name: 'ImgUpload57',
|
|
53
|
+
Label: '公有单图',
|
|
54
|
+
Component: 'ImgUpload',
|
|
55
|
+
Config: '{"ImgUpload":{"Multiple":0,"Limit":0}}'
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
Name: 'ImgUpload64',
|
|
59
|
+
Label: '公有多图',
|
|
60
|
+
Component: 'ImgUpload',
|
|
61
|
+
Config: '{"ImgUpload":{"Multiple":1,"Limit":0}}' // Multiple=1 自动多图分列
|
|
62
|
+
}
|
|
63
|
+
];
|
|
64
|
+
|
|
65
|
+
// 3. 调用导出引擎
|
|
66
|
+
var excelResult = V8.Office.ExportExcel({
|
|
67
|
+
OsClient: V8.OsClient,
|
|
68
|
+
ExcelData: dataResult.Data,
|
|
69
|
+
ExcelHeader: header,
|
|
70
|
+
ExcelOptions: {
|
|
71
|
+
SheetName: '业务数据',
|
|
72
|
+
DefaultColumnWidth: 14,
|
|
73
|
+
HeaderRowHeight: 30,
|
|
74
|
+
DataRowHeight: 24,
|
|
75
|
+
FreezeHeader: true,
|
|
76
|
+
AutoFilter: true,
|
|
77
|
+
HeaderStyle: {
|
|
78
|
+
FontName: 'Microsoft YaHei', FontSize: 11, Bold: true,
|
|
79
|
+
HorizontalAlignment: 'Center', VerticalAlignment: 'Center'
|
|
80
|
+
},
|
|
81
|
+
CellStyle: { FontName: 'Microsoft YaHei', FontSize: 10 }
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
if (excelResult.Code !== 1) return excelResult;
|
|
85
|
+
|
|
86
|
+
// 4. 返回文件流(接口引擎必须开启【响应文件】配置)
|
|
87
|
+
return {
|
|
88
|
+
Code: 1,
|
|
89
|
+
Data: {
|
|
90
|
+
FileName: '导出_' + DateNow('yyyyMMdd_HHmmss') + '.xlsx',
|
|
91
|
+
ContentType: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
|
|
92
|
+
FileByteBase64: System.Convert.ToBase64String(excelResult.Data)
|
|
93
|
+
}
|
|
94
|
+
};
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
### Excel 尺寸与样式参数
|
|
98
|
+
|
|
99
|
+
`ExcelOptions` 是工作表级默认配置:
|
|
100
|
+
|
|
101
|
+
| 参数 | 说明 |
|
|
102
|
+
|------|------|
|
|
103
|
+
| `SheetName` | 单 Sheet 名称 |
|
|
104
|
+
| `DefaultColumnWidth` | 默认列宽,单位为 Excel 字符宽度,范围 `0.1~255` |
|
|
105
|
+
| `DefaultRowHeight` | 默认行高,单位为磅(pt),最大 `409.5` |
|
|
106
|
+
| `HeaderRowHeight` / `DataRowHeight` | 表头/数据行高,单位为磅(pt),最大 `409.5` |
|
|
107
|
+
| `FreezeHeader` / `FreezeRows` / `FreezeColumns` | 冻结首行、顶部指定行数、左侧指定列数;`FreezeRows` 优先于 `FreezeHeader` |
|
|
108
|
+
| `AutoFilter` / `AutoFilterRange` | 启用自动筛选或指定筛选区域;传 `AutoFilterRange` 会自动启用 |
|
|
109
|
+
| `AutoSizeColumns` | 自动计算全部列宽;大数据量优先显式设置 `Width` |
|
|
110
|
+
| `ShowGridLines` | 是否显示工作表网格线 |
|
|
111
|
+
| `Zoom` | 工作表缩放比例 `10~400` |
|
|
112
|
+
| `PrintOrientation` / `PaperSize` | 打印方向及 A3/A4/A5/Letter/Legal 纸张 |
|
|
113
|
+
| `FitToWidth` / `FitToHeight` / `PrintArea` | 缩放打印页数与 A1 打印区域 |
|
|
114
|
+
| `MarginTop/Right/Bottom/Left` | 打印页边距,单位为英寸 |
|
|
115
|
+
| `CenterHorizontally/Vertically` | 打印水平/垂直居中 |
|
|
116
|
+
| `HeaderText` / `FooterText` / `ShowPageNumber` | 页眉、页脚和页码 |
|
|
117
|
+
| `HeaderStyle` / `CellStyle` | 全局表头/数据单元格样式 |
|
|
118
|
+
|
|
119
|
+
`ExcelHeader` 除 `Name/Label/Component/Type/Config` 外,还支持:
|
|
120
|
+
|
|
121
|
+
| 参数 | 说明 |
|
|
122
|
+
|------|------|
|
|
123
|
+
| `Width`(兼容 `ColumnWidth`) | 固定列宽,单位为 Excel 字符宽度 |
|
|
124
|
+
| `AutoSize`、`MinWidth`、`MaxWidth` | 单列自动宽度及上下限 |
|
|
125
|
+
| `Hidden` | 隐藏列但保留数据 |
|
|
126
|
+
| `HeaderHeight` / `RowHeight` | 表头/数据行高候选值,同一 Sheet 取最大值 |
|
|
127
|
+
| `NumberFormat` | 数字或日期格式,如 `#,##0.00`、`0.00%`、`yyyy-mm-dd` |
|
|
128
|
+
| `HeaderStyle` / `Style` | 当前列表头/数据样式,覆盖全局同名属性 |
|
|
129
|
+
|
|
130
|
+
样式对象支持:`FontName/FontSize/FontColor/Bold/Italic/Underline/BackgroundColor/HorizontalAlignment/VerticalAlignment/WrapText/ShrinkToFit/Rotation/NumberFormat/BorderStyle/BorderColor`。边框还可用 `BorderTop/Right/Bottom/LeftStyle` 和对应 `Color` 分别控制四条边;类型可用 `Thin/Medium/Dashed/Dotted/Double/DashDot` 等。颜色使用 `RRGGBB` 或 `#RRGGBB`。对数值字段仍应传 `Type:'int'` 或 `Type:'decimal'`,否则 `NumberFormat` 只改变显示格式,不会把文本强制转换成数值。
|
|
131
|
+
|
|
132
|
+
优先级:列级样式覆盖全局样式;`Width` 覆盖 `DefaultColumnWidth`;开启 `AutoSize` 后以自动宽度为准,再应用 `MinWidth/MaxWidth`。不传这些新参数时保持旧版导出行为。
|
|
133
|
+
|
|
134
|
+
<!-- /microi-progressive:chunk -->
|
|
135
|
+
<!-- microi-progressive:chunk id=v8-export-import-002 sha256=d26555b9a045d6a5920cf3dfd69cd20e2351aa3bab9c8499d3a5d79f58ffa6cd -->
|
|
136
|
+
## 文件响应与前端调用约定
|
|
137
|
+
|
|
138
|
+
- 接口引擎必须开启【响应文件】,并返回正确的 `FileName`、`ContentType`、`FileByteBase64`。
|
|
139
|
+
- 后台菜单的【导出接口替换】默认仍是登录态调用,不要为了消除“请求未携带 Token”而开启【允许匿名调用】。平台会把当前 DiyToken 放入 `Authorization: Bearer ...` 请求头;接口引擎保持【允许匿名调用】关闭即可使用 `V8.CurrentUser` 和既有权限边界。
|
|
140
|
+
- 自定义导出无论收到业务错误、无法解析的文件响应还是网络异常,都必须结束按钮 Loading;前端应 `await` 导出 Promise 并在 `finally` 恢复状态,不能只依赖成功分支回调。
|
|
141
|
+
- `V8.Office.ExportExcel/ExportWord/ExportPowerPoint` 返回的是 `DosResult<byte[]>`;先判断 `Code`,再对 `Data` 调用 `System.Convert.ToBase64String`。
|
|
142
|
+
- 前端调用 Office 导出接口时,新代码优先使用 `V8.Http.GetResponse/PostResponse`;`V8.Post/V8.Get` 仅用于兼容历史代码,不再作为新代码首选。
|
|
143
|
+
|
|
144
|
+
### 表头基础配置项
|
|
145
|
+
|
|
146
|
+
| 字段 | 说明 |
|
|
147
|
+
|------|------|
|
|
148
|
+
| `Name` | 数据字段名(对应 `ExcelData[i].Name`) |
|
|
149
|
+
| `Label` | Excel 列标题 |
|
|
150
|
+
| `Component` | 组件类型,决定渲染方式:`Text`/`Select`/`Switch`/`ImgUpload`/`DateTime`/`NumberText` 等 |
|
|
151
|
+
| `Config` | 组件配置 JSON 字符串。`ImgUpload.Multiple=1` 时自动生成多列并合并;`Limit=0` 公有桶,`1` 私有桶(需临时URL) |
|
|
152
|
+
| `Width/AutoSize/MinWidth/MaxWidth/Hidden` | 列宽、自动宽度限制和隐藏列 |
|
|
153
|
+
| `HeaderHeight/RowHeight` | 表头与数据行高(磅)候选值 |
|
|
154
|
+
| `NumberFormat/HeaderStyle/Style` | 数字格式与列级样式 |
|
|
155
|
+
|
|
156
|
+
<!-- /microi-progressive:chunk -->
|
|
157
|
+
<!-- microi-progressive:chunk id=v8-export-import-003 sha256=9adee471586dce589c6cf5dcaa32820ad05025c670ca885801cfa4711c584cdb -->
|
|
158
|
+
## 解析上传的 Excel / CSV(导入)
|
|
159
|
+
|
|
160
|
+
```javascript
|
|
161
|
+
// 接口引擎接收 V8.FilesByteBase64
|
|
162
|
+
var filesByteBase64 = V8.FilesByteBase64;
|
|
163
|
+
if (!filesByteBase64) return { Code: 0, Msg: '请上传 Excel 文件' };
|
|
164
|
+
|
|
165
|
+
var base64 = Object.values(filesByteBase64)[0];
|
|
166
|
+
|
|
167
|
+
// 可直接解析旧的首行表头模板
|
|
168
|
+
var parsed = V8.Office.ExcelToList({
|
|
169
|
+
FileByteBase64: base64,
|
|
170
|
+
SheetIndex: 0
|
|
171
|
+
});
|
|
172
|
+
if (parsed.Code !== 1) return parsed;
|
|
173
|
+
|
|
174
|
+
var dataList = parsed.Data; // [{ 列标题: 值, ... }, ...]
|
|
175
|
+
return { Code: 1, Data: dataList, DataCount: dataList.length };
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
`ExcelToList` 的增强参数为 `FileType/FileName/Encoding/Delimiter/HeaderStartRow/HeaderEndRow/DataStartRow/DataEndRow/Columns/MaxDataRows/MaxColumns`。CSV 传 `FileType:'csv'` 或 `.csv` 文件名,编码和分隔符通常省略,由服务端自动识别 UTF-8/GBK 与逗号、制表符、分号、竖线;结果通过 `DataAppend.Encoding/Delimiter` 回传实际识别值。除 `SheetIndex` 和 `Columns[].ColumnIndex` 从 `0` 开始外,行号都从 `1` 开始;传增强范围后每行带 `_ExcelRow`。参数全省略时继续兼容“首行表头、第二行开始数据”。
|
|
179
|
+
|
|
180
|
+
### 固定版式模板与后台自定义导入
|
|
181
|
+
|
|
182
|
+
通用【导入】和 `V8.OpenImportDialog` 共用智能导入弹层:默认宽度 `80%`,支持 `.xls/.xlsx/.csv`,选择文件后自动识别工作表、单行/多级合并表头、首条与末条数据行和字段映射;先按每页 `15` 条预览,用户确认后才写入。数据预览必须独立保留全部源列、源行,不能因为零字段匹配而显示空白;未匹配列头以红色和悬停原因标记。低可信度时必须允许用户人工指定表头/数据起止行和逐列映射。模板顶部图片、标题、说明文字以及 A 列为空的数据行都不能破坏识别。
|
|
183
|
+
|
|
184
|
+
【列映射】后的【原始工作簿】页签必须不依赖解析可信度,直接显示完整工作簿/CSV,包括所有工作表、合并表头、图片、说明、样式和原始数据;该视图只用于核对,不能绕过目标字段映射和服务端校验。
|
|
185
|
+
|
|
186
|
+
`.xlsx` 原始预览必须兼容 OpenPyXL 等生成器使用等价 DrawingML 默认命名空间的锚定图片。只允许在内存中的预览副本规范化 `xdr` 命名空间和关系目标;正式上传、接口引擎和服务端复核始终使用未经改写的原始文件。
|
|
187
|
+
|
|
188
|
+
- 页面 V8 可只声明 `ApiEngineKey`;`Workbook.Cells/Columns/HeaderStartRow/HeaderEndRow/DataStartRow/DataEndRow/KeyField` 均为模板提示或固定约束,不传时自动识别。不得拼上传 DOM、传完整工作簿 Base64 或自行轮询。
|
|
189
|
+
- 弹层必须让用户在 `RollbackAll`(默认,任一错误整批回滚)和 `ContinueOnError`(逐行提交/跳过错误行)之间明确选择;未传时保持旧版 `RollbackAll`。最终值同时写入 `_ImportErrorPolicy` 与 `_ImportMetaJson.ErrorPolicy`,不能由服务端静默改成另一策略。
|
|
190
|
+
- 当前表的唯一配置必须在上传前可读展示:每个 `Unique=1 + Config.Unique.Type=Alone` 字段各自是一条规则,全部 `Type=All` 字段共同组成一条组合规则;无唯一规则时明确警告“只能新增,重复导入可能产生重复数据”。
|
|
191
|
+
- 标准导入的服务端必须从权威 `diy_field` 重新计算唯一规则,不能信任前端快照。任一完整规则命中同一 Id 则按 Id 修改,均未命中则新增;不同规则命中不同 Id、或一条规则命中多条脏数据时按行报冲突,禁止任意选记录或按宽泛条件更新多行。
|
|
192
|
+
- `V8.OpenImportDialog` 后台接口引擎从 `V8.Param._ImportRowsJson`、`_ImportMetaJson`、`_ImportErrorPolicy` 和 `_ImportUniqueRulesJson` 取值;必须重做模板、权限、字段、唯一性和状态校验。v2.2 元数据中的 `UniqueRules` 只用于说明和诊断。
|
|
193
|
+
- 菜单【导入接口替换】仍接收原始文件 `V8.FilesByteBase64`,并接收上述策略/规则元数据。接口引擎必须把元数据里的 `FileType/SheetIndex/HeaderStartRow/HeaderEndRow/DataStartRow/DataEndRow/Columns` 传给 `V8.Office.ExcelToList`,由服务端按同一范围重读原文件;CSV 应省略固定 `Encoding/Delimiter` 让服务端独立识别,再用 `DataAppend` 与元数据交叉复核。不能只信任浏览器预览,也不能固定读取第一行。
|
|
194
|
+
- `RollbackAll` 在首个行错误时返回 `Code != 1`,依靠平台事务整体回滚;`ContinueOnError` 捕获并记录行错误、继续下一行,最后返回 `Code=1` 提交成功行。两种模式都禁止手动 Commit/Rollback;若底层异常使事务不可继续,必须先做整批预校验或使用平台允许的独立幂等行操作。
|
|
195
|
+
- 结果与进度必须分别统计 `Added/Updated/Failed/Errors`;整批回滚后成功、新增、修改数必须归零,不能把已回滚行计作成功。
|
|
196
|
+
- 用 `V8.Method.UpdateBackgroundTask({Current,Total,Msg,Log})` 上报真实校验/写入工作量;未知总量保持不确定进度,不伪造百分比。
|
|
197
|
+
- 业务幂等键使用后台任务 Id 或明确的导入操作 Id;重试前回读批次,避免重复写入。
|
|
198
|
+
- 平台审计字段(`Id/CreateTime/UpdateTime/UserId/UserName/IsDeleted/OsClient/TenantId/TenantName`)由导入事务统一生成或由 `_CurrentUser` 归属填充,不参与写入。导出的表格天然包含这些列,服务端必须把映射到的保护字段从 INSERT/UPDATE 列清单里剔除,否则会出现 `Column 'CreateTime' specified twice`,或把旧记录的创建时间、租户归属改成 Excel 里的快照值。导入钩子(ImportV8)返回的 `FixedValues` 也不能回填这些字段,命中时按未授权字段拒绝。
|
|
199
|
+
- 写回策略是“新增保护、更新不覆盖”:同一批导入既能安全新增,也不会改写既有记录的平台审计字段;需要保留 Excel 里的原始时间时,另建业务时间字段,不要复用 `CreateTime`。
|
|
200
|
+
|
|
201
|
+
完整前端参数见 `microi.doc/docs/doc/v8-engine/v8-client.md#v8openimportdialog`。
|
|
202
|
+
|
|
203
|
+
<!-- /microi-progressive:chunk -->
|
|
204
|
+
## 详细参考路由(渐进披露)
|
|
205
|
+
|
|
206
|
+
仅在当前任务涉及对应主题时读取;下列文件合计保留了原 SKILL.md 的全部详细知识。
|
|
207
|
+
|
|
208
|
+
- [references/progressive-01-excellayout-高级自由布局.md](references/progressive-01-excellayout-高级自由布局.md):`ExcelLayout` 高级自由布局;多 Sheet Excel 导出;Word 导出
|
|
209
|
+
- [references/progressive-02-powerpoint-导出.md](references/progressive-02-powerpoint-导出.md):PowerPoint 导出;完整导入模式(含进度跟踪);接收并下载文件(HTTP 链接转 Excel);子表导入自动关联主表
|
|
210
|
+
- [references/progressive-03-安全-性能注意.md](references/progressive-03-安全-性能注意.md):安全 / 性能注意
|
|
211
|
+
<!-- microi-progressive:end -->
|
|
212
|
+
|
|
213
|
+
## 复盘:通用导入需要事务内整批业务校验
|
|
214
|
+
|
|
215
|
+
- 触发场景:业务要求按整批汇总校验额度,并在并发导入时锁定稳定的主记录;完全替换导入接口会重复实现文件解析、字段映射、权限、进度和错误报告。
|
|
216
|
+
- 通用规则:模块 `ImportV8` 显式配置为 `ApiEngine:<ApiEngineKey>` 时,平台标准导入器在 `RollbackAll` 的同一数据库事务内,把服务端重新解析并应用固定父表值后的全部行传给接口引擎;接口只负责校验和加锁,不自行写入或提交事务。平台通过 `V8.Param.Capabilities.PreflightFixedValuesV1=true` 声明支持安全回填;接口确认该能力后,若能从权威数据唯一推导出本批共同缺失的业务字段,可在成功结果的 `Data.FixedValues` 返回字段名到非空标量值的对象。平台只接受当前表可导入业务字段,拒绝平台字段、未知字段以及覆盖既有父表固定上下文,并把通过校验的值应用到本批全部写入。其它历史 `ImportV8` 文本保持原兼容行为。
|
|
217
|
+
- 父子表边界:固定父记录外键优先于 Excel 同名列;接口引擎仍须核对目标表、项目/主记录存在性、业务状态和额度。需要整批钩子的模块禁止 `ContinueOnError`。
|
|
218
|
+
- 重复提交:客户端每次重新选择文件生成新的 `_ImportIdempotencyKey`,同一 HTTP 重试沿用该键;服务端按租户、表、菜单、用户和请求键保存状态,`Pending/Running/Succeeded` 均不得重复创建写入任务。该机制不等同于“相同文件作为新请求再次上传”的内容判重。
|
|
219
|
+
- 自动化检查:至少覆盖同批汇总超量、稳定行锁先于累计回查、整批回滚、父外键不可被 Excel 覆盖、同一请求重试只写一次,以及错误中包含行号和业务上限明细。
|