@uipath/skills 1.196.0 → 1.197.0
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/.claude-plugin/marketplace.json +1 -1
- package/.claude-plugin/plugin.json +5 -2
- package/CODEOWNERS +22 -7
- package/README.md +14 -1
- package/assets/skill-status.json +14 -1
- package/assets/uip-catalog-snapshot.json +13 -2
- package/hooks/hooks.json +12 -0
- package/hooks/send-telemetry.sh +445 -0
- package/hooks/suggest-permissions.sh +6 -0
- package/package.json +1 -1
- package/skills/uipath-admin/SKILL.md +24 -4
- package/skills/uipath-admin/references/audit-commands.md +25 -21
- package/skills/uipath-admin/references/audit-workflow-guide.md +26 -25
- package/skills/uipath-admin/references/diagnose/CAPABILITY.md +74 -0
- package/skills/uipath-admin/references/diagnose/references/failure-modes.md +228 -0
- package/skills/uipath-admin/references/diagnose/references/troubleshooting-guide.md +106 -0
- package/skills/uipath-admin/references/identity-troubleshoot-guide.md +251 -0
- package/skills/uipath-agents/SKILL.md +12 -8
- package/skills/uipath-agents/references/coded/capabilities/context-grounding.md +2 -0
- package/skills/uipath-agents/references/coded/capabilities/conversational-agents.md +2 -0
- package/skills/uipath-agents/references/coded/capabilities/guardrails/guardrails-recommend.md +12 -7
- package/skills/uipath-agents/references/coded/capabilities/guardrails/guardrails.md +141 -1
- package/skills/uipath-agents/references/coded/capabilities/human-in-the-loop.md +2 -0
- package/skills/uipath-agents/references/coded/capabilities/integration-service.md +19 -33
- package/skills/uipath-agents/references/coded/lifecycle/bindings-reference.md +54 -22
- package/skills/uipath-agents/references/coded/lifecycle/build.md +1 -0
- package/skills/uipath-agents/references/coded/lifecycle/evaluations/evaluation-sets.md +5 -1
- package/skills/uipath-agents/references/coded/lifecycle/setup.md +3 -1
- package/skills/uipath-agents/references/coded/quickstart.md +11 -10
- package/skills/uipath-agents/references/coded-vs-lowcode-guide.md +1 -0
- package/skills/uipath-agents/references/context-grounding-patterns.md +1 -1
- package/skills/uipath-agents/references/lowcode/agent-definition.md +97 -12
- package/skills/uipath-agents/references/lowcode/capabilities/built-in-tools/analyze-attachments.md +2 -2
- package/skills/uipath-agents/references/lowcode/capabilities/built-in-tools/batch-transform/impl-json.md +40 -14
- package/skills/uipath-agents/references/lowcode/capabilities/built-in-tools/built-in-tools.md +4 -3
- package/skills/uipath-agents/references/lowcode/capabilities/built-in-tools/deeprag/impl-json.md +38 -6
- package/skills/uipath-agents/references/lowcode/capabilities/context/attachments.md +1 -1
- package/skills/uipath-agents/references/lowcode/capabilities/context/context.md +1 -1
- package/skills/uipath-agents/references/lowcode/capabilities/context/datafabric.md +1 -1
- package/skills/uipath-agents/references/lowcode/capabilities/context/index.md +7 -3
- package/skills/uipath-agents/references/lowcode/capabilities/escalation/escalation.md +49 -38
- package/skills/uipath-agents/references/lowcode/capabilities/guardrails/guardrails-recommend.md +3 -1
- package/skills/uipath-agents/references/lowcode/capabilities/guardrails/guardrails.md +49 -49
- package/skills/uipath-agents/references/lowcode/capabilities/inline-in-flow/inline-in-flow.md +34 -14
- package/skills/uipath-agents/references/lowcode/capabilities/integration-service/integration-service.md +1 -1
- package/skills/uipath-agents/references/lowcode/capabilities/memory/memory.md +2 -0
- package/skills/uipath-agents/references/lowcode/capabilities/process/process.md +2 -2
- package/skills/uipath-agents/references/lowcode/capabilities/process/solution-files.md +1 -1
- package/skills/uipath-agents/references/lowcode/critical-rules/autonomous-critical-rules.md +15 -0
- package/skills/uipath-agents/references/lowcode/critical-rules/conversational-critical-rules.md +19 -0
- package/skills/uipath-agents/references/lowcode/{critical-rules.md → critical-rules/critical-rules.md} +25 -27
- package/skills/uipath-agents/references/lowcode/debug.md +6 -3
- package/skills/uipath-agents/references/lowcode/evaluations/evaluate.md +2 -0
- package/skills/uipath-agents/references/lowcode/lowcode.md +29 -6
- package/skills/uipath-agents/references/lowcode/model-selection-guide.md +4 -1
- package/skills/uipath-agents/references/lowcode/project-lifecycle.md +20 -8
- package/skills/uipath-agents/references/lowcode/prompting/agent-prompting-guide.md +17 -0
- package/skills/uipath-agents/references/lowcode/{agent-prompting-guide.md → prompting/autonomous-agent-prompting-guide.md} +9 -11
- package/skills/uipath-agents/references/lowcode/prompting/conversational-agent-prompting-guide.md +123 -0
- package/skills/uipath-agents/references/lowcode/solution-resources.md +1 -1
- package/skills/uipath-api-workflow/SKILL.md +32 -12
- package/skills/uipath-api-workflow/references/cli-reference.md +110 -22
- package/skills/uipath-api-workflow/references/connector-activity-discovery.md +43 -4
- package/skills/uipath-api-workflow/references/troubleshooting.md +23 -7
- package/skills/uipath-api-workflow/references/workflow-file-format.md +25 -7
- package/skills/uipath-coded-apps/SKILL.md +55 -12
- package/skills/uipath-coded-apps/assets/fixtures/governance-dashboard-starter-kit.tar.gz +0 -0
- package/skills/uipath-coded-apps/assets/scripts/dashboards/build-dashboard.mjs +1371 -0
- package/skills/uipath-coded-apps/assets/scripts/dashboards/capability-registry.json +845 -0
- package/skills/uipath-coded-apps/assets/scripts/dashboards/flows/build.mjs +338 -0
- package/skills/uipath-coded-apps/assets/scripts/dashboards/flows/edit.mjs +248 -0
- package/skills/uipath-coded-apps/assets/scripts/dashboards/flows/template.mjs +82 -0
- package/skills/uipath-coded-apps/assets/scripts/dashboards/flows/upgrade.mjs +73 -0
- package/skills/uipath-coded-apps/assets/scripts/dashboards/lifecycle.mjs +207 -0
- package/skills/uipath-coded-apps/assets/scripts/dashboards/setup-admin-folder.mjs +146 -0
- package/skills/uipath-coded-apps/assets/scripts/dashboards/tests/regime-eject.test.mjs +124 -0
- package/skills/uipath-coded-apps/assets/scripts/dashboards/tests/resolution.test.mjs +1635 -0
- package/skills/uipath-coded-apps/assets/templates/action-app/app-template.css +9 -0
- package/skills/uipath-coded-apps/assets/templates/action-app/document-tab-template.css +139 -0
- package/skills/uipath-coded-apps/assets/templates/action-app/form-template.css +442 -0
- package/skills/uipath-coded-apps/assets/templates/action-app/index-template.css +111 -0
- package/skills/uipath-coded-apps/assets/templates/action-app-template.md +357 -152
- package/skills/uipath-coded-apps/assets/templates/web-app-template.md +255 -78
- package/skills/uipath-coded-apps/references/create-action-app.md +284 -195
- package/skills/uipath-coded-apps/references/create-web-app.md +64 -26
- package/skills/uipath-coded-apps/references/dashboards/CAPABILITY.md +179 -0
- package/skills/uipath-coded-apps/references/dashboards/aesthetic/charting.md +138 -0
- package/skills/uipath-coded-apps/references/dashboards/aesthetic/layout-patterns.md +152 -0
- package/skills/uipath-coded-apps/references/dashboards/plugins/build/impl.md +423 -0
- package/skills/uipath-coded-apps/references/dashboards/plugins/deploy/impl.md +322 -0
- package/skills/uipath-coded-apps/references/dashboards/primitives/customization.md +66 -0
- package/skills/uipath-coded-apps/references/dashboards/primitives/detail-views.md +64 -0
- package/skills/uipath-coded-apps/references/dashboards/primitives/incremental-editor.md +92 -0
- package/skills/uipath-coded-apps/references/dashboards/primitives/state-file.md +64 -0
- package/skills/uipath-coded-apps/references/dashboards/primitives/tier-resolution.md +474 -0
- package/skills/uipath-coded-apps/references/debug.md +15 -21
- package/skills/uipath-coded-apps/references/oauth-client-setup.md +5 -5
- package/skills/uipath-coded-apps/references/oauth-scopes.md +64 -2
- package/skills/uipath-coded-apps/references/pack-publish-deploy.md +12 -5
- package/skills/uipath-coded-apps/references/patterns.md +10 -5
- package/skills/uipath-coded-apps/references/sdk/action-center.md +32 -6
- package/skills/uipath-coded-apps/references/sdk/agents.md +241 -0
- package/skills/uipath-coded-apps/references/sdk/governance-traces.md +186 -0
- package/skills/uipath-coded-apps/references/sdk/governance.md +72 -0
- package/skills/uipath-coded-apps/references/sdk/imports.md +4 -0
- package/skills/uipath-coded-apps/references/sdk/maestro.md +114 -0
- package/skills/uipath-coded-apps/references/sdk/orchestrator.md +80 -4
- package/skills/uipath-coded-apps/references/sdk/pagination.md +2 -0
- package/skills/uipath-coded-apps/references/sdk/traces.md +89 -0
- package/skills/uipath-coded-apps/references/widgets/validation-station.md +308 -0
- package/skills/uipath-coded-apps/scripts/validate-action-schema.js +241 -0
- package/skills/uipath-connector-builder/SKILL.md +192 -0
- package/skills/uipath-connector-builder/references/auth.md +171 -0
- package/skills/uipath-connector-builder/references/configuration.md +130 -0
- package/skills/uipath-connector-builder/references/debugging.md +80 -0
- package/skills/uipath-connector-builder/references/element-json.md +148 -0
- package/skills/uipath-connector-builder/references/events.md +132 -0
- package/skills/uipath-connector-builder/references/hooks.md +198 -0
- package/skills/uipath-connector-builder/references/overview.md +78 -0
- package/skills/uipath-connector-builder/references/standard-resources.md +111 -0
- package/skills/uipath-connector-builder/references/system-resources.md +85 -0
- package/skills/uipath-feedback/SKILL.md +43 -29
- package/skills/{uipath-agents/references/coded/frameworks/coded-functions.md → uipath-functions/SKILL.md} +36 -23
- package/skills/uipath-governance/SKILL.md +49 -8
- package/skills/uipath-governance/references/aops-policy/aops-policy-commands.md +10 -10
- package/skills/uipath-governance/references/aops-policy/aops-policy-deploy-guide.md +7 -7
- package/skills/uipath-governance/references/auth-context.md +101 -0
- package/skills/uipath-governance/references/cli-cheatsheet.md +207 -0
- package/skills/uipath-governance/references/compliance-pack/catalog/impl.md +79 -0
- package/skills/uipath-governance/references/compliance-pack/coverage/impl.md +141 -0
- package/skills/uipath-governance/references/compliance-pack/disable/impl.md +39 -0
- package/skills/uipath-governance/references/compliance-pack/full-apply/impl.md +164 -0
- package/skills/uipath-governance/references/compliance-pack/partial-apply/impl.md +266 -0
- package/skills/uipath-governance/references/compliance-pack/partial-apply/merge-overrides-guide.md +28 -0
- package/skills/uipath-governance/references/compliance-pack/partial-apply/planning.md +82 -0
- package/skills/uipath-governance/references/compliance-pack/partial-apply/synthesize-formdata-guide.md +22 -0
- package/skills/uipath-governance/references/compliance-pack/preview-gate.md +43 -0
- package/skills/uipath-governance/references/compliance-pack/query/impl.md +75 -0
- package/skills/uipath-governance/references/diagnose/CAPABILITY.md +71 -0
- package/skills/uipath-governance/references/diagnose/references/failure-modes.md +201 -0
- package/skills/uipath-governance/references/diagnose/references/troubleshooting-guide.md +137 -0
- package/skills/uipath-governance/references/disambiguation-guide.md +15 -0
- package/skills/uipath-governance/scripts/merge-overrides.mjs +81 -0
- package/skills/uipath-governance/scripts/synthesize-formdata.mjs +86 -0
- package/skills/uipath-human-in-the-loop/SKILL.md +30 -25
- package/skills/uipath-human-in-the-loop/references/hitl-node-apptask.md +38 -4
- package/skills/uipath-human-in-the-loop/references/hitl-node-coded-action-app.md +2 -3
- package/skills/uipath-human-in-the-loop/references/hitl-node-quickform.md +92 -34
- package/skills/uipath-ixp/SKILL.md +120 -0
- package/skills/uipath-ixp/references/cli-reference.md +121 -0
- package/skills/uipath-ixp/references/improve-prompts-guide.md +283 -0
- package/skills/uipath-ixp/references/label-documents-guide.md +207 -0
- package/skills/uipath-ixp/references/project-setup-guide.md +90 -0
- package/skills/uipath-maestro-bpmn/SKILL.md +167 -68
- package/skills/uipath-maestro-bpmn/references/cli-conventions.md +47 -0
- package/skills/uipath-maestro-bpmn/references/diagnose/CAPABILITY.md +6 -6
- package/skills/uipath-maestro-bpmn/references/operate/CAPABILITY.md +3 -3
- package/skills/uipath-maestro-bpmn/references/registry-workflow.md +199 -0
- package/skills/uipath-maestro-bpmn/references/structural-bpmn.md +500 -0
- package/skills/uipath-maestro-bpmn/validator/README.md +214 -0
- package/skills/uipath-maestro-bpmn/validator/bpmn-spec.json +2477 -0
- package/skills/uipath-maestro-bpmn/validator/model.mjs +419 -0
- package/skills/uipath-maestro-bpmn/validator/package.json +17 -0
- package/skills/uipath-maestro-bpmn/validator/rules.mjs +1403 -0
- package/skills/uipath-maestro-bpmn/validator/samples/invalid-conditional-and-variable.bpmn +25 -0
- package/skills/uipath-maestro-bpmn/validator/samples/valid-baseline.bpmn +52 -0
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/expected-findings/A.2.0.bpmn +157 -0
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/expected-findings/A.2.1.bpmn +333 -0
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/expected-findings/B.1.0.bpmn +598 -0
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/expected-findings/B.2.0.bpmn +1709 -0
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/expected-findings/C.2.0.bpmn +564 -0
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/expected-findings/C.3.0.bpmn +671 -0
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/expected-findings/C.4.0.bpmn +1045 -0
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/expected-findings/C.5.0.bpmn +1176 -0
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/expected-findings/C.6.0.bpmn +670 -0
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/expected-findings/C.7.0.bpmn +466 -0
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/expected-findings/Can_Parse_Complex_Process_With_Task_Gateway_BoundaryEvent_etc.bpmn +74 -0
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/expected-findings/ExclusiveGatewayDefaultFlow.bpmn +32 -0
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/expected-findings/ExternalAgentWorkflow.bpmn +62 -0
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/expected-findings/Golden_Scenario.initial.bpmn +361 -0
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/expected-findings/InclusiveJoinRouteAwayBranch.bpmn +62 -0
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/expected-findings/Parse_AsyncExecution_And_Create_CorrectModel.bpmn +74 -0
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/expected-findings/Parse_IXP_ExtractionValidation_And_Create_CorrectModel.bpmn +35 -0
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/expected-findings/Parse_IXP_Extraction_FileUpload_And_Create_CorrectModel.bpmn +33 -0
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/expected-findings/Parse_IXP_Extraction_JobAttachment_And_Create_CorrectModel.bpmn +35 -0
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/expected-findings/Parse_SubProcess_With_Multiple_Element_Types.bpmn +76 -0
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/expected-findings/StartEventWithOutputs.bpmn +36 -0
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/expected-findings/StartGatewayEnd.bpmn +44 -0
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/expected-findings/all elements.bpmn +516 -0
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/expected-findings/all_sequence_flow_types.bpmn +173 -0
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/expected-findings/demo.bpmn +181 -0
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/expected-findings/subprocess-example-001-collapsed.bpmn +126 -0
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/expected-findings/subprocess-example-001-expanded.bpmn +122 -0
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/expected-findings/subprocess-example-003-collapsed_deeply-nested.bpmn +438 -0
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/A.1.0.bpmn +87 -0
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/A.3.0.bpmn +165 -0
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/ApiWorkflow.bpmn +39 -0
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/BpmnNestedSubProcessTests.bpmn +102 -0
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/BpmnTimerBoundaryEvents.bpmn +160 -0
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/BpmnXmlWithCatchAllErrorEventSubProcess.bpmn +45 -0
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/BpmnXmlWithSpecificErrorEventSubProcess.bpmn +46 -0
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/CaseManagementWithConstantIdentifier.bpmn +218 -0
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/ErrorBoundary.bpmn +78 -0
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/ErrorPropagationInEventSubprocess.bpmn +340 -0
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/EventBasedGatewayFirstCatcherWins.bpmn +56 -0
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/Example-EventBasedGateway.bpmn +117 -0
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/ExclusiveGatewayConditional.bpmn +45 -0
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/ExclusiveGatewaySharedEndEvent.bpmn +45 -0
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/ExclusiveWithParallelGateway.bpmn +68 -0
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/FourScriptTasks.bpmn +84 -0
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/HitlTaskOnly.bpmn +55 -0
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/InclusiveGatewayForkJoin.bpmn +69 -0
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/Parse_BPMN_Elements_And_Create_CorrectModel.bpmn +20 -0
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/Parse_HttpRequest_ServiceTask_And_Create_Correct_Model.bpmn +34 -0
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/Parse_MessageBoundaryEvent_And_Create_CorrectModel.bpmn +87 -0
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/Parse_Script_Task_V2_And_Create_Correct_Model.bpmn +31 -0
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/Parse_Sets_Containers_Properly.bpmn +129 -0
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/ScriptWritesVariableThenGatewayBranches.bpmn +55 -0
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/boundaryevent.bpmn +30 -0
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/collapsed-subprocess.bpmn +83 -0
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/connectable-types.bpmn +85 -0
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/extensions-orchestrator-start-job.bpmn +80 -0
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/multiparticipantpool.bpmn +77 -0
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/nestedsubprocess.bpmn +36 -0
- package/skills/uipath-maestro-bpmn/validator/test/fixtures/known-good/simple.bpmn +59 -0
- package/skills/uipath-maestro-bpmn/validator/test/integration.test.mjs +146 -0
- package/skills/uipath-maestro-bpmn/validator/test/model-helpers.mjs +42 -0
- package/skills/uipath-maestro-bpmn/validator/test/ported-rule-tests.mjs +983 -0
- package/skills/uipath-maestro-bpmn/validator/test/run-tests.mjs +530 -0
- package/skills/uipath-maestro-bpmn/validator/uipath-moddle.v1.json +715 -0
- package/skills/uipath-maestro-bpmn/validator/validate-bpmn.mjs +164 -0
- package/skills/uipath-maestro-case/SKILL.md +5 -1
- package/skills/uipath-maestro-case/assets/templates/sdd-template-examples.md +10 -0
- package/skills/uipath-maestro-case/assets/templates/sdd-template.md +89 -17
- package/skills/uipath-maestro-case/references/bindings-and-expressions.md +26 -0
- package/skills/uipath-maestro-case/references/case-editing-operations.md +3 -0
- package/skills/uipath-maestro-case/references/implementation.md +11 -4
- package/skills/uipath-maestro-case/references/phase-0-interview.md +8 -7
- package/skills/uipath-maestro-case/references/phased-execution.md +2 -1
- package/skills/uipath-maestro-case/references/plugins/conditions/stage-exit-conditions/impl-json.md +21 -0
- package/skills/uipath-maestro-case/references/plugins/conditions/stage-exit-conditions/planning.md +2 -0
- package/skills/uipath-maestro-case/references/plugins/variables/global-vars/impl-json.md +15 -9
- package/skills/uipath-maestro-case/references/plugins/variables/io-binding/impl-json.md +131 -4
- package/skills/uipath-maestro-case/references/sdd-generation-rules.md +94 -17
- package/skills/uipath-maestro-flow/references/author/CAPABILITY.md +1 -1
- package/skills/uipath-maestro-flow/references/author/references/planning-arch.md +2 -2
- package/skills/uipath-maestro-flow/references/author/references/plugins/hitl/impl.md +11 -11
- package/skills/uipath-maestro-flow/references/author/references/plugins/hitl/planning.md +6 -6
- package/skills/uipath-maestro-flow/references/author/references/plugins/http/impl-connector.md +4 -1
- package/skills/uipath-maestro-flow/references/author/references/plugins/inline-agent/impl.md +157 -122
- package/skills/uipath-maestro-flow/references/author/references/plugins/inline-agent/planning.md +16 -4
- package/skills/uipath-maestro-flow/references/evaluate/references/commands-reference.md +8 -8
- package/skills/uipath-maestro-flow/references/evaluate/references/running-guide.md +3 -3
- package/skills/uipath-maestro-flow/references/shared/cli-commands.md +1 -1
- package/skills/uipath-planner/SKILL.md +19 -8
- package/skills/uipath-planner/assets/templates/agent-sdd-template.md +14 -0
- package/skills/uipath-planner/assets/templates/api-workflow-sdd-template.md +14 -0
- package/skills/uipath-planner/assets/templates/case-sdd-template.md +14 -0
- package/skills/uipath-planner/assets/templates/coded-app-sdd-template.md +14 -0
- package/skills/uipath-planner/assets/templates/flow-sdd-template.md +14 -0
- package/skills/uipath-planner/assets/templates/rpa-sdd-template.md +40 -5
- package/skills/uipath-planner/references/asdd-crosswalk-guide.md +55 -0
- package/skills/uipath-planner/references/attended-reauth-pattern-guide.md +43 -0
- package/skills/uipath-planner/references/multi-skill-patterns-guide.md +4 -0
- package/skills/uipath-planner/references/non-pdd-lane-guide.md +2 -0
- package/skills/uipath-planner/references/pdd-analysis-guide.md +24 -1
- package/skills/uipath-planner/references/pdd-driven-lane-guide.md +6 -2
- package/skills/uipath-planner/references/plan-and-tasks-format.md +2 -0
- package/skills/uipath-planner/references/platform-availability-guide.md +43 -0
- package/skills/uipath-planner/references/product-selection-guide.md +20 -0
- package/skills/uipath-planner/references/sdd-generation-guide.md +90 -21
- package/skills/uipath-planner/references/tenant-library-search-guide.md +5 -1
- package/skills/uipath-planner/scripts/docx-extract.sh +54 -0
- package/skills/uipath-planner/scripts/sdd-to-docx.sh +76 -0
- package/skills/uipath-platform/SKILL.md +54 -7
- package/skills/uipath-platform/references/context-grounding/index-management.md +123 -0
- package/skills/uipath-platform/references/data-fabric/bulk-import.md +86 -0
- package/skills/{uipath-data-fabric/references → uipath-platform/references/data-fabric}/choice-sets.md +33 -12
- package/skills/uipath-platform/references/data-fabric/data-fabric.md +352 -0
- package/skills/uipath-platform/references/data-fabric/entity-schema.md +444 -0
- package/skills/uipath-platform/references/data-fabric/file-attachments.md +122 -0
- package/skills/{uipath-data-fabric/references → uipath-platform/references/data-fabric}/filter-platform-contract.md +3 -3
- package/skills/{uipath-data-fabric/references → uipath-platform/references/data-fabric}/records-query.md +46 -10
- package/skills/uipath-platform/references/integration-service/http-request.md +15 -1
- package/skills/uipath-platform/references/integration-service/vendor-docs-registry.json +173 -0
- package/skills/uipath-platform/references/uip-commands.md +12 -4
- package/skills/uipath-review/SKILL.md +53 -12
- package/skills/uipath-review/references/agents/agent-common-issues.md +1 -1
- package/skills/uipath-review/references/agents/agent-grading-rubric.md +133 -0
- package/skills/uipath-review/references/agents/agent-review-checklist.md +23 -3
- package/skills/uipath-review/references/agents/agents-coded-rules.md +7 -0
- package/skills/uipath-review/references/agents/agents-lowcode-rules.md +13 -3
- package/skills/uipath-review/references/agents/guardrails/guardrails-review.md +198 -0
- package/skills/uipath-review/references/architecture-assessment-guide.md +2 -0
- package/skills/uipath-review/references/review-workflow-guide.md +9 -5
- package/skills/uipath-review/references/rule-catalog-workflow.md +3 -3
- package/skills/uipath-rpa/SKILL.md +18 -6
- package/skills/uipath-rpa/references/cli-reference.md +57 -3
- package/skills/uipath-rpa/references/common-activity-card.md +1 -1
- package/skills/uipath-rpa/references/connector-capabilities.md +2 -0
- package/skills/uipath-rpa/references/data-manipulation-guide.md +311 -0
- package/skills/uipath-rpa/references/environment-setup.md +0 -2
- package/skills/uipath-rpa/references/error-handling-guide.md +381 -0
- package/skills/uipath-rpa/references/is-connector-xaml-guide.md +127 -11
- package/skills/uipath-rpa/references/reframework-guide.md +2 -0
- package/skills/uipath-rpa/references/testing-guide.md +19 -0
- package/skills/uipath-rpa/references/ui-automation-guide.md +129 -18
- package/skills/uipath-rpa/references/uia-configure-target-workflows.md +22 -1
- package/skills/uipath-rpa/references/uia-elements-interaction-guide.md +93 -0
- package/skills/uipath-rpa/references/xaml/canvas-layout-guide.md +41 -4
- package/skills/uipath-rpa/references/xaml/common-pitfalls.md +12 -3
- package/skills/uipath-rpa/references/xaml/flowchart-guide.md +113 -0
- package/skills/uipath-rpa/references/xaml/xaml-basics-and-rules.md +5 -9
- package/skills/uipath-solution/SKILL.md +11 -8
- package/skills/uipath-solution/references/pack-and-deploy.md +18 -1
- package/skills/uipath-solution/references/solution-overview.md +3 -0
- package/skills/uipath-test/SKILL.md +2 -1
- package/skills/uipath-troubleshoot/SKILL.md +24 -26
- package/skills/uipath-troubleshoot/agents/depth-verifier.md +24 -25
- package/skills/uipath-troubleshoot/agents/hypothesis-generator.md +8 -4
- package/skills/uipath-troubleshoot/agents/hypothesis-tester.md +85 -38
- package/skills/uipath-troubleshoot/agents/presenter.md +7 -7
- package/skills/uipath-troubleshoot/agents/scope-checker.md +3 -6
- package/skills/uipath-troubleshoot/agents/shared.md +26 -21
- package/skills/uipath-troubleshoot/agents/triage.md +117 -49
- package/skills/uipath-troubleshoot/references/activity-packages/cv-activities/investigation_guide.md +43 -0
- package/skills/uipath-troubleshoot/references/activity-packages/cv-activities/overview.md +57 -0
- package/skills/uipath-troubleshoot/references/activity-packages/cv-activities/playbooks/cv-action-failed-after-find.md +100 -0
- package/skills/uipath-troubleshoot/references/activity-packages/cv-activities/playbooks/cv-cell-targeting-failures.md +111 -0
- package/skills/uipath-troubleshoot/references/activity-packages/cv-activities/playbooks/cv-element-not-found.md +125 -0
- package/skills/uipath-troubleshoot/references/activity-packages/cv-activities/playbooks/cv-get-text-empty-or-wrong-result.md +117 -0
- package/skills/uipath-troubleshoot/references/activity-packages/cv-activities/playbooks/cv-invalid-descriptor.md +102 -0
- package/skills/uipath-troubleshoot/references/activity-packages/cv-activities/playbooks/cv-scope-setup-failures.md +136 -0
- package/skills/uipath-troubleshoot/references/activity-packages/cv-activities/playbooks/cv-scroll-search-failures.md +114 -0
- package/skills/uipath-troubleshoot/references/activity-packages/cv-activities/playbooks/cv-server-auth-throttling-network.md +95 -0
- package/skills/uipath-troubleshoot/references/activity-packages/cv-activities/playbooks/cv-silent-failures-and-false-results.md +124 -0
- package/skills/uipath-troubleshoot/references/activity-packages/cv-activities/presentation.md +8 -0
- package/skills/uipath-troubleshoot/references/activity-packages/cv-activities/summary.md +15 -0
- package/skills/uipath-troubleshoot/references/activity-packages/database-activities/investigation_guide.md +42 -0
- package/skills/uipath-troubleshoot/references/activity-packages/database-activities/overview.md +41 -0
- package/skills/uipath-troubleshoot/references/activity-packages/database-activities/playbooks/connect-to-database-failures.md +104 -0
- package/skills/uipath-troubleshoot/references/activity-packages/database-activities/playbooks/execute-non-query-failures.md +97 -0
- package/skills/uipath-troubleshoot/references/activity-packages/database-activities/playbooks/execute-query-failures.md +134 -0
- package/skills/uipath-troubleshoot/references/activity-packages/database-activities/playbooks/start-transaction-failures.md +94 -0
- package/skills/uipath-troubleshoot/references/activity-packages/database-activities/presentation.md +10 -0
- package/skills/uipath-troubleshoot/references/activity-packages/database-activities/summary.md +10 -0
- package/skills/uipath-troubleshoot/references/activity-packages/excel-activities/investigation_guide.md +27 -9
- package/skills/uipath-troubleshoot/references/activity-packages/excel-activities/overview.md +51 -10
- package/skills/uipath-troubleshoot/references/activity-packages/excel-activities/playbooks/append-range-failures.md +146 -0
- package/skills/uipath-troubleshoot/references/activity-packages/excel-activities/playbooks/delete-range-failures.md +126 -0
- package/skills/uipath-troubleshoot/references/activity-packages/excel-activities/playbooks/excel-application-card-failures.md +139 -0
- package/skills/uipath-troubleshoot/references/activity-packages/excel-activities/playbooks/excel-application-scope-failures.md +118 -0
- package/skills/uipath-troubleshoot/references/activity-packages/excel-activities/playbooks/execute-macro-failures.md +149 -0
- package/skills/uipath-troubleshoot/references/activity-packages/excel-activities/playbooks/write-range-failures.md +145 -0
- package/skills/uipath-troubleshoot/references/activity-packages/excel-activities/presentation.md +12 -7
- package/skills/uipath-troubleshoot/references/activity-packages/excel-activities/summary.md +6 -0
- package/skills/uipath-troubleshoot/references/activity-packages/gsuite-activities/investigation_guide.md +1 -0
- package/skills/uipath-troubleshoot/references/activity-packages/gsuite-activities/overview.md +12 -4
- package/skills/uipath-troubleshoot/references/activity-packages/gsuite-activities/playbooks/connection-and-auth-failures.md +55 -0
- package/skills/uipath-troubleshoot/references/activity-packages/gsuite-activities/playbooks/drive-file-not-found.md +18 -10
- package/skills/uipath-troubleshoot/references/activity-packages/gsuite-activities/playbooks/get-newest-email-not-found.md +9 -8
- package/skills/uipath-troubleshoot/references/activity-packages/gsuite-activities/playbooks/invalid-or-null-input.md +68 -0
- package/skills/uipath-troubleshoot/references/activity-packages/gsuite-activities/playbooks/transient-and-timeout-errors.md +52 -0
- package/skills/uipath-troubleshoot/references/activity-packages/gsuite-activities/playbooks/upload-storage-quota-exceeded.md +1 -1
- package/skills/uipath-troubleshoot/references/activity-packages/gsuite-activities/summary.md +5 -2
- package/skills/uipath-troubleshoot/references/activity-packages/mail-activities/overview.md +28 -0
- package/skills/uipath-troubleshoot/references/activity-packages/mail-activities/playbooks/delete-outlook-mail-failures.md +105 -0
- package/skills/uipath-troubleshoot/references/activity-packages/mail-activities/playbooks/get-outlook-mail-failures.md +109 -0
- package/skills/uipath-troubleshoot/references/activity-packages/mail-activities/playbooks/move-outlook-mail-failures.md +97 -0
- package/skills/uipath-troubleshoot/references/activity-packages/mail-activities/playbooks/send-outlook-mail-failures.md +95 -0
- package/skills/uipath-troubleshoot/references/activity-packages/mail-activities/summary.md +8 -0
- package/skills/uipath-troubleshoot/references/activity-packages/o365-activities/investigation_guide.md +23 -0
- package/skills/uipath-troubleshoot/references/activity-packages/o365-activities/overview.md +9 -0
- package/skills/uipath-troubleshoot/references/activity-packages/o365-activities/playbooks/application-scope-misconfigured.md +49 -0
- package/skills/uipath-troubleshoot/references/activity-packages/o365-activities/playbooks/authentication-token-invalid.md +53 -0
- package/skills/uipath-troubleshoot/references/activity-packages/o365-activities/playbooks/copy-item-argument-null.md +34 -0
- package/skills/uipath-troubleshoot/references/activity-packages/o365-activities/playbooks/create-folder-invalid-path.md +36 -0
- package/skills/uipath-troubleshoot/references/activity-packages/o365-activities/playbooks/download-file-conversion-or-destination.md +40 -0
- package/skills/uipath-troubleshoot/references/activity-packages/o365-activities/playbooks/drive-item-not-found.md +1 -1
- package/skills/uipath-troubleshoot/references/activity-packages/o365-activities/playbooks/email-trigger-connection-event-failure.md +45 -0
- package/skills/uipath-troubleshoot/references/activity-packages/o365-activities/playbooks/insufficient-graph-scope.md +44 -0
- package/skills/uipath-troubleshoot/references/activity-packages/o365-activities/playbooks/legacy-mail-null-reference.md +43 -0
- package/skills/uipath-troubleshoot/references/activity-packages/o365-activities/playbooks/mail-folder-not-found.md +4 -3
- package/skills/uipath-troubleshoot/references/activity-packages/o365-activities/playbooks/mail-invalid-odata-query.md +43 -0
- package/skills/uipath-troubleshoot/references/activity-packages/o365-activities/playbooks/mail-message-not-found.md +45 -0
- package/skills/uipath-troubleshoot/references/activity-packages/o365-activities/playbooks/request-throttled.md +45 -0
- package/skills/uipath-troubleshoot/references/activity-packages/o365-activities/playbooks/send-mail-rejected.md +52 -0
- package/skills/uipath-troubleshoot/references/activity-packages/o365-activities/playbooks/transient-service-error.md +48 -0
- package/skills/uipath-troubleshoot/references/activity-packages/o365-activities/playbooks/upload-file-quota-or-size.md +47 -0
- package/skills/uipath-troubleshoot/references/activity-packages/o365-activities/summary.md +15 -1
- package/skills/uipath-troubleshoot/references/activity-packages/python-activities/investigation_guide.md +32 -0
- package/skills/uipath-troubleshoot/references/activity-packages/python-activities/overview.md +38 -0
- package/skills/uipath-troubleshoot/references/activity-packages/python-activities/playbooks/invoke-method-failures.md +57 -0
- package/skills/uipath-troubleshoot/references/activity-packages/python-activities/playbooks/invoke-python-method-pipe-is-broken.md +44 -0
- package/skills/uipath-troubleshoot/references/activity-packages/python-activities/playbooks/load-script-failures.md +62 -0
- package/skills/uipath-troubleshoot/references/activity-packages/python-activities/playbooks/python-path-not-valid.md +39 -0
- package/skills/uipath-troubleshoot/references/activity-packages/python-activities/playbooks/python-scope-architecture-version-mismatch.md +41 -0
- package/skills/uipath-troubleshoot/references/activity-packages/python-activities/playbooks/working-folder-relative-path.md +34 -0
- package/skills/uipath-troubleshoot/references/activity-packages/python-activities/presentation.md +9 -0
- package/skills/uipath-troubleshoot/references/activity-packages/python-activities/summary.md +12 -0
- package/skills/uipath-troubleshoot/references/activity-packages/system-activities/playbooks/get-asset-activity-bug-silent-failure.md +1 -1
- package/skills/uipath-troubleshoot/references/activity-packages/system-activities/playbooks/get-asset-robot-not-authenticated.md +29 -22
- package/skills/uipath-troubleshoot/references/activity-packages/system-activities/summary.md +1 -1
- package/skills/uipath-troubleshoot/references/activity-packages/web-activities/investigation_guide.md +30 -0
- package/skills/uipath-troubleshoot/references/activity-packages/web-activities/overview.md +36 -0
- package/skills/uipath-troubleshoot/references/activity-packages/web-activities/playbooks/deserialize-malformed-input.md +36 -0
- package/skills/uipath-troubleshoot/references/activity-packages/web-activities/playbooks/deserialize-null-input.md +35 -0
- package/skills/uipath-troubleshoot/references/activity-packages/web-activities/playbooks/deserialize-type-mismatch.md +40 -0
- package/skills/uipath-troubleshoot/references/activity-packages/web-activities/playbooks/http-client-null-reference.md +34 -0
- package/skills/uipath-troubleshoot/references/activity-packages/web-activities/playbooks/http-request-connection-failure.md +48 -0
- package/skills/uipath-troubleshoot/references/activity-packages/web-activities/playbooks/http-request-timeout.md +40 -0
- package/skills/uipath-troubleshoot/references/activity-packages/web-activities/playbooks/net-http-request-aggregate-failure.md +38 -0
- package/skills/uipath-troubleshoot/references/activity-packages/web-activities/summary.md +13 -0
- package/skills/uipath-troubleshoot/references/activity-packages/word-activities/investigation_guide.md +55 -0
- package/skills/uipath-troubleshoot/references/activity-packages/word-activities/overview.md +82 -0
- package/skills/uipath-troubleshoot/references/activity-packages/word-activities/playbooks/add-picture-failures.md +51 -0
- package/skills/uipath-troubleshoot/references/activity-packages/word-activities/playbooks/append-text-missing-container.md +31 -0
- package/skills/uipath-troubleshoot/references/activity-packages/word-activities/playbooks/append-text-zero-byte-file.md +32 -0
- package/skills/uipath-troubleshoot/references/activity-packages/word-activities/playbooks/export-pdf-com-hang.md +46 -0
- package/skills/uipath-troubleshoot/references/activity-packages/word-activities/playbooks/export-pdf-missing-output-dir.md +32 -0
- package/skills/uipath-troubleshoot/references/activity-packages/word-activities/playbooks/export-pdf-output-path-format.md +35 -0
- package/skills/uipath-troubleshoot/references/activity-packages/word-activities/playbooks/read-text-doc-format.md +30 -0
- package/skills/uipath-troubleshoot/references/activity-packages/word-activities/playbooks/read-text-missing-container.md +29 -0
- package/skills/uipath-troubleshoot/references/activity-packages/word-activities/playbooks/read-text-protected-view.md +32 -0
- package/skills/uipath-troubleshoot/references/activity-packages/word-activities/playbooks/replace-text-com-busy.md +35 -0
- package/skills/uipath-troubleshoot/references/activity-packages/word-activities/playbooks/replace-text-file-locked.md +33 -0
- package/skills/uipath-troubleshoot/references/activity-packages/word-activities/playbooks/replace-text-headers-textboxes-skipped.md +30 -0
- package/skills/uipath-troubleshoot/references/activity-packages/word-activities/playbooks/replace-text-length-limit.md +30 -0
- package/skills/uipath-troubleshoot/references/activity-packages/word-activities/playbooks/replace-text-loop-template-overwrite.md +31 -0
- package/skills/uipath-troubleshoot/references/activity-packages/word-activities/playbooks/replace-text-multiline-formatting.md +31 -0
- package/skills/uipath-troubleshoot/references/activity-packages/word-activities/playbooks/replace-text-silent-no-substitution.md +32 -0
- package/skills/uipath-troubleshoot/references/activity-packages/word-activities/playbooks/replace-text-version-mismatch.md +30 -0
- package/skills/uipath-troubleshoot/references/activity-packages/word-activities/playbooks/word-com-interop-failures.md +52 -0
- package/skills/uipath-troubleshoot/references/activity-packages/word-activities/playbooks/word-com-start-background-session0.md +50 -0
- package/skills/uipath-troubleshoot/references/activity-packages/word-activities/playbooks/word-export-pdf-com-wrong-thread.md +46 -0
- package/skills/uipath-troubleshoot/references/activity-packages/word-activities/playbooks/word-open-sharepoint-url-com-command-failed.md +45 -0
- package/skills/uipath-troubleshoot/references/activity-packages/word-activities/playbooks/word-scope-cannot-create-unknown-type.md +30 -0
- package/skills/uipath-troubleshoot/references/activity-packages/word-activities/playbooks/word-scope-com-not-installed.md +35 -0
- package/skills/uipath-troubleshoot/references/activity-packages/word-activities/playbooks/word-scope-file-corrupted.md +34 -0
- package/skills/uipath-troubleshoot/references/activity-packages/word-activities/playbooks/word-scope-file-path-not-found.md +36 -0
- package/skills/uipath-troubleshoot/references/activity-packages/word-activities/playbooks/word-scope-hangs-background-prompt.md +34 -0
- package/skills/uipath-troubleshoot/references/activity-packages/word-activities/presentation.md +11 -0
- package/skills/uipath-troubleshoot/references/activity-packages/word-activities/summary.md +38 -0
- package/skills/uipath-troubleshoot/references/products/integration-service/investigation_guide.md +9 -0
- package/skills/uipath-troubleshoot/references/products/integration-service/overview.md +7 -0
- package/skills/uipath-troubleshoot/references/products/integration-service/playbooks/connection-invalid.md +9 -0
- package/skills/uipath-troubleshoot/references/products/integration-service/playbooks/connector-aggregate-exception.md +30 -0
- package/skills/uipath-troubleshoot/references/products/integration-service/playbooks/connector-general-exception.md +43 -0
- package/skills/uipath-troubleshoot/references/products/integration-service/playbooks/connector-null-reference.md +36 -0
- package/skills/uipath-troubleshoot/references/products/integration-service/playbooks/connector-remote-exception.md +31 -0
- package/skills/uipath-troubleshoot/references/products/integration-service/playbooks/connector-runtime-exception.md +40 -0
- package/skills/uipath-troubleshoot/references/products/integration-service/summary.md +5 -0
- package/skills/uipath-troubleshoot/references/products/maestro/investigation_guide.md +2 -1
- package/skills/uipath-troubleshoot/references/products/orchestrator/investigation_guide.md +105 -10
- package/skills/uipath-troubleshoot/references/products/orchestrator/playbooks/job-faulted-logon-failure.md +1 -1
- package/skills/uipath-troubleshoot/references/summary.md +59 -3
- package/skills/uipath-troubleshoot/schemas/evidence.schema.md +48 -0
- package/skills/uipath-troubleshoot/schemas/hypotheses.schema.md +22 -7
- package/skills/uipath-troubleshoot/schemas/scope-check.schema.md +1 -1
- package/skills/uipath-troubleshoot/schemas/state.schema.md +81 -6
- package/version-manifest.json +2 -2
- package/skills/uipath-data-fabric/SKILL.md +0 -239
- package/skills/uipath-data-fabric/references/bulk-import.md +0 -73
- package/skills/uipath-data-fabric/references/entity-schema.md +0 -391
- package/skills/uipath-data-fabric/references/file-attachments.md +0 -65
- package/skills/uipath-maestro-bpmn/.maintenance/README.md +0 -241
- package/skills/uipath-maestro-bpmn/.maintenance/check-all.sh +0 -41
- package/skills/uipath-maestro-bpmn/.maintenance/check-anchors.sh +0 -83
- package/skills/uipath-maestro-bpmn/.maintenance/check-depth.sh +0 -132
- package/skills/uipath-maestro-bpmn/.maintenance/check-link-text.sh +0 -123
- package/skills/uipath-maestro-bpmn/.maintenance/check-links.sh +0 -70
- package/skills/uipath-maestro-bpmn/.maintenance/check-orphans.sh +0 -93
- package/skills/uipath-maestro-bpmn/.maintenance/check-plugin-pairs.sh +0 -39
- package/skills/uipath-maestro-bpmn/.maintenance/check-real-pack.sh +0 -79
- package/skills/uipath-maestro-bpmn/.maintenance/check-template.sh +0 -42
- package/skills/uipath-maestro-bpmn/.maintenance/check-uip-commands.sh +0 -266
- package/skills/uipath-maestro-bpmn/.maintenance/check-validation-fixtures.py +0 -1255
- package/skills/uipath-maestro-bpmn/.maintenance/check-validation-fixtures.sh +0 -8
- package/skills/uipath-maestro-bpmn/fixtures/validation/README.md +0 -94
- package/skills/uipath-maestro-bpmn/fixtures/validation/agent-invocation/agent-invocation.bpmn +0 -62
- package/skills/uipath-maestro-bpmn/fixtures/validation/agent-invocation/bindings_v2.json +0 -37
- package/skills/uipath-maestro-bpmn/fixtures/validation/agent-invocation/entry-points.json +0 -21
- package/skills/uipath-maestro-bpmn/fixtures/validation/agent-invocation/operate.json +0 -9
- package/skills/uipath-maestro-bpmn/fixtures/validation/agent-invocation/package-descriptor.json +0 -10
- package/skills/uipath-maestro-bpmn/fixtures/validation/agent-invocation/project.uiproj +0 -7
- package/skills/uipath-maestro-bpmn/fixtures/validation/contract-variants/bindings_v2.json +0 -68
- package/skills/uipath-maestro-bpmn/fixtures/validation/contract-variants/contract-variants.bpmn +0 -270
- package/skills/uipath-maestro-bpmn/fixtures/validation/contract-variants/entry-points.json +0 -25
- package/skills/uipath-maestro-bpmn/fixtures/validation/contract-variants/operate.json +0 -9
- package/skills/uipath-maestro-bpmn/fixtures/validation/contract-variants/package-descriptor.json +0 -10
- package/skills/uipath-maestro-bpmn/fixtures/validation/contract-variants/project.uiproj +0 -7
- package/skills/uipath-maestro-bpmn/fixtures/validation/gateway-boundary-error/bindings_v2.json +0 -19
- package/skills/uipath-maestro-bpmn/fixtures/validation/gateway-boundary-error/entry-points.json +0 -25
- package/skills/uipath-maestro-bpmn/fixtures/validation/gateway-boundary-error/gateway-boundary-error.bpmn +0 -91
- package/skills/uipath-maestro-bpmn/fixtures/validation/gateway-boundary-error/operate.json +0 -9
- package/skills/uipath-maestro-bpmn/fixtures/validation/gateway-boundary-error/package-descriptor.json +0 -10
- package/skills/uipath-maestro-bpmn/fixtures/validation/gateway-boundary-error/project.uiproj +0 -7
- package/skills/uipath-maestro-bpmn/fixtures/validation/imported-brownfield-preservation/bindings_v2.json +0 -4
- package/skills/uipath-maestro-bpmn/fixtures/validation/imported-brownfield-preservation/entry-points.json +0 -25
- package/skills/uipath-maestro-bpmn/fixtures/validation/imported-brownfield-preservation/imported-brownfield-preservation.bpmn +0 -63
- package/skills/uipath-maestro-bpmn/fixtures/validation/imported-brownfield-preservation/operate.json +0 -9
- package/skills/uipath-maestro-bpmn/fixtures/validation/imported-brownfield-preservation/package-descriptor.json +0 -10
- package/skills/uipath-maestro-bpmn/fixtures/validation/imported-brownfield-preservation/project.uiproj +0 -7
- package/skills/uipath-maestro-bpmn/fixtures/validation/integration-service-enriched/bindings_v2.json +0 -52
- package/skills/uipath-maestro-bpmn/fixtures/validation/integration-service-enriched/entry-points.json +0 -21
- package/skills/uipath-maestro-bpmn/fixtures/validation/integration-service-enriched/integration-service-enriched.bpmn +0 -65
- package/skills/uipath-maestro-bpmn/fixtures/validation/integration-service-enriched/operate.json +0 -9
- package/skills/uipath-maestro-bpmn/fixtures/validation/integration-service-enriched/package-descriptor.json +0 -10
- package/skills/uipath-maestro-bpmn/fixtures/validation/integration-service-enriched/project.uiproj +0 -7
- package/skills/uipath-maestro-bpmn/fixtures/validation/linear-process/bindings_v2.json +0 -4
- package/skills/uipath-maestro-bpmn/fixtures/validation/linear-process/entry-points.json +0 -25
- package/skills/uipath-maestro-bpmn/fixtures/validation/linear-process/linear-process.bpmn +0 -55
- package/skills/uipath-maestro-bpmn/fixtures/validation/linear-process/operate.json +0 -9
- package/skills/uipath-maestro-bpmn/fixtures/validation/linear-process/package-descriptor.json +0 -10
- package/skills/uipath-maestro-bpmn/fixtures/validation/linear-process/project.uiproj +0 -7
- package/skills/uipath-maestro-bpmn/fixtures/validation/registry-coverage-matrix/bindings_v2.json +0 -20
- package/skills/uipath-maestro-bpmn/fixtures/validation/registry-coverage-matrix/entry-points.json +0 -17
- package/skills/uipath-maestro-bpmn/fixtures/validation/registry-coverage-matrix/operate.json +0 -9
- package/skills/uipath-maestro-bpmn/fixtures/validation/registry-coverage-matrix/package-descriptor.json +0 -10
- package/skills/uipath-maestro-bpmn/fixtures/validation/registry-coverage-matrix/project.uiproj +0 -7
- package/skills/uipath-maestro-bpmn/fixtures/validation/registry-coverage-matrix/registry-coverage-matrix.bpmn +0 -207
- package/skills/uipath-maestro-bpmn/fixtures/validation/subprocess-multi-instance/bindings_v2.json +0 -4
- package/skills/uipath-maestro-bpmn/fixtures/validation/subprocess-multi-instance/entry-points.json +0 -33
- package/skills/uipath-maestro-bpmn/fixtures/validation/subprocess-multi-instance/operate.json +0 -9
- package/skills/uipath-maestro-bpmn/fixtures/validation/subprocess-multi-instance/package-descriptor.json +0 -10
- package/skills/uipath-maestro-bpmn/fixtures/validation/subprocess-multi-instance/project.uiproj +0 -7
- package/skills/uipath-maestro-bpmn/fixtures/validation/subprocess-multi-instance/subprocess-multi-instance.bpmn +0 -94
- package/skills/uipath-maestro-bpmn/fixtures/validation/wrapper-family-contract/bindings_v2.json +0 -124
- package/skills/uipath-maestro-bpmn/fixtures/validation/wrapper-family-contract/entry-points.json +0 -25
- package/skills/uipath-maestro-bpmn/fixtures/validation/wrapper-family-contract/operate.json +0 -9
- package/skills/uipath-maestro-bpmn/fixtures/validation/wrapper-family-contract/package-descriptor.json +0 -10
- package/skills/uipath-maestro-bpmn/fixtures/validation/wrapper-family-contract/project.uiproj +0 -7
- package/skills/uipath-maestro-bpmn/fixtures/validation/wrapper-family-contract/wrapper-family-contract.bpmn +0 -151
- package/skills/uipath-maestro-bpmn/references/author/CAPABILITY.md +0 -141
- package/skills/uipath-maestro-bpmn/references/author/references/brownfield.md +0 -48
- package/skills/uipath-maestro-bpmn/references/author/references/editing-operations.md +0 -75
- package/skills/uipath-maestro-bpmn/references/author/references/greenfield.md +0 -41
- package/skills/uipath-maestro-bpmn/references/author/references/planning-arch.md +0 -82
- package/skills/uipath-maestro-bpmn/references/author/references/planning-impl.md +0 -104
- package/skills/uipath-maestro-bpmn/references/author/references/plugins/agents/impl.md +0 -34
- package/skills/uipath-maestro-bpmn/references/author/references/plugins/agents/planning.md +0 -38
- package/skills/uipath-maestro-bpmn/references/author/references/plugins/api-workflows/impl.md +0 -37
- package/skills/uipath-maestro-bpmn/references/author/references/plugins/api-workflows/planning.md +0 -28
- package/skills/uipath-maestro-bpmn/references/author/references/plugins/business-rules/impl.md +0 -36
- package/skills/uipath-maestro-bpmn/references/author/references/plugins/business-rules/planning.md +0 -29
- package/skills/uipath-maestro-bpmn/references/author/references/plugins/call-activity-subprocess/impl.md +0 -67
- package/skills/uipath-maestro-bpmn/references/author/references/plugins/call-activity-subprocess/planning.md +0 -29
- package/skills/uipath-maestro-bpmn/references/author/references/plugins/connectors/impl.md +0 -29
- package/skills/uipath-maestro-bpmn/references/author/references/plugins/connectors/planning.md +0 -33
- package/skills/uipath-maestro-bpmn/references/author/references/plugins/gateways/impl.md +0 -32
- package/skills/uipath-maestro-bpmn/references/author/references/plugins/gateways/planning.md +0 -34
- package/skills/uipath-maestro-bpmn/references/author/references/plugins/hitl/impl.md +0 -42
- package/skills/uipath-maestro-bpmn/references/author/references/plugins/hitl/planning.md +0 -30
- package/skills/uipath-maestro-bpmn/references/author/references/plugins/integration-service/impl.md +0 -134
- package/skills/uipath-maestro-bpmn/references/author/references/plugins/integration-service/planning.md +0 -67
- package/skills/uipath-maestro-bpmn/references/author/references/plugins/multi-instance/impl.md +0 -50
- package/skills/uipath-maestro-bpmn/references/author/references/plugins/multi-instance/planning.md +0 -29
- package/skills/uipath-maestro-bpmn/references/author/references/plugins/queues/impl.md +0 -29
- package/skills/uipath-maestro-bpmn/references/author/references/plugins/queues/planning.md +0 -29
- package/skills/uipath-maestro-bpmn/references/author/references/plugins/rpa-jobs/impl.md +0 -35
- package/skills/uipath-maestro-bpmn/references/author/references/plugins/rpa-jobs/planning.md +0 -29
- package/skills/uipath-maestro-bpmn/references/author/references/plugins/script/impl.md +0 -118
- package/skills/uipath-maestro-bpmn/references/author/references/plugins/script/planning.md +0 -30
- package/skills/uipath-maestro-bpmn/references/author/references/plugins/sequence-flows/impl.md +0 -30
- package/skills/uipath-maestro-bpmn/references/author/references/plugins/sequence-flows/planning.md +0 -30
- package/skills/uipath-maestro-bpmn/references/author/references/plugins/service-tasks/impl.md +0 -33
- package/skills/uipath-maestro-bpmn/references/author/references/plugins/service-tasks/planning.md +0 -31
- package/skills/uipath-maestro-bpmn/references/author/references/plugins/signals/impl.md +0 -33
- package/skills/uipath-maestro-bpmn/references/author/references/plugins/signals/planning.md +0 -46
- package/skills/uipath-maestro-bpmn/references/author/references/plugins/start-end-events/impl.md +0 -59
- package/skills/uipath-maestro-bpmn/references/author/references/plugins/start-end-events/planning.md +0 -37
- package/skills/uipath-maestro-bpmn/references/author/references/plugins/waits-triggers/impl.md +0 -40
- package/skills/uipath-maestro-bpmn/references/author/references/plugins/waits-triggers/planning.md +0 -34
- package/skills/uipath-maestro-bpmn/references/author/references/supported-elements.md +0 -123
- package/skills/uipath-maestro-bpmn/references/author/references/task-recipes/README.md +0 -29
- package/skills/uipath-maestro-bpmn/references/author/references/task-recipes/agent-job.md +0 -36
- package/skills/uipath-maestro-bpmn/references/author/references/task-recipes/api-workflow.md +0 -29
- package/skills/uipath-maestro-bpmn/references/author/references/task-recipes/business-rule.md +0 -18
- package/skills/uipath-maestro-bpmn/references/author/references/task-recipes/call-activity.md +0 -56
- package/skills/uipath-maestro-bpmn/references/author/references/task-recipes/hitl.md +0 -17
- package/skills/uipath-maestro-bpmn/references/author/references/task-recipes/http-request.md +0 -119
- package/skills/uipath-maestro-bpmn/references/author/references/task-recipes/queue.md +0 -21
- package/skills/uipath-maestro-bpmn/references/author/references/task-recipes/rpa-job.md +0 -23
- package/skills/uipath-maestro-bpmn/references/author/references/validation.md +0 -118
- package/skills/uipath-maestro-bpmn/references/shared/bpmn-xml-contract.md +0 -197
- package/skills/uipath-maestro-bpmn/references/shared/cli-conventions.md +0 -46
- package/skills/uipath-maestro-bpmn/references/shared/error-handling.md +0 -82
- package/skills/uipath-maestro-bpmn/references/shared/variables-bindings-expressions.md +0 -150
- package/skills/uipath-maestro-bpmn/references/shared/wrapper-shells.md +0 -554
- /package/skills/uipath-maestro-bpmn/references/{shared/expression-authoring.md → expression-authoring.md} +0 -0
- /package/skills/uipath-maestro-bpmn/references/{shared/public-safety.md → public-safety.md} +0 -0
- /package/{agents → skills/uipath-rpa/agents}/uipath-project-discovery-agent.md +0 -0
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
---
|
|
2
|
+
confidence: medium
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Excel Application Scope (Classic) COM-Interop Failures
|
|
6
|
+
|
|
7
|
+
## Context
|
|
8
|
+
|
|
9
|
+
The Classic `Excel Application Scope` (class `UiPath.Excel.Activities.ExcelApplicationScope`) opens a workbook through Microsoft Excel via COM Interop. Unlike the Modern `Use Excel File` card (which defaults to the OpenXML provider and only falls back to COM when COM-forcing properties are set), Classic is **COM-only** — every execution spins up an `Excel.Application` COM server on the host. That hard COM dependency produces a family of failures that are specific to the Classic surface and do not occur on a pure-OpenXML Modern card.
|
|
10
|
+
|
|
11
|
+
This playbook covers the **COM-interop-environment** failures of the Classic scope: the host has Excel, but the COM layer between UiPath and `EXCEL.EXE` is broken, contended, or hijacked. Three surfaces:
|
|
12
|
+
|
|
13
|
+
1. **COM registration corruption** — Excel IS installed, but the `Excel.Application` COM class / type library registration is broken (typically after an Office upgrade or repair). The scope throws "Make sure Excel is installed" even though Excel is present.
|
|
14
|
+
2. **Workbook acquisition blocked** — an orphan `EXCEL.EXE` from a prior crashed job (or a user-opened instance) still holds the target workbook, so the scope can't acquire it.
|
|
15
|
+
3. **COM Add-in interface clash** — a COM add-in loaded into the Excel instance (the UiPath Excel Add-in or a third-party add-in) corrupts the QueryInterface negotiation, producing an `InvalidCastException` on `System.__ComObject`.
|
|
16
|
+
|
|
17
|
+
> **Out of scope — cross-reference, don't re-diagnose here.** Failures the Classic scope SHARES with the Modern card live in [`./excel-application-card-failures.md`](./excel-application-card-failures.md): true Excel-not-installed (host has no Excel at all → that playbook's branch 1), empty / illegal `WorkbookPath` (branch 2), COM/RPC races across MULTIPLE scopes without an `Excel Process Scope` (branch 3), a child activity dropped outside any scope — "must be placed inside Excel Application Scope" (branch 4), and sensitivity-label rejection (branch 5). This playbook's branches assume a SINGLE Classic scope whose own COM acquisition fails on a host that DOES have Excel installed.
|
|
18
|
+
|
|
19
|
+
What this looks like — Classic Excel Application Scope COM-interop faults surface as one of these signatures:
|
|
20
|
+
|
|
21
|
+
- `UiPath.Excel.BusinessException: Error opening workbook. Make sure Excel is installed.` with an inner `COMException` carrying `0x8002801D TYPE_E_LIBNOTREGISTERED` ("Library not registered") or `0x80040154 REGDB_E_CLASSNOTREG` **on a host where Excel IS installed** — the interop / type-library registration is broken. Branch 1.
|
|
22
|
+
- `UiPath.Excel.BusinessException: Failed opening the Excel file. Possible reasons: file is corrupt, already used by another process or password protected.` — an orphan `EXCEL.EXE` or a user-owned Excel instance still holds the target workbook. Branch 2.
|
|
23
|
+
- `System.InvalidCastException: Unable to cast COM object of type 'System.__ComObject' to interface type 'Microsoft.Office.Interop.Excel.<Interface>'. ... QueryInterface ... failed due to the following error: No such interface supported (Exception from HRESULT: 0x80004002 (E_NOINTERFACE))` — a COM add-in (commonly `UiPath.Integration.ExcelAddin`) hijacked or corrupted the interop interface. Branch 3.
|
|
24
|
+
|
|
25
|
+
What can cause it (cause-branches — pick the right one from evidence):
|
|
26
|
+
|
|
27
|
+
1. **COM registration corruption (Excel present, interop broken)** — Excel is installed and launches interactively, but the `Excel.Application` CLSID or its type library (`TYPE_E_LIBNOTREGISTERED`) isn't correctly registered for COM activation. Almost always follows an **Office version change**: an in-place upgrade to Microsoft 365 / Office 2024 click-to-run, a side-by-side install of a second Office version, or an interrupted Office update / repair. Stale `TypeLib` keys from the previous Office build point at a version that no longer exists, so `CoCreateInstance` succeeds at the class level but interface/typelib resolution fails. The Classic scope rewraps the COM error as the canonical "Make sure Excel is installed."
|
|
28
|
+
2. **Workbook held by another EXCEL.EXE** — the target workbook is locked. Two sub-cases: (a) an **orphan** `EXCEL.EXE` — a prior job's scope crashed or was force-killed and left a headless `EXCEL.EXE` owned by the Robot's session still holding the file; (b) a **user-owned** instance — someone has the workbook open in the interactive Excel UI on the same host (common on attended / RDP-shared machines). Either way the file handle is exclusive and the new scope can't open it.
|
|
29
|
+
3. **COM Add-in interface clash** — when the scope launches `EXCEL.EXE`, Excel auto-loads its registered COM add-ins. A misbehaving add-in — frequently the `UiPath.Integration.ExcelAddin` (the Studio "Excel Add-in" used for design-time recording) loaded on a runtime host where it shouldn't be, or a third-party add-in — interferes with the interop proxy so the `QueryInterface` for `Microsoft.Office.Interop.Excel.Application` (or `Workbook` / `Worksheet`) returns `E_NOINTERFACE`. The marshaled `__ComObject` can't be cast to the expected interop interface and the scope throws `InvalidCastException`.
|
|
30
|
+
|
|
31
|
+
What to look for:
|
|
32
|
+
|
|
33
|
+
- **The exception class + inner HRESULT** — first signal. `BusinessException: Error opening workbook. Make sure Excel is installed.` + inner `0x8002801D TYPE_E_LIBNOTREGISTERED` (or `0x80040154` despite a confirmed install) → branch 1. `BusinessException: Failed opening the Excel file. ... already used by another process` → branch 2. `InvalidCastException` on `System.__ComObject` + `0x80004002 E_NOINTERFACE` → branch 3.
|
|
34
|
+
- **Host Excel install state** — the fork between this playbook's branch 1 and the card playbook's branch 1. If `HKLM:\Software\Microsoft\Office\*\Excel\InstallRoot` is **present** and `excel.exe` launches interactively, Excel IS installed → registration corruption (this playbook, branch 1). If there's no install at all → that's [`./excel-application-card-failures.md`](./excel-application-card-failures.md) branch 1, not this one.
|
|
35
|
+
- **Recent Office change** — was Office upgraded, repaired, or had a second version installed shortly before the failures started? "Worked last week, broke after the M365 rollout" is the branch 1 fingerprint.
|
|
36
|
+
- **Host process list at failure time** — `Get-Process EXCEL` / `tasklist /FI "IMAGENAME eq EXCEL.EXE"` on the host. A lingering `EXCEL.EXE` (especially one owned by the Robot's session with no visible window) is the branch 2 signal. Distinguish an **orphan** (no UI, Robot-session-owned, left by a prior job) from a **user-owned** instance (interactive UI, logged-in user's session).
|
|
37
|
+
- **Loaded COM add-ins** — `HKLM:\Software\Microsoft\Office\Excel\Addins\` and `HKCU:\Software\Microsoft\Office\Excel\Addins\` enumerate registered add-ins and their `LoadBehavior`. `UiPath.Integration.ExcelAddin` with `LoadBehavior=3` on a runtime host is the branch 3 signal.
|
|
38
|
+
|
|
39
|
+
## Investigation
|
|
40
|
+
|
|
41
|
+
Go in this order — cheaper checks first.
|
|
42
|
+
|
|
43
|
+
1. **Capture the exact error, the inner HRESULT, and the surface.** From `uip or jobs get <job-key> --output json` → `Info`: the `BusinessException` / `InvalidCastException` message, the **inner exception HRESULT**, and the full stack. From workflow source: confirm the scope is the Classic `<uix:ExcelApplicationScope>` element (NOT `<uix:UseExcelFile>`) and that there's a SINGLE scope (multiple scopes racing → card playbook branch 3, not here). From `project.json`: the `UiPath.Excel.Activities` version. From job logs: any Trace lines naming the host's Excel state or the acquisition step.
|
|
44
|
+
|
|
45
|
+
2. **Branch the diagnostic on the signature.**
|
|
46
|
+
- `BusinessException: Make sure Excel is installed.` + inner `TYPE_E_LIBNOTREGISTERED` (`0x8002801D`) or `REGDB_E_CLASSNOTREG` (`0x80040154`) → could be this playbook's branch 1 (registration broken) OR the card playbook's branch 1 (Excel truly absent). Disambiguate at step 3.
|
|
47
|
+
- `BusinessException: Failed opening the Excel file. ... already used by another process` → branch 2; go to step 4.
|
|
48
|
+
- `InvalidCastException` on `System.__ComObject` + `E_NOINTERFACE` (`0x80004002`) → branch 3; go to step 5.
|
|
49
|
+
|
|
50
|
+
3. **Disambiguate branch 1 (registration corruption) from "Excel truly not installed."** This is the decisive fork:
|
|
51
|
+
- **Is Excel installed on the host?** Check `Get-ItemProperty 'HKLM:\Software\Microsoft\Office\*\Excel\InstallRoot'` (PowerShell) and whether `excel.exe` exists under `C:\Program Files\Microsoft Office\root\Office16\` (or equivalent). **No install at all → STOP: this is [`./excel-application-card-failures.md`](./excel-application-card-failures.md) branch 1**, not registration corruption.
|
|
52
|
+
- **Does Excel launch interactively?** Have the host operator open Excel from the Start menu. If it opens cleanly, the binary is fine and the problem is COM **activation** registration, not the install — branch 1 (this playbook) confirmed.
|
|
53
|
+
- **Was Office recently changed?** Check for a recent upgrade (M365 / Office 2024 click-to-run), a second Office version, or an interrupted update / repair. A version change immediately before the failures is the branch 1 fingerprint.
|
|
54
|
+
- **Is the inner HRESULT `TYPE_E_LIBNOTREGISTERED` (`0x8002801D`)?** That HRESULT specifically means the type library isn't registered — strong evidence of stale / orphaned `TypeLib` keys from a previous Office build, i.e., registration corruption rather than a missing install.
|
|
55
|
+
|
|
56
|
+
4. **Confirm branch 2 (workbook held by another EXCEL.EXE).** Check:
|
|
57
|
+
- **Host process snapshot at failure time** — `Get-Process EXCEL` on the host. A lingering `EXCEL.EXE` confirms the lock holder exists. (The timestamp matters — the locking process may be gone by the time you check; correlate with the job's run time.)
|
|
58
|
+
- **Orphan vs. user-owned** — an orphan has no visible window and is owned by the Robot's session (left by a prior crashed / force-killed job). A user-owned instance has an interactive UI in a logged-in user's session. `Get-Process EXCEL | Select-Object Id, SI, MainWindowTitle` (the `SI` session id and empty `MainWindowTitle` flag an orphan).
|
|
59
|
+
- **File handle** — if Sysinternals is available, `handle.exe -a "<workbook-path>"` names the exact process holding the file.
|
|
60
|
+
- **Prior-job correlation** — check the Robot's `Execution.log` (`%LocalAppData%\UiPath\Logs\Execution.log`) for a prior job on the same host that opened this workbook and ended abnormally (faulted / killed) without a clean scope-close. That prior job is the orphan's origin.
|
|
61
|
+
|
|
62
|
+
5. **Confirm branch 3 (COM Add-in interface clash).** Check:
|
|
63
|
+
- **Inner HRESULT** — `0x80004002 E_NOINTERFACE` inside an `InvalidCastException` on `System.__ComObject` is the fingerprint. The message names the interop interface it failed to cast to (`Microsoft.Office.Interop.Excel.Application` / `Workbook` / `Worksheet`).
|
|
64
|
+
- **Registered Excel COM add-ins** — enumerate `HKLM:\Software\Microsoft\Office\Excel\Addins\` and `HKCU:\Software\Microsoft\Office\Excel\Addins\`. Look for `UiPath.Integration.ExcelAddin` (the Studio Excel Add-in, meant for design-time recording — not for runtime hosts) or any third-party add-in with `LoadBehavior=3` (load at startup).
|
|
65
|
+
- **Reproduce by isolating add-ins** — launch Excel on the host with `excel.exe /safe` (add-ins disabled). If a manual COM open then succeeds where the scope failed, an add-in is the culprit.
|
|
66
|
+
|
|
67
|
+
The root cause is **which of the three COM-interop surfaces** the failure maps to: broken interop registration on an installed Excel (branch 1), the workbook held by another `EXCEL.EXE` (branch 2), or a COM add-in corrupting the interop interface (branch 3). A confirmed finding names the surface plus its decisive evidence — the inner HRESULT, the host's install-vs-registration state, the lock-holding process, or the offending add-in.
|
|
68
|
+
|
|
69
|
+
## Resolution
|
|
70
|
+
|
|
71
|
+
Map the branch identified in Investigation to the fix:
|
|
72
|
+
|
|
73
|
+
- **Branch 1 — COM registration corruption (Excel present, interop broken):**
|
|
74
|
+
- **Office Online Repair (canonical fix):** Windows Settings → Apps → Installed Apps → Microsoft Office → Modify → **Online Repair**. This re-registers the Excel COM classes and type libraries from the current build and clears stale registration from the prior version. Requires admin rights on the Robot host. This is the right first move when the breakage followed an Office upgrade.
|
|
75
|
+
- **UiPath "Repair Tool for Microsoft Office":** UiPath Studio → Tools → "Repair Tool for Microsoft Office". Lighter than Online Repair; re-registers the Excel interop components without a full Office repair. Quick to try first if you don't have admin rights for Online Repair.
|
|
76
|
+
- **Targeted `TypeLib` cleanup (only if the error is `TYPE_E_LIBNOTREGISTERED` and repair didn't resolve it):** stale `TypeLib` keys from a previous Office build can survive a repair. **Back up the registry key before editing.** In `regedit`, under `HKCR\TypeLib\`, the Excel type library GUID is `{00020813-0000-0000-C000-000000000046}`; ensure its version subkeys point to the **currently installed** Office version's `excel.exe` / `EXCEL.EXE` typelib path and remove orphaned version subkeys that reference an uninstalled build. Editing the registry is the last resort — prefer Online Repair, which does this safely and completely.
|
|
77
|
+
- **Cross-branch alternative — drop COM entirely:** if the workflow doesn't actually need Excel COM features (formula recalc, macros, formatting interaction), migrate off the Classic scope to Workbook activities or a Modern OpenXML `Use Excel File` card. See [`./excel-application-card-failures.md`](./excel-application-card-failures.md) branch 1 resolution for the migration steps. This sidesteps the whole COM-registration surface.
|
|
78
|
+
|
|
79
|
+
- **Branch 2 — Workbook held by another EXCEL.EXE:**
|
|
80
|
+
- **Clear orphan processes as a recovery step:** add a `Kill Process` activity with `ProcessName = "EXCEL"` immediately BEFORE the `Excel Application Scope` to terminate stray headless instances. **Caveat:** this is a blunt instrument — it also kills any Excel the interactive user has open. Use it only on dedicated unattended Robot hosts where no human is working in Excel, never on attended / shared machines.
|
|
81
|
+
- **Fix the root cause of orphans (preferred):** orphans come from scopes that didn't close cleanly. Ensure the failing/aborting upstream workflow closes its Excel scope properly (don't `Application.Quit` from a child macro — see [`./execute-macro-failures.md`](./execute-macro-failures.md) branch 3); wrap multi-scope workflows in an `Excel Process Scope` so EXCEL.EXE lifecycle is governed; avoid force-killing jobs mid-scope.
|
|
82
|
+
- **User-owned lock:** if the holder is an interactive user's Excel instance, the file simply can't be opened exclusively while it's in use. Coordinate so the workbook isn't manually open during automation runs, point the automation at a copy, or open read-only (`ReadOnly = True` on the scope) if the workflow only reads.
|
|
83
|
+
- **Network-share lock:** if the workbook is on a UNC share, the lock may be held by a different host. The lock owner (`.~lock` / owner file, or `handle.exe` on the holding host) names it; resolve at the share level.
|
|
84
|
+
|
|
85
|
+
- **Branch 3 — COM Add-in interface clash:**
|
|
86
|
+
- **Disable the offending COM add-in (canonical fix):** open Excel manually on the host → File → Options → Add-ins → at the bottom set the **Manage** dropdown to **COM Add-ins** → **Go** → uncheck `UiPath.Integration.ExcelAddin` (and any suspect third-party add-in) → OK. Restart the automation. The Studio Excel Add-in is a design-time recording aid; it should not be loaded on a runtime Robot host.
|
|
87
|
+
- **Disable per-machine via registry (for unattended provisioning):** set `LoadBehavior` to `0` under the add-in's key in `HKLM:\Software\Microsoft\Office\Excel\Addins\UiPath.Integration.ExcelAddin` (and the `HKCU` hive for the Robot user). This prevents the add-in from loading at Excel startup across jobs without manual UI steps — bake it into the host-provisioning runbook.
|
|
88
|
+
- **Confirm with `/safe`:** validate the fix by launching `excel.exe /safe` and confirming a manual COM open succeeds; then re-run the job with the add-in disabled.
|
|
89
|
+
- **Third-party add-in that's required:** if the clashing add-in genuinely must stay loaded, isolate Excel automation to a host without it, or move the workflow to the Workbook surface (no `EXCEL.EXE`, so no add-in loads at all).
|
|
90
|
+
|
|
91
|
+
## Anti-patterns (what NOT to do)
|
|
92
|
+
|
|
93
|
+
Common advice for Classic Excel Application Scope COM failures contains workarounds that mask the fault. The agent should NOT recommend any of these as a primary resolution.
|
|
94
|
+
|
|
95
|
+
- **"Add a `Delay` before the Excel Application Scope."** A Delay does nothing for a broken COM registration (branch 1) or an add-in clash (branch 3) — the registry state and loaded add-ins are identical a few seconds later. For an orphan-process lock (branch 2) a Delay only "helps" if the orphan happens to exit during the window, which is non-deterministic. Fix the registration, clear the orphan deterministically, or disable the add-in instead.
|
|
96
|
+
|
|
97
|
+
- **"Wrap the scope in a bare `Try Catch` and continue on error."** Catching `BusinessException` / `InvalidCastException` and only logging turns the failure into a silent skip — the child activities don't run and the workflow proceeds with missing data. All three branches here are deterministic configuration / environment faults; suppressing them hides a host that will fail every run. Use Try-Catch only with a real recovery path (kill orphan + retry, notify ops, fall back to Workbook activities).
|
|
98
|
+
|
|
99
|
+
- **"Reinstall Office from scratch to fix the registration error."** For branch 1, a full uninstall/reinstall is disproportionate and slow. **Online Repair** re-registers the COM classes and type libraries without the downtime and license-reactivation churn of a reinstall. Reserve a full reinstall for cases where repair demonstrably fails.
|
|
100
|
+
|
|
101
|
+
- **"`Kill Process EXCEL` unconditionally at the start of every workflow."** On a shared / attended host this destroys the interactive user's open workbooks (data loss). It's a valid recovery ONLY on dedicated unattended hosts. Even there, prefer fixing what leaves orphans (clean scope close, no macro `Application.Quit`, `Excel Process Scope` for multi-scope flows) over routinely killing processes.
|
|
102
|
+
|
|
103
|
+
- **"Set `Visible: True` to see what's happening."** On unattended hosts the desktop session often isn't rendered, so the property has no diagnostic value, and it adds COM-UI overhead. It doesn't surface registration corruption, locks, or add-in clashes — use the host's process list, registry, and `excel.exe /safe` instead.
|
|
104
|
+
|
|
105
|
+
## Prevention (cross-branch)
|
|
106
|
+
|
|
107
|
+
- **Pin the Office build on Robot hosts** and route Office upgrades through a change process that includes an Excel-COM smoke test (a workflow that opens and reads a workbook via Classic scope) after every Office update. This catches branch 1 registration breakage before production jobs hit it.
|
|
108
|
+
- **Strip the Studio Excel Add-in from runtime hosts.** `UiPath.Integration.ExcelAddin` is a design-time tool; set its `LoadBehavior=0` (or don't install it) on unattended Robot hosts to prevent branch 3 clashes. Document this in the host-provisioning runbook.
|
|
109
|
+
- **Govern EXCEL.EXE lifecycle** to prevent orphans (branch 2): wrap multi-scope workflows in an `Excel Process Scope`, never tear down Excel from a child macro (`Application.Quit` / `Workbooks.Close`), and avoid force-killing jobs while a scope is open.
|
|
110
|
+
- **Prefer the lowest-COM surface that meets the requirement.** If a workflow doesn't need Excel COM features, use Workbook activities or a Modern OpenXML `Use Excel File` card — that eliminates the entire COM-interop failure surface (all three branches here) on hosts that don't otherwise need Excel.
|
|
111
|
+
- **For attended / shared hosts,** never bake an unconditional `Kill Process EXCEL` into workflows; coordinate workbook access so automation and humans don't contend for the same file.
|
|
112
|
+
|
|
113
|
+
## Related
|
|
114
|
+
|
|
115
|
+
- [`./excel-application-card-failures.md`](./excel-application-card-failures.md) — the SHARED scope-container playbook. Excel **truly not installed** (branch 1 there), empty / illegal `WorkbookPath` (branch 2), COM/RPC **races across multiple scopes** (branch 3), **child activity outside any scope** (branch 4), and **sensitivity-label** rejection (branch 5) all live there. This playbook is the Classic-COM-interop complement: a single installed-but-broken / contended / hijacked COM layer.
|
|
116
|
+
- [`./execute-macro-failures.md`](./execute-macro-failures.md) — branch 3 there (macro tears down Excel via `Application.Quit` / `Workbooks.Close`) is a common upstream cause of the orphan / disconnected-process state that this playbook's branch 2 observes downstream.
|
|
117
|
+
- [`../overview.md`](../overview.md) — package overview; the OpenXML-vs-COM provider model and the Classic-scope-is-COM-only distinction are load-bearing for all three branches here.
|
|
118
|
+
- [`../summary.md`](../summary.md) — navigation across all Excel Activities playbooks.
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
---
|
|
2
|
+
confidence: medium
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Execute Macro / Run Spreadsheet Macro Failures
|
|
6
|
+
|
|
7
|
+
## Context
|
|
8
|
+
|
|
9
|
+
A `UiPath.Excel.Activities` Execute Macro activity (classic `ExecuteMacro`, or modern `Run Spreadsheet Macro` under `Use Excel File`) runs a VBA macro inside the open workbook. The activity bridges UiPath's managed runtime to Excel via COM; failures can originate in the macro's VBA code, in Excel's COM dispatch, in the Robot host's Excel configuration, or in the bridge between the two.
|
|
10
|
+
|
|
11
|
+
What this looks like — most failures surface as `System.Runtime.InteropServices.COMException`, often with one of these HRESULTs / messages:
|
|
12
|
+
|
|
13
|
+
- `0x80020009 (DISP_E_EXCEPTION)` — "Exception occurred." The macro itself threw a VBA error via `IDispatch`. The inner VBA error (Object required, Subscript out of range, Type mismatch, Application-defined or object-defined error) is the load-bearing detail.
|
|
14
|
+
- `0x800A03EC` — generic Excel error during macro execution.
|
|
15
|
+
- `0x800AC472` — apartment-threading violation from concurrent COM access.
|
|
16
|
+
- `Cannot run the macro '<name>'. The macro may not be available in this workbook or all macros may be disabled.` — Excel's own error message wrapped in a COMException.
|
|
17
|
+
|
|
18
|
+
Failures may also surface as:
|
|
19
|
+
- Job hangs with no exception — Excel modal dialog (`MsgBox`, `InputBox`, VBA `Stop` / `Debug.Print` break, "End/Continue" recovery dialog) waiting for a user response that the Robot's unattended session cannot provide.
|
|
20
|
+
- `UiPath.Excel.BusinessException` — Excel COM rejected the macro call before it ran.
|
|
21
|
+
|
|
22
|
+
What can cause it (cause-branches — pick the right one from evidence):
|
|
23
|
+
|
|
24
|
+
1. **Macro name not found in the workbook** — configured `Macro` property is a name (`MyModule.RunImport` or `RunImport`) that does not exist in any code module of the open workbook. Symptom: COMException with message `Cannot run the macro '<name>'. The macro may not be available in this workbook or all macros may be disabled.` Causes: typo, macro renamed upstream, macro lives in a different workbook / add-in, module-qualifier mismatch.
|
|
25
|
+
2. **VBA error inside the macro (DISP_E_EXCEPTION)** — the macro ran but its VBA code threw. The activity sees the COM `DISP_E_EXCEPTION` wrapper but the inner detail is the VBA error: `Run-time error '91': Object variable or With block variable not set`, `Run-time error '9': Subscript out of range`, `Run-time error '13': Type mismatch`, `Run-time error '1004': Application-defined or object-defined error`, etc. Causes: bug in the macro itself, assumption about workbook contents that doesn't hold at runtime, dependency on a worksheet / range / named cell that isn't there.
|
|
26
|
+
3. **Macro tears down the Excel instance** — the VBA code calls `Workbooks.Close`, `ActiveWorkbook.Close`, `Application.Quit`, `ThisWorkbook.Close`, or similar. The UiPath Excel Application Scope (or `Use Excel File` with COM) owns the Excel instance; when the macro shuts it down, the next activity finds the COM object gone. Symptom: COMException with HRESULT like `0x80010108 (RPC_E_DISCONNECTED)` on the NEXT activity, not necessarily the macro itself. Macro may have logged "succeeded" before tearing down.
|
|
27
|
+
4. **Modal dialog from macro** — the VBA code displays `MsgBox`, `InputBox`, or a custom `UserForm`, OR Excel's own dialog (e.g., "There is already data in [cell]. Do you want to replace it?" from a write that conflicts) interrupts execution. Symptom: job hangs indefinitely; no exception; the Robot eventually times out (turn timeout, `UIPATH_SESSION_TIMEOUT`, or operator manual kill). Excel COM cannot respond while a modal dialog is open.
|
|
28
|
+
5. **Macros disabled by Trust Center policy on the Robot host** — Excel's Trust Center on the Robot user's profile has `Disable all macros without notification` (or `Disable VBA macros except digitally signed`) and the workbook's macros are not in a trusted location or signed by a trusted publisher. Symptom: COMException `Cannot run the macro '<name>'. The macro may not be available in this workbook or all macros may be disabled.` Same error string as branch 1, but the macro DOES exist in the workbook. Distinguish by: macro name confirmed present + workbook works on developer's host (interactive Excel where Trust Center has dev defaults) → branch 5; macro name absent in workbook → branch 1.
|
|
29
|
+
6. **Concurrent COM access (apartment violation)** — Excel COM is single-threaded apartment (STA). When multiple parallel activities (or a separate automation, e.g., another Robot job on the same host) call into the Excel COM apartment, the second caller hits `0x800AC472` or `RPC_E_SERVERCALL_RETRYLATER`. Symptom: COMException with one of those HRESULTs; intermittent (only when the parallel call lands during macro execution); fails more on multi-Robot hosts.
|
|
30
|
+
7. **Macro depends on missing add-in or ActiveX control** — the VBA code references an add-in (`Tools → References` in the VBE) or ActiveX control that is registered on the developer's machine but NOT on the Robot host (or registered under a different user profile than the Robot's). Symptom: VBA error `Run-time error '424': Object required` or `Compile error: Can't find project or library`; surfaces as `DISP_E_EXCEPTION` like branch 2 but the inner is a missing-reference error rather than a logic bug.
|
|
31
|
+
|
|
32
|
+
What to look for:
|
|
33
|
+
- **The exact COMException HRESULT / message** — the strongest first signal. `0x80020009 DISP_E_EXCEPTION` → branch 2 or 7. `Cannot run the macro '<name>'...` → branch 1 or 5. `RPC_E_DISCONNECTED` on a subsequent activity → branch 3. `0x800AC472` → branch 6. Job hangs / no exception → branch 4.
|
|
34
|
+
- **The inner VBA error message** if visible in the exception's `Message` or in the activity's Trace logs. UiPath usually captures the macro's `Err.Description` in the COMException wrapper.
|
|
35
|
+
- **Workflow source** — confirm the configured `Macro` name (literal vs. expression), whether the scope is `Excel Application Scope` (classic, COM-only) or `Use Excel File` with COM-forcing properties, and whether parallel activities access Excel.
|
|
36
|
+
- **Robot host's Excel configuration** — Trust Center settings (`File → Options → Trust Center → Trust Center Settings → Macro Settings`), Trusted Locations, installed add-ins under the Robot user.
|
|
37
|
+
- **Workbook contents** — does the macro name exist in the workbook's VBA code? Macros in `Personal.xlsb` are NOT in the open workbook; they're in a separate workbook loaded on Excel startup. Robots usually don't load `Personal.xlsb`.
|
|
38
|
+
- **Run pattern** — every run fails → persistent (branches 1, 3, 5, 7). Intermittent → branch 6 (concurrent) or branch 4 (modal dialog only on certain inputs).
|
|
39
|
+
|
|
40
|
+
## Investigation
|
|
41
|
+
|
|
42
|
+
1. **Capture the exact error.** From `or jobs get <job-key> --output json`: the exception class, full message, HRESULT (if a COMException), and any inner exception or VBA error text the activity surfaced. From workflow source: the activity, configured `Macro` name (literal or expression), and the scope.
|
|
43
|
+
|
|
44
|
+
2. **Categorize the symptom.**
|
|
45
|
+
- Job has an exception → continue to step 3.
|
|
46
|
+
- Job hangs / times out with no exception → **branch 4** (modal dialog). Confirm: the macro is known to display a dialog under certain inputs, or Excel surfaced a dialog (data-overwrite warning, recovery dialog, end/continue debug prompt). Skip to Resolution.
|
|
47
|
+
|
|
48
|
+
3. **Match the HRESULT / error message to a branch.**
|
|
49
|
+
- `Cannot run the macro '<name>'. The macro may not be available in this workbook or all macros may be disabled.` → branches 1 or 5; go to step 4.
|
|
50
|
+
- `0x80020009 (DISP_E_EXCEPTION)` → branches 2 or 7; go to step 5.
|
|
51
|
+
- `0x80010108 (RPC_E_DISCONNECTED)` on the NEXT activity after the macro → branch 3; go to step 6.
|
|
52
|
+
- `0x800AC472` / `RPC_E_SERVERCALL_RETRYLATER` → branch 6; go to step 7.
|
|
53
|
+
- Other HRESULT → check Microsoft's HRESULT documentation; default to inspecting the workbook source.
|
|
54
|
+
|
|
55
|
+
4. **Distinguish branches 1 vs. 5 (macro-not-found vs. macros-disabled).** Ask the user to verify:
|
|
56
|
+
- **Open the workbook in Excel** (on any host) → `Alt+F11` (VBA editor). Confirm the configured macro name exists in a code module. If absent → **branch 1** (name mismatch, typo, or macro in a different scope). If present → continue.
|
|
57
|
+
- **On the Robot host, under the Robot user's profile**: open Excel → `File → Options → Trust Center → Trust Center Settings → Macro Settings`. If set to `Disable all macros without notification` or `Disable all macros with notification` (and the workbook is not in a trusted location / signed) → **branch 5** (macros disabled).
|
|
58
|
+
- The user's own dev workstation having a permissive Trust Center setting is the canonical "works on dev / fails on Robot" pattern for branch 5.
|
|
59
|
+
|
|
60
|
+
5. **Distinguish branches 2 vs. 7 (VBA bug vs. missing dependency).** Look at the inner VBA error text from the COMException:
|
|
61
|
+
- `Run-time error '91': Object variable or With block variable not set` — usually branch 2 (logic bug).
|
|
62
|
+
- `Run-time error '9': Subscript out of range` — usually branch 2 (worksheet / range assumption).
|
|
63
|
+
- `Run-time error '13': Type mismatch` — usually branch 2.
|
|
64
|
+
- `Run-time error '1004': Application-defined or object-defined error` — could be either; ambiguous. Check what the macro was doing at the time.
|
|
65
|
+
- `Run-time error '424': Object required` or `Compile error: Can't find project or library` — **branch 7** (missing reference / add-in / ActiveX).
|
|
66
|
+
- `Run-time error '429': ActiveX component can't create object` — **branch 7** (control not registered under Robot user).
|
|
67
|
+
|
|
68
|
+
6. **Confirm branch 3 (macro tears down Excel).** Inspect the VBA source. Search for `Close`, `Quit`, `ThisWorkbook.Close`, `ActiveWorkbook.Close`, `Application.Quit`. The macro must not call any of these — UiPath owns the Excel lifecycle. If found, branch 3 is confirmed.
|
|
69
|
+
|
|
70
|
+
7. **Confirm branch 6 (concurrent COM access).** Look for:
|
|
71
|
+
- The workflow uses `Parallel` activities containing Excel calls.
|
|
72
|
+
- Multiple Robot jobs against the same workflow on the same host (`uip or jobs list --process-name '<process>' --host '<MOCK-HOST>'`) overlap with the macro window.
|
|
73
|
+
- A different automation on the same host using Excel (PowerShell, another RPA tool, scheduled VBA add-in).
|
|
74
|
+
- Failures are intermittent — the symptom of an STA race.
|
|
75
|
+
|
|
76
|
+
The root cause must name the specific HRESULT / VBA error / Trust Center setting / VBA call / concurrency pattern responsible. A generic "the macro failed" is not a confirmed finding.
|
|
77
|
+
|
|
78
|
+
## Resolution
|
|
79
|
+
|
|
80
|
+
Map the branch identified in Investigation to the fix:
|
|
81
|
+
|
|
82
|
+
- **Branch 1 — Macro name not found:**
|
|
83
|
+
- Open the workbook in Excel and confirm the macro's actual qualified name (module name + sub name: `Module1.RunImport`). Update the activity's `Macro` property to match verbatim.
|
|
84
|
+
- If the macro lives in a separate workbook / add-in, change the workflow to either open that source (Excel Application Scope on the source file, then run macro), or move the macro into the target workbook.
|
|
85
|
+
- `Personal.xlsb` macros are not available to Robot sessions by default (the Robot user's Excel does not auto-load `Personal.xlsb`). Move the macro into the project workbook or into a workbook the workflow explicitly opens.
|
|
86
|
+
- Prevention: name macros with explicit module qualifiers (`Module1.RunImport`, not `RunImport`); document the macro contract between workbook publisher and workflow consumer.
|
|
87
|
+
|
|
88
|
+
- **Branch 2 — VBA error inside the macro:**
|
|
89
|
+
- Open the workbook in Excel, `Alt+F11` to the VBE, and reproduce the macro under the same inputs. The VBE will break at the offending line.
|
|
90
|
+
- Fix the VBA logic. Common patterns: null-safe object references (`If Not rng Is Nothing Then`), explicit sheet qualifiers (`ThisWorkbook.Sheets("Data").Range("A1")` rather than `Range("A1")`), defensive type checking before assignment.
|
|
91
|
+
- For long-running macros, add structured error handling in VBA: `On Error GoTo ErrHandler` + `Err.Raise` with a clear description, so the COMException surfaces a useful message rather than a generic DISP_E_EXCEPTION.
|
|
92
|
+
- Prevention: unit-test macros on the same data shapes the workflow will produce. Do not rely on workbook state assumptions that the workflow's earlier activities could violate.
|
|
93
|
+
|
|
94
|
+
- **Branch 3 — Macro tears down Excel:**
|
|
95
|
+
- Remove `Workbooks.Close`, `ActiveWorkbook.Close`, `Application.Quit`, `ThisWorkbook.Close` from the VBA. UiPath owns the Excel lifecycle when the macro runs inside Excel Application Scope or `Use Excel File`.
|
|
96
|
+
- If the macro genuinely needs to dismiss the workbook (e.g., it opened a different workbook for processing), have it close ONLY workbooks it opened itself, never `ThisWorkbook` or `ActiveWorkbook` when those are the host workbook.
|
|
97
|
+
- Prevention: workbook publisher and workflow author should agree on a contract — macros run inside UiPath's scope must not modify the application lifecycle. Add a code-review checklist for VBA macros that will be invoked from UiPath.
|
|
98
|
+
|
|
99
|
+
- **Branch 4 — Modal dialog from macro:**
|
|
100
|
+
- Remove `MsgBox`, `InputBox`, and `UserForm.Show` calls from the macro. Replace with logging to a worksheet, an `Err.Raise` with a descriptive message, or a status output range the workflow reads after the macro finishes.
|
|
101
|
+
- For Excel's own dialogs (data-overwrite warnings, save-as prompts), set `Application.DisplayAlerts = False` at the start of the macro (and `True` at the end). Note this suppresses ALL Excel dialogs during the macro, including legitimate confirmation prompts — use deliberately.
|
|
102
|
+
- For VBA debug interruptions (`Stop`, `Debug.Print` with breakpoints): remove all `Stop` statements and clear all breakpoints before saving the workbook for production.
|
|
103
|
+
- Prevention: ban interactive UI calls in VBA macros that run under UiPath. Macros are headless; they must not require user input.
|
|
104
|
+
|
|
105
|
+
- **Branch 5 — Macros disabled by Trust Center:**
|
|
106
|
+
- **Preferred:** add the workbook's containing folder to Excel's Trusted Locations under the Robot user's profile. Open Excel as the Robot user → `File → Options → Trust Center → Trust Center Settings → Trusted Locations → Add new location`. Persistent under that user.
|
|
107
|
+
- Alternative: sign the macro with a code-signing certificate that's trusted on the Robot host, and set Trust Center to `Disable VBA macros except digitally signed macros`.
|
|
108
|
+
- Last resort (security-relaxed): set `Enable VBA macros` (the most permissive option) on the Robot user's Excel. Acceptable only when the Robot host is dedicated to trusted automation and not used for general Office work.
|
|
109
|
+
- Prevention: when provisioning Robot hosts, configure Excel's Trusted Locations as part of host setup. Document the location list in the host build runbook.
|
|
110
|
+
|
|
111
|
+
- **Branch 6 — Concurrent COM access:**
|
|
112
|
+
- Serialize Excel access. Options:
|
|
113
|
+
- Remove `Parallel` activities that touch Excel; run those branches sequentially.
|
|
114
|
+
- If multiple Robot jobs on the same host need Excel, serialize via a per-host lock asset OR a single-performer queue on the workflow.
|
|
115
|
+
- If another automation on the host uses Excel, separate them (different hosts, or coordinated schedules).
|
|
116
|
+
- For unavoidable intermittent races, add a Retry Scope around Execute Macro with exponential back-off (3 attempts, 5s / 15s / 30s). Excel COM apartment violations are usually transient — a short wait often unblocks them.
|
|
117
|
+
- Prevention: do not design workflows that parallel-call into Excel COM. Single-threaded apartment is a hard constraint, not a quirk.
|
|
118
|
+
|
|
119
|
+
- **Branch 7 — Missing add-in or ActiveX control:**
|
|
120
|
+
- Identify the missing reference: open the workbook in Excel on the Robot host (under the Robot user) → `Alt+F11` → `Tools → References`. Any reference marked "MISSING:" is the culprit.
|
|
121
|
+
- Install / register the add-in or control on the Robot host under the Robot user's profile. Add-ins: copy the `.xlam` / `.xla` to `%AppData%\Microsoft\AddIns\` and enable in Excel's Add-ins dialog. ActiveX: `regsvr32 <control.dll>` as admin, but verify the control is licensed for unattended use.
|
|
122
|
+
- Alternative: rewrite the macro to not depend on the missing reference (early binding → late binding via `CreateObject`, OR remove the dependency entirely if possible).
|
|
123
|
+
- Prevention: document every external dependency the workbook's macros require. Provision Robot hosts with that dependency list; verify with a smoke-test workflow that exercises each macro.
|
|
124
|
+
|
|
125
|
+
## Anti-patterns (what NOT to do)
|
|
126
|
+
|
|
127
|
+
Common advice for ExecuteMacro failures contains workarounds that hide bugs rather than fix them. The agent should NOT recommend either as a primary resolution.
|
|
128
|
+
|
|
129
|
+
- **"Add a `Delay` activity before Execute Macro."** A `Delay` is a workaround for a race condition or initialization issue that the workflow author has not actually diagnosed. It "works" intermittently and hides the underlying bug — usually branch 3 (Excel torn down by a previous macro), branch 6 (concurrent COM access), or genuine workbook write-flush latency. A reliable fix names the specific timing dependency and addresses it (sequence activities correctly, use `DoEvents` in VBA before returning, configure `Application.CalculateUntilAsyncQueriesDone = True` for power-query workbooks). If a `Delay` is genuinely required, treat it as a diagnosis hint about an underlying timing problem, document the dependency in a comment, and pick a duration that's an order of magnitude above the worst observed case rather than the minimum that "works."
|
|
130
|
+
|
|
131
|
+
- **"Wrap Execute Macro in a Try Catch and continue on error."** A bare Try-Catch that catches `COMException` (or `System.Exception`) and only logs without re-throwing turns macro failures into silent skips — the workflow proceeds as if the macro succeeded, producing wrong outputs, missing data, and downstream failures that are much harder to diagnose than the original COMException. Use Try-Catch only with a real recovery path: fall back to a different macro, mark a queue item Failed with the COMException message, send a notification, or re-throw a domain-specific exception.
|
|
132
|
+
|
|
133
|
+
## Prevention (cross-branch)
|
|
134
|
+
|
|
135
|
+
- Workbook authors must treat macros invoked from UiPath as headless: no `MsgBox`, no `InputBox`, no `UserForm`, no `Stop` / debug breakpoints. Failures surface via `Err.Raise` or a status range, not via UI.
|
|
136
|
+
- Macros must not change Excel's application lifecycle (no `Workbooks.Close` / `Application.Quit` / etc.). UiPath owns it.
|
|
137
|
+
- VBA must use explicit qualifiers (`ThisWorkbook.Sheets("Data").Range("A1")`) not implicit `ActiveSheet` / `Selection`. The Robot's session may not have the same active context as the developer's interactive Excel.
|
|
138
|
+
- Robot hosts should be provisioned with: Excel's Trusted Locations covering the automation data folder; the same add-ins as the developer's machine; the same ActiveX controls registered under the Robot user; the Trust Center macro setting compatible with the workbook's signing posture.
|
|
139
|
+
- Workflow authors should:
|
|
140
|
+
- Validate the configured `Macro` name against the workbook before invocation (a smoke-test enumerator that lists VBA macros, similar to `Get Workbook Sheets` for sheets).
|
|
141
|
+
- Never use `Delay` to paper over Excel timing issues.
|
|
142
|
+
- Never use bare `Try Catch` around Excel activities; always pair Catch with a real recovery action.
|
|
143
|
+
- Serialize Excel access — no `Parallel` activities touching Excel, single-performer queues for cross-job concerns.
|
|
144
|
+
|
|
145
|
+
## Related
|
|
146
|
+
|
|
147
|
+
- Other Excel Activities failure fingerprints (read-side failures) are separate playbooks — see [`../summary.md`](../summary.md).
|
|
148
|
+
- The "Try-Catch suppression around Excel scopes" anti-pattern is consistent across all Excel playbooks; reinforcing it here.
|
|
149
|
+
- For headless Excel automation that does NOT need VBA macros, consider migrating the macro logic into UiPath activities or the cloud surface (`o365-activities/overview.md`). Macros are a portability hazard between developer and Robot environments; native UiPath logic is more deterministic.
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
---
|
|
2
|
+
confidence: medium
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Write Range Failures
|
|
6
|
+
|
|
7
|
+
## Context
|
|
8
|
+
|
|
9
|
+
A `UiPath.Excel.Activities` `Write Range` activity (Classic `WriteRange` inside `Excel Application Scope` / standalone Workbook surface, or Modern `WriteRangeX` inside `Use Excel File`) writes a `DataTable` to a worksheet starting at a configured cell. Failures originate at one of five surfaces: source-table integrity (the `DataTable` variable is null), file acquisition (workbook locked / read-only), source-shape edge cases (header-only DataTable with `ExcludeHeaders=False`), target-sheet structure (hidden rows / columns inside the write boundary as of package v2.8.5+), or data volume / content (oversized batches, formula-prefix characters interpreted as broken formulas).
|
|
10
|
+
|
|
11
|
+
What this looks like — Write Range faults surface as one of these signatures:
|
|
12
|
+
|
|
13
|
+
- `System.NullReferenceException: Object reference not set to an instance of an object` — the configured `DataTable` argument is `Nothing` / `null`. Branch 1.
|
|
14
|
+
- `System.IO.IOException: The process cannot access the file '<path>' because it is being used by another process.` — file held by another process or by a stale UiPath scope. Branch 2.
|
|
15
|
+
- `UiPath.Excel.BusinessException` (wording varies — typically "The Excel Activity option 'Ignore empty source' is ineffective" or "Failing on Empty Header") — the source `DataTable` has 0 rows AND `ExcludeHeaders` is False. Branch 3.
|
|
16
|
+
- Explicit error (package v2.8.5+) referencing hidden rows / columns within the target write region — `UiPath.Excel.BusinessException` mentioning "hidden rows or columns" or similar. Branch 4.
|
|
17
|
+
- `System.OutOfMemoryException`, `System.Runtime.InteropServices.COMException`, or `UiPath.Excel.BusinessException: The data you want to write has a wrong format, or Excel is busy.` — branch 5 (oversized batches or formula-prefix data).
|
|
18
|
+
|
|
19
|
+
What can cause it (cause-branches — pick the right one from evidence):
|
|
20
|
+
|
|
21
|
+
1. **Uninitialized / null DataTable** — the source `DataTable` variable passed to the activity is `Nothing`. Causes: variable declared but never assigned (missing `Build Data Table` / `Read Range` step earlier); preceding `Read Range` ran against a missing sheet and returned `Nothing` instead of an empty DataTable; conditional branch skipped the assignment; variable name typo so the activity reads the wrong scope's variable. Symptom is the canonical NRE on the activity, NOT inside Excel — the activity throws before any COM / OpenXML call.
|
|
22
|
+
2. **Workbook locked or opened read-only** — same fault family as the read-range / delete-range / write-cell file-locked surface: a different process holds the file (user-opened Excel UI, orphan `EXCEL.EXE` from a prior job, AV scanner, a different host's lock on a network share), OR the file is read-only at the OS layer (NTFS ACL, `Mark as Final`, Protected View on a downloaded copy, Modern `Use Excel File` scope with `ReadOnly=True`).
|
|
23
|
+
3. **Empty source DataTable + `ExcludeHeaders=False`** — the source DataTable has 0 rows (only column definitions, no data). With `ExcludeHeaders=False` (default), the activity tries to write the header row + 0 data rows; some surfaces / package versions surface this as a BusinessException rather than a no-op. The note in the activity's documentation that "`Ignore empty source` excludes the empty case" is misleading — `Ignore empty source` only applies when the DataTable variable itself is `Nothing`, not when it's an initialized table with 0 rows. Workflow authors hit this when a preceding `Filter DataTable` removed every row, leaving the schema but no content.
|
|
24
|
+
4. **Hidden rows / columns in the target write range (package v2.8.5+)** — the workbook's target sheet has rows or columns hidden inside the rectangle the `DataTable` would write into (manual hide, AutoFilter, or grouping). Pre-2.8.5 versions silently wrote into the hidden cells and the user saw "missing" data; 2.8.5+ throws an explicit `BusinessException` flagging the hidden ranges so the workflow author catches the data-loss risk before it ships. Common trigger: a sheet shared with a human user who applied a filter before the job ran.
|
|
25
|
+
5. **Out-of-memory / COM exceptions on volume or formula-prefix data** — two distinct sub-causes that share signatures:
|
|
26
|
+
- **Oversized batches**: writing a multi-hundred-thousand-row `DataTable` in one call exhausts Excel COM's per-call buffer (or .NET managed memory under heavy COM marshaling). Surfaces as `OutOfMemoryException` or `COMException` with a generic Excel HRESULT (`0x800A03EC`, `0x8001010A`).
|
|
27
|
+
- **Formula-prefix data**: cell values starting with `=`, `+`, `-`, or `@` are interpreted by Excel as formulas. When the literal text isn't a valid formula (e.g., `=Smith, John` for a name with a leading equals), Excel rejects the cell with `Application-defined or object-defined error`. Same signature as the volume case, different root.
|
|
28
|
+
|
|
29
|
+
What to look for:
|
|
30
|
+
|
|
31
|
+
- **The exception class and message** — first signal. `NullReferenceException` → branch 1. `IOException` / "cannot access the file" → branch 2. `BusinessException` mentioning "empty source" / "Ignore empty source" / "header" → branch 3. `BusinessException` mentioning "hidden rows" / "hidden columns" → branch 4. `OutOfMemoryException` or `COMException` with a generic Excel HRESULT → branch 5 (large or formula-prefix).
|
|
32
|
+
- **Workflow source** — which `Write Range` surface (Classic Workbook / Classic scope / Modern), the configured `DataTable` argument (literal variable name vs. an expression), the configured `SheetName` / `Range` / `ExcludeHeaders` / `AddHeaders`, and the parent container (`Excel Application Scope`, `Use Excel File`, or unwrapped Classic Workbook).
|
|
33
|
+
- **The DataTable's source** — what activity produced the `DataTable` variable (`Build Data Table`, `Read Range`, `Generate Data Table from Text`, `Filter Data Table`, a coded assignment, etc.). Branch 1 traces back to whichever step was expected to populate it.
|
|
34
|
+
- **Package version** — `UiPath.Excel.Activities` version from `project.json`. The hidden-rows behavior (branch 4) is version-dependent: pre-2.8.5 silently writes; 2.8.5+ throws.
|
|
35
|
+
- **Target sheet state** — visible AutoFilter (funnel icons on header row), manually hidden rows / columns, grouped rows / columns collapsed, freeze panes intersecting the write range. Relevant for branch 4.
|
|
36
|
+
- **`DataTable.Rows.Count` immediately before the activity** — gives branch 1 vs. branch 3 vs. valid-but-failed distinction. A `Log Message` capturing the row count + the `DataTable.Columns.Count` is the cheapest pre-write check.
|
|
37
|
+
|
|
38
|
+
## Investigation
|
|
39
|
+
|
|
40
|
+
Go in this order — cheaper checks first.
|
|
41
|
+
|
|
42
|
+
1. **Capture the exact error, activity, and configuration.** From `uip or jobs get <job-key> --output json` → `Info`: exception class, full message, HRESULT (if COMException), inner exception. From workflow source: the `Write Range` surface (Classic Workbook / Classic scope / Modern), the configured `DataTable` argument (variable name or expression), `SheetName`, `Range`, `ExcludeHeaders`, `AddHeaders`, and the parent container. From job logs (`uip or jobs logs <key>`): the activity's Trace lines around the failure, plus any `Log Message` lines that captured the `DataTable.Rows.Count` immediately before.
|
|
43
|
+
|
|
44
|
+
2. **Branch the diagnostic on the exception signature.**
|
|
45
|
+
- `NullReferenceException` → branch 1; go to step 3.
|
|
46
|
+
- `IOException` / `COMException` with "cannot access the file" / "used by another process" / "read-only" → branch 2; pivot to the read-range file-locked playbook for the full chain (see [`../summary.md`](../summary.md) for navigation).
|
|
47
|
+
- `BusinessException` mentioning "Ignore empty source" / "empty source" / "header" → branch 3; go to step 4.
|
|
48
|
+
- `BusinessException` mentioning "hidden rows" / "hidden columns" / "hidden range" → branch 4; go to step 5.
|
|
49
|
+
- `OutOfMemoryException` or `COMException` with generic Excel HRESULT (`0x800A03EC`, `0x8001010A`) → branch 5; go to step 6.
|
|
50
|
+
- `BusinessException: The sheet with the name '<name>' does not exist` → cross-cutting sheet-name mismatch; pivot to the read-range sheet-not-found playbook (see [`../summary.md`](../summary.md)). The diagnostic is identical to the read-side version.
|
|
51
|
+
- `COMException` with "protected" / "read-only" / `0x800A03EC` near `Worksheet.Protect` → cross-cutting protected-sheet surface; pivot to the write-cell playbook's branch 5 (see [`../summary.md`](../summary.md)).
|
|
52
|
+
|
|
53
|
+
3. **Confirm branch 1 (uninitialized DataTable).** Inspect the workflow source. Trace the `DataTable` argument's variable backward:
|
|
54
|
+
- Find the most recent assignment / output binding for that variable in scope. If it's an `Assign`, did the expression resolve? If it's a `Read Range` output, did that activity succeed in this run? If it's a `Build Data Table` output, is the activity actually upstream of Write Range in the execution path (not in an `Else` branch that was skipped)?
|
|
55
|
+
- Add a `Log Message Level=Info Message=$"dt rows={dt.Rows.Count}, cols={dt.Columns.Count}"` immediately before the Write Range and rerun. If the log line throws NRE itself, the variable is null. If it logs `rows=0 cols=N`, branch 1 is ruled out and the failure is branch 3.
|
|
56
|
+
- Check the variable scope: a `DataTable` declared in an inner scope (`Try` body, `If` then-branch) goes out of scope at the parent boundary; if Write Range is outside, it reads `Nothing`.
|
|
57
|
+
- Check for variable-name typos: `dtCustomers` vs. `dtCustomer` — Studio doesn't always flag a misspelled reference if a same-named variable exists in an outer scope.
|
|
58
|
+
|
|
59
|
+
4. **Confirm branch 3 (empty source + ExcludeHeaders=False).** Check:
|
|
60
|
+
- The `DataTable.Rows.Count` immediately before the activity is 0.
|
|
61
|
+
- `ExcludeHeaders` is False (the default for many surfaces).
|
|
62
|
+
- The DataTable was initialized (i.e., not branch 1) — confirmed if `DataTable.Columns.Count > 0`.
|
|
63
|
+
- The preceding activity that should have populated rows actually ran and matched something. Common upstream cause: `Filter DataTable` with a predicate that matches no rows, or `Read Range` against a sheet that exists but has only a header row.
|
|
64
|
+
- If `Range` is configured as a specific cell (e.g., `"A2"`) rather than empty / `"A1"`, the activity expects to write into existing data and the empty-source branch becomes more confusing because there's no header-row context.
|
|
65
|
+
|
|
66
|
+
5. **Confirm branch 4 (hidden rows / columns in target range).** Two independent checks:
|
|
67
|
+
- **Package version**: open `project.json` and read `UiPath.Excel.Activities` version. If < 2.8.5, the explicit "hidden range" error does not exist in that version — the failure cannot be branch 4 by definition; recheck the exception text against the other branches.
|
|
68
|
+
- **Target sheet state**: open the workbook in Excel before running the workflow. On the target sheet, look for: AutoFilter funnel icons on the header row (`Data → Filter` toggle); manually hidden rows (right-click row header → Unhide visible? gap in row numbers); manually hidden columns (gap in column letters); grouped rows / columns (left-margin or top-margin outline brackets); freeze panes. Any of these inside the rectangle defined by `(Range starting cell) + (DataTable shape)` triggers branch 4.
|
|
69
|
+
- Reproduce manually: open the workbook in Excel, select the same target range, try to paste any value. If Excel rejects the paste with a "selection contains hidden cells" warning, the activity's BusinessException is the API-level surface of that same rejection.
|
|
70
|
+
|
|
71
|
+
6. **Confirm branch 5 (out-of-memory / COM exception).** Distinguish the two sub-causes:
|
|
72
|
+
- **Volume sub-cause**: `DataTable.Rows.Count` is in the high thousands / hundreds of thousands at the time of write. The job logs may show progressive memory pressure earlier (cache warnings, GC pauses). Surfaces more often on COM-mode Modern scope or Classic surfaces (OpenXML is more memory-efficient).
|
|
73
|
+
- **Formula-prefix sub-cause**: scan the DataTable's first column / first row of data for values starting with `=`, `+`, `-`, or `@`. Common offenders: names with a leading equals (`=Smith, John` from a copy-paste error), formulas in a column the user thought was plain text, accounting / debit values that begin with `-`, email handles starting with `@`. The activity will surface this as a `COMException` referencing "Application-defined or object-defined error" or "wrong format" — the same signature as the volume sub-cause but the cause is content, not size.
|
|
74
|
+
- To distinguish without re-running: a `Log Message Level=Info Message=$"first cell of first row: '{dt.Rows(0)(0)}'"` immediately before Write Range exposes the value. If it starts with `=`, `+`, `-`, or `@`, branch 5 formula-prefix is the cause.
|
|
75
|
+
|
|
76
|
+
The root cause is **which of the five surfaces** the failure maps to. A confirmed finding names the surface (Classic / Modern), the resolved runtime state of the inputs (DataTable null vs. empty vs. populated, file-acquisition state, target sheet hidden state, data volume / first-row content), and the matching exception signature.
|
|
77
|
+
|
|
78
|
+
## Resolution
|
|
79
|
+
|
|
80
|
+
Map the branch identified in Investigation to the fix:
|
|
81
|
+
|
|
82
|
+
- **Branch 1 — Uninitialized / null DataTable:**
|
|
83
|
+
- Trace the variable backward to its expected source and ensure that source actually executes. If the upstream is `Read Range`, confirm the sheet name and range resolve (rule out a silent miss). If the upstream is `Build Data Table`, ensure it sits on the execution path that reaches Write Range (not behind an `If` that the run skipped).
|
|
84
|
+
- Initialize the variable at declaration: assign `dt = New System.Data.DataTable()` (or use `Build Data Table` at workflow start) so the variable is never `Nothing` even if the populating step is skipped. Write Range against a 0-row initialized DataTable becomes branch 3, not branch 1 — handle there.
|
|
85
|
+
- Promote the variable's scope: if Write Range is at a higher scope than the assignment, move the variable declaration up to the common parent scope.
|
|
86
|
+
- Fix variable-name typos: rename for clarity if a similar name exists in an outer scope (e.g., `dtCustomersFiltered` instead of reusing `dtCustomers` across nested scopes).
|
|
87
|
+
- Prevention: prefer `Log Message Level=Info Message=$"dt rows={dt.Rows.Count}"` before every Write Range. The two extra log lines turn a silent NRE into a self-diagnosing trace.
|
|
88
|
+
|
|
89
|
+
- **Branch 2 — Workbook locked or read-only:**
|
|
90
|
+
- Apply the resolution from the read-range file-locked playbook (see [`../summary.md`](../summary.md) for navigation). The write side (Write Range) and the read side share the same fault surface — the file is held by another process, the lock is at the OS layer, or the file is on a network share whose semantics differ from local disk.
|
|
91
|
+
- For workbooks marked read-only via `Mark as Final` or arriving via Protected View: open the file as the Robot user, remove the `Mark as Final` flag (`File → Info → Mark as Final`), or `Unblock-File '<path>'` to lift the Mark-of-the-Web flag that triggers Protected View.
|
|
92
|
+
- For Modern `Use Excel File` scopes: confirm `ReadOnly: False` on the scope. Default-True is a footgun on `Use Excel File` for workflows that include any Write activity.
|
|
93
|
+
- For Classic Workbook `Write Range` (no enclosing scope) ALSO running alongside a Classic `Excel Application Scope` or Modern `Use Excel File` for the same path elsewhere in the workflow: replace the bare Classic Workbook Write Range with one nested inside the existing scope. Mixing surfaces against the same file is a self-inflicted lock — the scope owns the file via its mechanism, and the standalone Workbook activity refuses to acquire it.
|
|
94
|
+
|
|
95
|
+
- **Branch 3 — Empty source + `ExcludeHeaders=False`:**
|
|
96
|
+
- Wrap Write Range in an `If` activity with condition `dt.Rows.Count > 0`. In the Then branch, perform the write. In the Else branch, log a warning or no-op. This is the cleanest fix because it explicitly encodes the "nothing to write" semantics rather than relying on the activity to handle it.
|
|
97
|
+
- Set `ExcludeHeaders=True` if the workflow's intent is to write only data rows (no header in the workbook). With `ExcludeHeaders=True`, an empty DataTable is treated as a 0-row, 0-column write — usually a no-op rather than an error.
|
|
98
|
+
- For workflows that aggregate filtered batches: validate the filter result earlier in the workflow. If `Filter DataTable` is the upstream cause, log the input vs. output row counts so the empty case is observable upstream rather than at the Write Range surface.
|
|
99
|
+
- Note that `Ignore empty source` (when the activity / surface supports it) only handles the `Nothing` case (branch 1) — it does NOT handle an initialized DataTable with 0 rows. The two cases need to be handled separately, despite naming that suggests otherwise.
|
|
100
|
+
|
|
101
|
+
- **Branch 4 — Hidden rows / columns in target range (v2.8.5+):**
|
|
102
|
+
- Remove hidden rows / columns from the target write region before the Write Range:
|
|
103
|
+
- **Active AutoFilter**: insert a `Remove Data Filter` (Modern) or `Filter Range` with `Action: Remove` (Classic) targeting the same sheet, immediately before Write Range. After the write, re-apply the filter if downstream consumers depend on it.
|
|
104
|
+
- **Manually hidden rows / columns**: select all rows / columns containing the write target, right-click, Unhide. For a robot-only sheet, automate this with a `Hidden = False` property write OR a pre-cleanup workflow step that calls `Worksheet.Unhide()` via COM.
|
|
105
|
+
- **Grouped rows / columns collapsed**: expand the group (`Data → Ungroup`, or `Outline → Expand`) before the write. The Robot's session sees the collapsed state as hidden.
|
|
106
|
+
- If the hidden state is intentional (e.g., a report uses hidden rows for archived records that should NOT be overwritten), restructure the target range so the write does not intersect the hidden region — write to a separate sheet or a non-overlapping range.
|
|
107
|
+
- Downgrading the package to pre-2.8.5 silences the explicit error but reintroduces the silent-data-loss bug it was added to catch. Do not downgrade as a "fix"; the error is correctly flagging a real risk.
|
|
108
|
+
|
|
109
|
+
- **Branch 5 — Out-of-memory / COM exceptions:**
|
|
110
|
+
- **Volume sub-cause**: chunk the write. Replace a single `Write Range` of `N` rows with a loop that writes batches of 5,000–20,000 rows each (tune to the workbook / host). Use `Append Range` for batches after the first, or a per-batch `Write Range` with a computed starting cell `"A" + ((batchIndex * batchSize) + 2).ToString()`. The 20K-row threshold is empirical — workbooks with many columns or rich types should use smaller batches.
|
|
111
|
+
- Alternative for the volume sub-cause: switch to the OpenXML provider if you're on Classic / Modern COM. `Use Excel File` defaults to OpenXML when no COM-forcing property is set; OpenXML's memory footprint is much smaller for large data.
|
|
112
|
+
- **Formula-prefix sub-cause**: pre-clean the data before the write. Two approaches:
|
|
113
|
+
- **Escape the literal**: prepend an apostrophe (`'`) to each offending cell value via a `For Each Row` + cell update. Excel treats apostrophe-prefixed strings as literal text. The apostrophe is hidden in the rendered cell but stored.
|
|
114
|
+
- **Pre-clean by type**: if the column should be text-only (names, IDs), enforce a `String` type on the DataTable column with `Convert.ToString(...).TrimStart("="c, "+"c, "-"c, "@"c)` to strip leading formula characters. Document the transformation in the workflow so consumers know the data has been sanitized.
|
|
115
|
+
- For workflows that write user-supplied content into Excel (form input, scraped names, queue payloads): always apply the escape / pre-clean step. Do not assume input data is formula-safe.
|
|
116
|
+
|
|
117
|
+
## Anti-patterns (what NOT to do)
|
|
118
|
+
|
|
119
|
+
Common advice for Write Range failures contains workarounds that hide bugs rather than fix them. The agent should NOT recommend any of these as a primary resolution.
|
|
120
|
+
|
|
121
|
+
- **"Add a `Delay` activity before Write Range."** A `Delay` is a workaround for a race condition or initialization issue that the workflow author has not actually diagnosed. For Write Range, the most common temptation is to add a delay before the activity to "let Excel settle" after a preceding `Use Excel File` open, or to mask branch 2 (file lock) by waiting for a stuck process to release. The Delay works intermittently — long enough for the lock to release in the test environment but not in production. A reliable fix names the timing dependency: kill orphan EXCEL.EXE explicitly (branch 2 stop-gap), confirm the preceding activity completed (use its output, not a guessed delay), or restructure the workflow so the dependency is explicit.
|
|
122
|
+
|
|
123
|
+
- **"Wrap Write Range in a bare Try Catch and continue on error."** A bare Try-Catch that catches `Exception` / `BusinessException` / `COMException` and only logs without re-throwing turns Write Range failures into silent skips — the workflow proceeds as if the write succeeded, leaving the target workbook in a partial state. Downstream activities then operate on stale data, producing wrong outputs that are far harder to diagnose than the original exception. Use Try-Catch only with a real recovery path: retry with a smaller batch (branch 5 volume), mark the queue item Failed and abort, send a notification, or re-throw a domain-specific exception. The `Ignore empty source` property handles ONE specific case (branch 1's `Nothing`) — it is NOT a general "catch and continue" mechanism for any of the other branches.
|
|
124
|
+
|
|
125
|
+
- **"Set `ExcludeHeaders=True` to silence the empty-source error."** This is a real fix ONLY when the workflow's intent is to write data rows without a header. Setting `ExcludeHeaders=True` to make branch 3 "go away" while the rest of the workflow still expects a header row produces a workbook with misaligned data — the data lands in the same column positions as the header would have, so the first data row overwrites whatever was at that position. Either correctly skip the write when there are no rows (branch 3's `If`-guard fix), or restructure the workflow so the header / data contract is explicit.
|
|
126
|
+
|
|
127
|
+
- **"Downgrade `UiPath.Excel.Activities` to pre-2.8.5 to silence the hidden-rows error."** Branch 4's explicit error was added BECAUSE pre-2.8.5 versions silently wrote over hidden cells, causing data loss that workflow authors only discovered weeks later when human users unhid rows. Downgrading reintroduces the bug. The correct fix is to handle the hidden-rows case explicitly (unhide, restructure target range, or refactor).
|
|
128
|
+
|
|
129
|
+
## Prevention (cross-branch)
|
|
130
|
+
|
|
131
|
+
- Initialize all `DataTable` variables at declaration (e.g., `New DataTable()` assigned via `Variables` panel default value, OR an early `Build Data Table` on the execution path). Treat `Nothing` as never-valid for a DataTable in Write Range scope.
|
|
132
|
+
- Log `DataTable.Rows.Count` and `DataTable.Columns.Count` immediately before every Write Range. Two log lines are cheap insurance against branches 1 and 3.
|
|
133
|
+
- Guard Write Range with `If dt.Rows.Count > 0 Then` for any workflow where the source DataTable can legitimately be empty (filter results, query results, scraped data).
|
|
134
|
+
- Set `ReadOnly: False` explicitly on Modern `Use Excel File` scopes that contain any write activity. The default is a footgun.
|
|
135
|
+
- Avoid mixing Classic Workbook activities with Modern / Classic scope containers against the same workbook path in one workflow — the scope owns the file, and the standalone Workbook activity fails its own acquisition (branch 2's scope-conflict variant).
|
|
136
|
+
- For workflows on a sheet that humans also edit: before any Write Range, insert a `Remove Data Filter` (Modern) or equivalent Classic step. AutoFilter state is invisible to the workflow author at design time but very visible to the activity at runtime (branch 4).
|
|
137
|
+
- For workflows that aggregate or transform user-supplied content: sanitize formula-prefix characters (`=`, `+`, `-`, `@`) before writing. Treat any user-supplied string as potentially formula-shaped.
|
|
138
|
+
- For large-volume writes (>20K rows): default to OpenXML provider, chunk into 5–20K-row batches, log per-batch progress. Plan for the volume case even if today's data fits.
|
|
139
|
+
|
|
140
|
+
## Related
|
|
141
|
+
|
|
142
|
+
- Other Excel Activities failure fingerprints (read-side and write-side cross-cuts — file-locked, sheet-not-found, protected-sheet) are separate playbooks; see [`../summary.md`](../summary.md) for navigation. Branch 2 (file lock) and the sheet-name and protected-sheet pivots in step 2 inherit the diagnostic chains from those playbooks.
|
|
143
|
+
- [`./execute-macro-failures.md`](./execute-macro-failures.md) — sibling playbook for `Execute Macro` failures. Workflows that combine Write Range with VBA post-processing share the file-acquisition and scope-container surfaces.
|
|
144
|
+
- [`../overview.md`](../overview.md) — package overview, including the scope-container model and the OpenXML-vs-COM provider distinction relevant to branch 5's volume sub-cause.
|
|
145
|
+
- For headless workflows where the write target is best expressed in code rather than DataTable-to-range, consider migrating the relevant logic to the cloud surface via `o365-activities/` (Microsoft Graph API) — that surface has different memory semantics and no Excel COM dependency, avoiding branches 2, 4, and 5's volume variant entirely.
|
package/skills/uipath-troubleshoot/references/activity-packages/excel-activities/presentation.md
CHANGED
|
@@ -1,9 +1,14 @@
|
|
|
1
1
|
# Excel Activities Presentation Rules
|
|
2
2
|
|
|
3
|
-
- **Activities** — use the display name (e.g., "
|
|
4
|
-
- **
|
|
5
|
-
- **
|
|
6
|
-
- **
|
|
7
|
-
- **
|
|
8
|
-
- **
|
|
9
|
-
- **
|
|
3
|
+
- **Activities** — use the display name in prose (e.g., "Read Range", "Write Range", "Use Excel File", "Invoke VBA"). Include the class name in parentheses on first mention so an agent can match a stack trace (e.g., "Read Range (`ReadRangeX`)"). Don't lead with the fully qualified class name (e.g., `UiPath.Excel.Activities.Business.InvokeVBAX`).
|
|
4
|
+
- **Scopes** — distinguish "Excel Application Scope" (legacy, COM-only, requires Excel installed, holds Excel UI open) from "Use Excel File" / "Excel Process Scope" (modern, OpenXML by default, falls back to COM for unsupported features). When the scope matters for the diagnostic, name it explicitly.
|
|
5
|
+
- **Providers** — call out "OpenXML provider" vs. "Excel COM" when the diagnostic depends on which one ran. The provider affects which exceptions are produced and which workbook features are supported.
|
|
6
|
+
- **Workbooks** — refer to a workbook by its filename with parent context (e.g., "workbook `Q1-Forecast.xlsx` in `C:\Robot\Data\`"), not by full path on first mention and not by the variable holding the `WorkbookApplication` reference. Show the full path when the path itself is the subject of the error (file-not-found, UNC issues) or when the agent needs to inspect the host. Show casing exactly as the workflow configured it.
|
|
7
|
+
- **Sheets** — refer to a sheet by its name in single quotes (e.g., "sheet 'Summary'", "sheet 'Q1 Data'"), not by index. Sheet name comparison is case-sensitive on the OpenXML provider and case-insensitive under Excel COM — when reporting a sheet-name mismatch, show both the configured name and the actual sheet names in the workbook verbatim.
|
|
8
|
+
- **Ranges** — show ranges in A1 notation exactly as configured (e.g., `A1:D100`, `B2`, blank for used-range). Don't normalize, expand, or trim.
|
|
9
|
+
- **Code files** — refer to the VBA source file by filename and extension (e.g., "code file `macro.txt`" or "`InvoiceMacros.vba`"), not by the variable holding the path.
|
|
10
|
+
- **VBA macros** — refer to macros by the `Sub`/`Function` name as it appears in the code file (e.g., "macro `ImportInvoices`"), not by the `EntryMethodName` variable.
|
|
11
|
+
- **Host processes** — when referencing Excel processes on the host, use the literal `EXCEL.EXE` (uppercase) — that's the name as it appears in Task Manager and `tasklist`. Distinguish a user-owned instance (Excel UI visible to a logged-in user) from an orphan (no UI, owned by the Robot's session or a prior job's session).
|
|
12
|
+
- **Local file paths** — show the full local path as configured on the activity. Distinguish local paths from network paths (`\\server\share\...`) explicitly — lock semantics, latency, and permission models differ.
|
|
13
|
+
- **Office versions** — refer to Office by its installed product name and bitness (e.g., "Microsoft 365 Apps for Enterprise (64-bit)", "Office 2019 (32-bit)"), not by internal version numbers like `16.0` unless they are the only identifier available.
|
|
14
|
+
- **Excel settings** — refer to Trust Center settings by the exact UI label path the user navigates (e.g., `File > Options > Trust Center > Trust Center Settings > Macro Settings > Trust access to the VBA project object model`), so the user can find the toggle without guessing.
|
|
@@ -20,3 +20,9 @@
|
|
|
20
20
|
| Read Range — Workbook File Or Directory Not Found | Medium | The configured `WorkbookPath` does not resolve to an existing file at runtime (`System.IO.FileNotFoundException: Could not find file '<path>'.` or `System.IO.DirectoryNotFoundException`). Causes: file moved/deleted upstream, UNC share unreachable, relative path resolved against wrong CWD, drive letter not mapped under the Robot's session, OneDrive/SharePoint Files-On-Demand placeholder, or extension/casing mismatch on case-sensitive shares | [read-range-file-not-found.md](./playbooks/read-range-file-not-found.md) |
|
|
21
21
|
| Read Range — NullReferenceException / TargetInvocationException From Inside Activity | Low | The workbook opens but a generic .NET runtime exception fires during cell / range / formula / formatting parsing (`System.NullReferenceException` or `System.Reflection.TargetInvocationException` with no cell pointer). Possible causes: Microsoft Purview / AIP sensitivity label blocking the Robot user, workbook structural corruption (often from non-Excel writers like `openpyxl`), broken named range or formula reference (`#REF!`), unsupported OpenXML feature requiring COM, or heavy conditional formatting / parser scale limit. Low-confidence: error wording does not distinguish branches; diagnosis usually requires manual workbook inspection | [read-range-null-reference.md](./playbooks/read-range-null-reference.md) |
|
|
22
22
|
| Write Cell Failures | Medium | `Write Cell` (Classic Workbook, Classic `Excel Application Scope`, or Modern `Use Excel File`) fails to write a value or formula. Symptoms surface as `System.IO.IOException` (file lock), `UiPath.Excel.BusinessException: ... wrong format, or Excel is busy` (formula syntax OR Excel COM state thrash — same wording, two causes), `BusinessException: ... sheet with the name '<x>' does not exist`, `COMException` about protected sheet / read-only workbook, or `BusinessException: ... cell reference '<x>' is invalid`. Causes: workbook locked OR Classic/Modern scope conflict (Classic Workbook activity racing a surrounding Modern scope on the same file), formula syntax (comma vs. semicolon separators, unescaped inner quotes, add-in-dependent functions), loop-induced Excel COM thrash when Write Cell runs cell-by-cell inside a tight loop, sheet name mismatch (same diagnostic as read-range-sheet-not-found), protected sheet / workbook / Read-only Mode scope, or invalid A1 cell reference / unknown named range. Includes anti-patterns section rejecting blanket Kill-Process-for-EXCEL, Retry-Scope-around-bad-formula, and Continue-On-Error suppression | [write-cell-failures.md](./playbooks/write-cell-failures.md) |
|
|
23
|
+
| Append Range Failures | Medium | `Append Range` (classic scoped) / `AppendRangeX` (modern scoped) / `Append Range Workbook` (standalone) fails. Signatures: `BusinessException` referencing missing `Excel Application Scope` / `Use Excel File`; `COMException 0x800A03EC Application-defined or object-defined error`; `BusinessException: The sheet with the name '<x>' does not exist`; `IOException: cannot access the file`; `NullReferenceException` on the activity; `BusinessException` mentioning "hidden rows" (package v2.8.5+). Causes: activity variant doesn't match the surrounding container (scoped activity outside a scope, OR Workbook activity colliding with a scope on the same path), sheet name mismatch or unsupported file extension for the active provider, workbook locked or read-only, uninitialized source DataTable, column schema mismatch between source DataTable and target sheet (count / order / types — appended by POSITION, not by header name), or hidden rows in the target append region. Includes anti-patterns section rejecting Delay-as-fix, bare-Try-Catch suppression, switch-to-Workbook-to-silence-scope-error, and pre-2.8.5 downgrade-to-silence-hidden-rows | [append-range-failures.md](./playbooks/append-range-failures.md) |
|
|
24
|
+
| Delete Range Failures | Medium | `DeleteRange` (classic) / `DeleteRangeX` (modern) fails. Signatures: `ArgumentException: The range is invalid` / `The string argument cannot be empty`; `COMException` referencing the shift operation or `Application-defined or object-defined error` (`0x800A03EC`); `IOException` / `COMException` with "cannot access the file"; or no exception with wrong rows removed. Causes: activity outside its required scope (`Excel Application Scope` / `Use Excel File`), invalid or empty `Range` syntax, `ShiftCells`/`ShiftOption` conflict with merged cells / Excel Tables, workbook locked or read-only, or AutoFilter hiding rows in the target block. Includes anti-patterns section rejecting Delay-as-fix, bare-Try-Catch suppression, and Delete-Range-when-Clear-Range-was-meant | [delete-range-failures.md](./playbooks/delete-range-failures.md) |
|
|
25
|
+
| Excel Application Scope (Classic) COM-Interop Failures | Medium | A SINGLE Classic `Excel Application Scope` (`ExcelApplicationScope`, COM-only) fails at the COM layer on a host that DOES have Excel. Signatures: `BusinessException: Error opening workbook. Make sure Excel is installed.` with inner `COMException 0x8002801D TYPE_E_LIBNOTREGISTERED` (or `0x80040154` despite a confirmed install); `BusinessException: Failed opening the Excel file. Possible reasons: file is corrupt, already used by another process or password protected.`; `InvalidCastException` on `System.__ComObject` with `0x80004002 E_NOINTERFACE`. Causes: COM registration / type-library corruption after an Office upgrade or repair (Excel present, interop broken); workbook held by an orphan `EXCEL.EXE` from a crashed prior job or a user-opened instance; a COM add-in (commonly `UiPath.Integration.ExcelAddin`) corrupting the interop QueryInterface. Fixes: Office Online Repair / UiPath Repair Tool / targeted `TypeLib` cleanup; clear orphan processes (`Kill Process EXCEL` on dedicated unattended hosts only) and fix what leaves orphans; disable the offending COM add-in. Includes anti-patterns rejecting Delay-as-fix, bare-Try-Catch suppression, full Office reinstall over repair, unconditional `Kill Process EXCEL` on shared hosts, and Visible-True-to-debug. Cross-references the card playbook for shared branches (true not-installed, path, multi-scope race, child-outside-scope, sensitivity) | [excel-application-scope-failures.md](./playbooks/excel-application-scope-failures.md) |
|
|
26
|
+
| Use Excel File / Excel Application Card Failures | Medium | The Modern scope container `ExcelApplicationCard` (Use Excel File) or Classic `Excel Application Scope` fails to open the workbook or govern its lifecycle. Signatures: `BusinessException: Error opening workbook. Make sure Excel is installed.`; `ArgumentException: Excel File path is empty or not set` / `Illegal characters in path`; `COMException RPC_E_SERVER_UNAVAILABLE` (`0x800706BA`) / `RPC_E_DISCONNECTED` (`0x80010108`) / `CO_E_SERVER_EXEC_FAILURE` (`0x80080005`); `BusinessException` on a child activity about missing scope; `COMException` / `BusinessException` referencing sensitivity label or information protection. Causes: Excel not installed or Interop broken (Classic always needs COM; Modern needs COM when COM-forcing properties are set or `.xls`/`.xlsb` files are involved); empty / null / illegal `WorkbookPath` from variable scope drift or upstream producer returning empty; COM/RPC race across multiple scopes without an `Excel Process Scope` wrapper (or a child macro tore down EXCEL.EXE); Modern child activity dropped outside any card (cross-cut to per-activity playbooks); Microsoft Purview / AIP sensitivity-label rejection on pre-v2.23.4 packages or v2.23.4+ without the SensitivityLabel/Operation properties configured. Includes anti-patterns section rejecting Delay-as-fix, bare-Try-Catch suppression, Visible-True-to-debug (a COM-forcing footgun), and package-downgrade-to-silence-sensitivity-label | [excel-application-card-failures.md](./playbooks/excel-application-card-failures.md) |
|
|
27
|
+
| Execute Macro / Run Spreadsheet Macro Failures | Medium | VBA macro invoked via `ExecuteMacro` (classic) or `Run Spreadsheet Macro` (modern) fails — most commonly `System.Runtime.InteropServices.COMException` with HRESULTs `0x80020009 DISP_E_EXCEPTION`, `0x800AC472`, or `0x80010108 RPC_E_DISCONNECTED`; sometimes a job hang with no exception when Excel surfaces a modal dialog. Causes: macro name not in workbook, VBA error inside the macro, macro tears down Excel (Workbooks.Close / Application.Quit), modal dialog (MsgBox / InputBox / debug break) blocking COM, macros disabled by Trust Center policy on the Robot host, concurrent COM access (STA apartment violation), or missing add-in / ActiveX dependency. Includes anti-patterns section rejecting Delay-as-fix and bare-Try-Catch suppression | [execute-macro-failures.md](./playbooks/execute-macro-failures.md) |
|
|
28
|
+
| Write Range Failures | Medium | `WriteRange` (classic) / `WriteRangeX` (modern) fails. Signatures: `NullReferenceException` on the activity; `IOException`/`COMException` "cannot access the file"; `BusinessException` mentioning "empty source" / "Ignore empty source" / "header"; `BusinessException` mentioning "hidden rows" / "hidden columns" (package v2.8.5+); `OutOfMemoryException` or `COMException 0x800A03EC`. Causes: uninitialized `DataTable` variable (preceding step skipped or variable scope drift), workbook locked or read-only (orphan EXCEL.EXE / Mark as Final / Modern scope `ReadOnly=True`), empty source DataTable with `ExcludeHeaders=False`, hidden rows or columns inside the target write range, oversized batches or formula-prefix characters (`=`, `+`, `-`, `@`) misinterpreted as broken formulas. Includes anti-patterns section rejecting Delay-as-fix, bare-Try-Catch suppression, ExcludeHeaders-to-silence-empty-source, and pre-2.8.5 downgrade-to-silence-hidden-rows | [write-range-failures.md](./playbooks/write-range-failures.md) |
|
|
@@ -15,6 +15,7 @@ If the data doesn't match: **discard it**. Do NOT use unrelated data as a proxy.
|
|
|
15
15
|
## Domain-Specific Data Gathering
|
|
16
16
|
|
|
17
17
|
1. **Activity execution traces** — these activities emit per-call traces. Pull them when available — they expose the exact Google REST endpoint hit, request/response status, and timing. Trace evidence narrows whether the failure originated at connection resolution, OAuth token validation, the Google API call, or post-processing inside the activity.
|
|
18
|
+
2. **Route by status class and exception type, not by the message sentence.** Modern `*Connections` activities wrap most failures into a `GSuiteException` whose *text* is a friendly mapping of the underlying HTTP status — different root causes share similar wording, and one generic message (`An error occurred in the activity.`) hides the real status entirely. Before matching a playbook, read the embedded HTTP status / inner exception from the trace and classify: **401** (token rejected) and **403** (authorization/quota) and auth-phase `TimeoutException` → connection/auth or storage-quota; **404** / unresolved item → resource-not-found; **400** server-side range/cell → the Sheets playbooks; **5xx / 429 / network `HttpRequestException` / per-request `A task was canceled.`** → transient-and-timeout. Note two specific traps: a per-request timeout surfaces as `TaskCanceledException` (`A task was canceled.`), **never** as `System.TimeoutException` (which only comes from authentication); and a client-side `ArgumentException`/`NullReferenceException` (invalid/null input) is thrown before any API call, so it has no HTTP status at all.
|
|
18
19
|
|
|
19
20
|
## Testing Prerequisites
|
|
20
21
|
|