Files
wehub-resource-sync 8cb1f9f479
Publish SDK (PyPI) / publish (push) Has been cancelled
Publish SDK (npm) / publish (@aionui/officecli-sdk) (push) Has been cancelled
SDK smoke / smoke (windows-latest) (push) Has been cancelled
Publish SDK (npm) / publish (@officecli/officecli-sdk) (push) Has been cancelled
Publish SDK (npm) / publish (@officecli/sdk) (push) Has been cancelled
Publish SDK (npm) / publish (officecli-sdk) (push) Has been cancelled
SDK smoke / smoke (macos-latest) (push) Has been cancelled
SDK smoke / smoke (ubuntu-latest) (push) Has been cancelled
Skill parity / diff (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 13:09:29 +08:00

121 lines
6.1 KiB
Bash

#!/bin/bash
# PowerPoint table cell merging — horizontal merge via gridSpan.
# Demonstrates: multi-column header spans, section headers spanning the table,
# nested header hierarchy.
#
# Note: officecli supports both horizontal (gridSpan) and vertical (merge.down)
# write-side merging. This file walks through gridSpan; see tables-rows-cols.sh
# slide 4 for a merge.down example.
# NOTE: intentionally NO `set -e`. Like the SDK twin's doc.batch, this script
# tolerates forward-compat 'UNSUPPORTED props' warnings (officecli exit 2) and
# keeps building so the full document is produced.
DIR="$(dirname "$0")"
PPTX="$DIR/tables-merged.pptx"
rm -f "$PPTX"
officecli create "$PPTX"
officecli open "$PPTX"
# --- Slide 1: 2-level header (gridSpan on row 1) ---
officecli add "$PPTX" / --type slide
officecli add "$PPTX" '/slide[1]' --type shape \
--prop text="Two-Level Header (gridSpan)" --prop size=28 --prop bold=true \
--prop x=0.5in --prop y=0.3in --prop width=12in --prop height=0.6in
officecli add "$PPTX" '/slide[1]' --type table \
--prop x=0.5in --prop y=1.2in --prop width=12in --prop height=3.5in \
--prop rows=6 --prop cols=5 --prop headerFill=2E75B6 --prop bodyFill=DEEAF6
# Row 1: super-headers
officecli set "$PPTX" '/slide[1]/table[1]/tr[1]/tc[1]' \
--prop text="Department" --prop bold=true --prop color=FFFFFF --prop align=center
officecli set "$PPTX" '/slide[1]/table[1]/tr[1]/tc[2]' \
--prop text="2024 Performance" --prop bold=true --prop color=FFFFFF --prop align=center \
--prop gridSpan=2
# tc[3] is now a continuation cell from gridSpan=2 — skip directly to tc[4].
officecli set "$PPTX" '/slide[1]/table[1]/tr[1]/tc[4]' \
--prop text="2025 Forecast" --prop bold=true --prop color=FFFFFF --prop align=center \
--prop gridSpan=2
# Row 2: sub-headers (lighter shade)
officecli set "$PPTX" '/slide[1]/table[1]/tr[2]/tc[1]' \
--prop text="" --prop fill=5B9BD5
officecli set "$PPTX" '/slide[1]/table[1]/tr[2]/tc[2]' \
--prop text="Revenue" --prop bold=true --prop color=FFFFFF --prop align=center --prop fill=5B9BD5
officecli set "$PPTX" '/slide[1]/table[1]/tr[2]/tc[3]' \
--prop text="Margin" --prop bold=true --prop color=FFFFFF --prop align=center --prop fill=5B9BD5
officecli set "$PPTX" '/slide[1]/table[1]/tr[2]/tc[4]' \
--prop text="Revenue" --prop bold=true --prop color=FFFFFF --prop align=center --prop fill=5B9BD5
officecli set "$PPTX" '/slide[1]/table[1]/tr[2]/tc[5]' \
--prop text="Margin" --prop bold=true --prop color=FFFFFF --prop align=center --prop fill=5B9BD5
# Body rows
for row in "3:Engineering:1.20M:18%:1.45M:22%" \
"4:Sales:2.30M:12%:2.80M:15%" \
"5:Marketing:0.95M:25%:1.10M:28%" \
"6:Operations:0.78M:30%:0.85M:32%"; do
IFS=':' read -r r d a b c e <<< "$row"
officecli set "$PPTX" "/slide[1]/table[1]/tr[$r]/tc[1]" --prop text="$d" --prop bold=true
officecli set "$PPTX" "/slide[1]/table[1]/tr[$r]/tc[2]" --prop text="$a" --prop align=right
officecli set "$PPTX" "/slide[1]/table[1]/tr[$r]/tc[3]" --prop text="$b" --prop align=right
officecli set "$PPTX" "/slide[1]/table[1]/tr[$r]/tc[4]" --prop text="$c" --prop align=right
officecli set "$PPTX" "/slide[1]/table[1]/tr[$r]/tc[5]" --prop text="$e" --prop align=right
done
# --- Slide 2: Section header rows spanning the full table ---
officecli add "$PPTX" / --type slide
officecli add "$PPTX" '/slide[2]' --type shape \
--prop text="Full-Width Section Headers" --prop size=28 --prop bold=true \
--prop x=0.5in --prop y=0.3in --prop width=12in --prop height=0.6in
officecli add "$PPTX" '/slide[2]' --type table \
--prop x=0.5in --prop y=1.2in --prop width=12in --prop height=4.5in \
--prop rows=9 --prop cols=4 --prop headerFill=1F3864
# Header
for entry in "1:Item" "2:Owner" "3:Due" "4:Status"; do
c="${entry%%:*}"; t="${entry#*:}"
officecli set "$PPTX" "/slide[2]/table[1]/tr[1]/tc[$c]" \
--prop text="$t" --prop bold=true --prop color=FFFFFF
done
# Section: "Phase 1" — spans all 4 columns
officecli set "$PPTX" '/slide[2]/table[1]/tr[2]/tc[1]' \
--prop text="◆ Phase 1 — Discovery" --prop bold=true --prop fill=FFE699 \
--prop gridSpan=4
officecli set "$PPTX" '/slide[2]/table[1]/tr[3]/tc[1]' --prop text="Stakeholder interviews"
officecli set "$PPTX" '/slide[2]/table[1]/tr[3]/tc[2]' --prop text="Alice"
officecli set "$PPTX" '/slide[2]/table[1]/tr[3]/tc[3]' --prop text="Mar 15"
officecli set "$PPTX" '/slide[2]/table[1]/tr[3]/tc[4]' --prop text="✓ Done" --prop color=00B050
officecli set "$PPTX" '/slide[2]/table[1]/tr[4]/tc[1]' --prop text="Market research"
officecli set "$PPTX" '/slide[2]/table[1]/tr[4]/tc[2]' --prop text="Bob"
officecli set "$PPTX" '/slide[2]/table[1]/tr[4]/tc[3]' --prop text="Mar 30"
officecli set "$PPTX" '/slide[2]/table[1]/tr[4]/tc[4]' --prop text="✓ Done" --prop color=00B050
# Section: "Phase 2"
officecli set "$PPTX" '/slide[2]/table[1]/tr[5]/tc[1]' \
--prop text="◆ Phase 2 — Design" --prop bold=true --prop fill=C6E0B4 \
--prop gridSpan=4
officecli set "$PPTX" '/slide[2]/table[1]/tr[6]/tc[1]' --prop text="Architecture spec"
officecli set "$PPTX" '/slide[2]/table[1]/tr[6]/tc[2]' --prop text="Carol"
officecli set "$PPTX" '/slide[2]/table[1]/tr[6]/tc[3]' --prop text="Apr 20"
officecli set "$PPTX" '/slide[2]/table[1]/tr[6]/tc[4]' --prop text="◐ WIP" --prop color=FFC000
# Section: "Phase 3"
officecli set "$PPTX" '/slide[2]/table[1]/tr[7]/tc[1]' \
--prop text="◆ Phase 3 — Build" --prop bold=true --prop fill=F4B084 \
--prop gridSpan=4
officecli set "$PPTX" '/slide[2]/table[1]/tr[8]/tc[1]' --prop text="Backend services"
officecli set "$PPTX" '/slide[2]/table[1]/tr[8]/tc[2]' --prop text="Dave"
officecli set "$PPTX" '/slide[2]/table[1]/tr[8]/tc[3]' --prop text="Jun 15"
officecli set "$PPTX" '/slide[2]/table[1]/tr[8]/tc[4]' --prop text="◯ Not started"
officecli set "$PPTX" '/slide[2]/table[1]/tr[9]/tc[1]' --prop text="Frontend UI"
officecli set "$PPTX" '/slide[2]/table[1]/tr[9]/tc[2]' --prop text="Eve"
officecli set "$PPTX" '/slide[2]/table[1]/tr[9]/tc[3]' --prop text="Jul 01"
officecli set "$PPTX" '/slide[2]/table[1]/tr[9]/tc[4]' --prop text="◯ Not started"
officecli close "$PPTX"
officecli validate "$PPTX"
echo "Created: $PPTX"