Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
674 commits
Select commit Hold shift + click to select a range
17b26be
chore: bump version to 1.0.47
goworm Apr 14, 2026
2623816
fix(watch): escape backslashes before quotes in data-path selectors
goworm Apr 14, 2026
bb05d07
feat(excel): sort by path-as-range with merge/shared-formula rejection
goworm Apr 15, 2026
716ea86
fix(excel): reject empty sort value on range path
goworm Apr 15, 2026
1e33064
fix(excel): reject sort key column outside the range
goworm Apr 15, 2026
d1cb2e2
fix(excel): normalize reversed sort range (C5:A1 -> A1:C5)
goworm Apr 15, 2026
fc6d36b
fix(excel): reject extra tokens in sort key spec
goworm Apr 15, 2026
5f8538c
fix(excel): place sortState after autoFilter per CT_Worksheet schema
goworm Apr 15, 2026
6f7ed9e
fix(excel): reject sort on ranges containing formulas
goworm Apr 15, 2026
ff7e7c0
fix(excel): sort data rows by ascending RowIndex not document order
goworm Apr 15, 2026
db6c612
fix(excel): place sortState per CT_Worksheet schema when no autoFilter
goworm Apr 15, 2026
635ebab
fix(excel): reject malformed row layout before sort (no RowIndex / du…
goworm Apr 15, 2026
9ed97d2
fix(excel): refuse sort on protected sheet unless sheetProtection@sor…
goworm Apr 15, 2026
d1987ed
fix(watch): excel selection frame aligns with cell borders
goworm Apr 15, 2026
0a3e1e9
fix(excel): limit sort rejection scope to the sort range
goworm Apr 15, 2026
e92b7dd
fix(excel): surface semantic error for out-of-range row numbers in ce…
goworm Apr 15, 2026
9b86619
fix(excel): classify NaN and Infinity as text when sorting
goworm Apr 15, 2026
d9a80db
docs(excel): document sortHeader sheet property in help text
goworm Apr 15, 2026
dd649b5
fix(excel): reject merge+sort in same call to prevent half-write
goworm Apr 15, 2026
c77eec0
fix(excel): sidecar metadata follows sort (hyperlinks, comments, data…
goworm Apr 15, 2026
22f9371
fix(excel): rewrite threadedComments refs on sort like legacy comments
goworm Apr 15, 2026
8c30a7c
fix(excel): rewrite conditionalFormatting sqref on sort
goworm Apr 15, 2026
cb235a7
fix(excel): skip sortState on no-op sort (empty or single-row range)
goworm Apr 15, 2026
b59bcda
docs(excel): correct sort syntax in help and MCP schema
goworm Apr 15, 2026
f522d0f
fix(excel): drag drawing anchors with row movement during sort
goworm Apr 15, 2026
61f297f
fix(excel): sort case-insensitivity, ProtectedRange sidecar, duplicat…
goworm Apr 15, 2026
92c049b
fix(excel): sheet-sort parity with range-sort + malformed sortState c…
goworm Apr 15, 2026
d26e02b
feat(media): support SVG import in Word/Excel/PPT with PNG fallback
goworm Apr 15, 2026
f6e69a7
fix(excel): delete calc chain when add row/col shifts cells
goworm Apr 15, 2026
5b8ab06
fix(excel): clearer error when sort column is a name not a letter
goworm Apr 15, 2026
e6a787c
fix(excel): validate sort spec even on empty sheet; reject direction-…
goworm Apr 15, 2026
7dc79a5
feat(excel): add pareto chart type with auto-sort and cumulative-% line
goworm Apr 16, 2026
bd6e285
docs: add sort section to SKILL.md
goworm Apr 16, 2026
2f936c3
feat(word): add MERGEFIELD support for mail merge templates
claude Apr 16, 2026
dc3c644
feat(word): add REF, PAGEREF, SEQ, IF field types
claude Apr 16, 2026
13f5067
feat(word): add remaining common field types
claude Apr 16, 2026
d94fd58
docs: trim field examples in skill doc
claude Apr 16, 2026
db013ba
docs: consolidate field examples into compact format
claude Apr 16, 2026
82acb97
fix(html): improve line height, spacing collapse, docGrid snap, and c…
goworm Apr 16, 2026
e0e74e7
chore: bump version to 1.0.49
goworm Apr 16, 2026
27614f9
fix(word-html): table without tblW should use gridCol sum, not 100% p…
goworm Apr 16, 2026
a2ff78f
chore(cli): remind user to run close when resident auto-starts
goworm Apr 16, 2026
643e96a
fix(word-html): run property rendering — strike/underline variants, l…
goworm Apr 16, 2026
2229c0e
fix(word-html): tab stops render at declared positions, not em-space …
goworm Apr 16, 2026
ee0d067
fix(word-html): render multi-column section layout via CSS column-count
goworm Apr 16, 2026
af7fca5
fix(word-html): render tracked changes, rotated cell text, and cell n…
goworm Apr 16, 2026
e50406b
fix(word-html): render FORMCHECKBOX glyph and w:w character scale
goworm Apr 16, 2026
f22e9ce
fix(word-html): render picture rotation, flip, border, and outer shadow
goworm Apr 16, 2026
4942d65
fix(word-html): shape rotation+vAnchor on standalone shapes, ellipse …
goworm Apr 16, 2026
179565f
fix(word-html): tab leader middleDot renders as thicker dotted border
goworm Apr 16, 2026
1032bb3
fix(word-html): CJK emphasis, ruby/furigana, bidi direction, unicode-…
goworm Apr 16, 2026
d87ee9c
fix(word-html): render tables/images in headers-footers and substitut…
goworm Apr 16, 2026
8a9a9ea
fix(word-html): w:jc=distribute stretches every line, not just non-last
goworm Apr 16, 2026
e1947a8
fix(word-html): render cell/table borders with correct OOXML sz unit …
goworm Apr 16, 2026
2ea55fe
fix(word-html): theme colors fall back to Office default palette when…
goworm Apr 16, 2026
7efff38
fix(word-html): honor w:vanish and w:specVanish to omit hidden text
goworm Apr 16, 2026
5ca3a8a
fix(word-html): honor document defaultTabStop and autoHyphenation set…
goworm Apr 16, 2026
0279c72
fix(word-html): expose VML text content as fallback so WordArt/waterm…
goworm Apr 16, 2026
5dbae1e
fix(word-html): prefer a:extLst/svgBlip over PNG raster fallback
goworm Apr 16, 2026
23a8b28
fix(word-html): tblLook individual attrs override legacy val bitmask
goworm Apr 16, 2026
237c07e
fix(word-html): subscript/superscript always shrinks font, matching Word
goworm Apr 16, 2026
391b066
fix(word-html): per-underline color and unbreakable-token overflow
goworm Apr 16, 2026
48fcc90
fix(word-html): hanging indent without explicit left promotes hanging…
goworm Apr 16, 2026
d466d36
fix(word-html): broaden border val and tab leader OOXML mappings
goworm Apr 16, 2026
233f8d1
feat(word-html): unify list marker rendering via WordNumFmtRenderer
goworm Apr 17, 2026
b880ea6
fix(word-html): suppressNumbering skip, full lvlOverride, locale nume…
goworm Apr 17, 2026
e727169
fix(word-html): per-section page layout in multi-section docs
goworm Apr 17, 2026
07112bf
fix(word-html): batch — VML watermark, tall row split, oversized imag…
goworm Apr 17, 2026
7947e70
fix(word-html): batch — tab leader variants + lineRule=exact clipping
goworm Apr 17, 2026
be2b238
fix(word-html): drop cap paragraph wraps follow-on text in non-flex c…
goworm Apr 17, 2026
168f21a
fix(watch): skip HTML rendering when no watch session exists (#62)
windrider2010 Apr 17, 2026
6998fc4
fix(word-html): vertical-writing cell + noWrap anchors at inline-star…
goworm Apr 17, 2026
abd19e5
Merge branch 'main' of github.com:iOfficeAI/OfficeCLI
goworm Apr 17, 2026
cef7679
fix(word-html): render <w:altChunk> alternate content
goworm Apr 17, 2026
437ad07
fix(word-html): section-relative footnote numbering (numRestart=eachS…
goworm Apr 17, 2026
2280f1b
fix(word-html): per-page header/footer selection (titlePg + evenAndOd…
goworm Apr 17, 2026
beb1878
fix(word-html): tblHeader row repeats across continuation pages
goworm Apr 17, 2026
82bf1ea
fix(word): /body/p[N] skips m:oMathPara wrapper paragraphs
goworm Apr 17, 2026
84a7fb8
fix(word-html): honor chart c:legendPos (right/left/top/bottom/tr)
goworm Apr 17, 2026
14d8e62
fix(word-html): prstGeom top-5 shapes render as real polygons
goworm Apr 17, 2026
14a0484
fix(word-html): render <w:lnNumType> line numbers in the margin
goworm Apr 17, 2026
b5cbe23
fix(word-html): tighter float approximation for wp:anchor + tblpPr
goworm Apr 17, 2026
5a0bd3a
fix(word-html): wrap floating tables/images in BFC so text flows around
goworm Apr 17, 2026
30600e1
fix(word-html): prstGeom SVG falls back to gradient first color
goworm Apr 17, 2026
bc07632
fix(word-html): harden malformed OOXML + line-number/altChunk/tblHead…
goworm Apr 17, 2026
399a09d
fix(word-html): chart legendPos='ctr' falls through to below
goworm Apr 17, 2026
dd16432
fix(word): /body/oMathPara[M] only matches pure-wrapper paragraphs
goworm Apr 17, 2026
cb5f406
fix(word-html): guard pgMar parse, clone header per page, columns bou…
goworm Apr 17, 2026
be6d762
fix(word-html): tblLook individual attrs override val bits not replace
goworm Apr 17, 2026
4c54345
fix(word-html): columns de-flex + shape/run fill hex-validated + XSS shd
goworm Apr 17, 2026
016959d
fix(word-html): PAGE/NUMPAGES sentinel span + altChunk HTML sanitize
goworm Apr 17, 2026
823104b
fix(word-html): color-attr XSS gate + altChunk render as escaped text…
goworm Apr 17, 2026
b9d4776
fix(word-html): border/chart/font XSS + hyperlink scheme allowlist + …
goworm Apr 17, 2026
dec5ed5
fix(word-html): graceful theme/styles fallback + theme XSS gate + nes…
goworm Apr 17, 2026
28746cf
fix(word-html): footnote tables, nested ins/del, sdt/fldSimple hyperl…
goworm Apr 17, 2026
7d333b2
fix: Excel/PPT/chart color XSS gate + LaTeX color gate + ToAlpha cap …
goworm Apr 17, 2026
24b3926
fix: chart legendPos whitelist + chartEx color gate + header/footer h…
goworm Apr 17, 2026
e2956e6
fix(word): sanitize invalid OOXML attribute values on open
goworm Apr 17, 2026
b820dc7
chore: bump version to 1.0.50
goworm Apr 17, 2026
c4f808c
fix(preview): hex-gate Excel tab color, sanitize Excel default/Word t…
goworm Apr 17, 2026
5e48f01
fix(pptx-svg): CssSanitize font-family in foreignObject
goworm Apr 17, 2026
5be1509
fix(excel-html): non-collapsing gridlines so missing cells don't eras…
goworm Apr 17, 2026
6220f18
fix(xlsx): reject table names that parse as cell reference
goworm Apr 17, 2026
f60beed
chore(resident): tone down auto-start hint to a single inline note
goworm Apr 17, 2026
c6ec72d
fix(xlsx): unify table/column sanitization so Excel opens the file
goworm Apr 17, 2026
b40c3b5
fix(watch): main slide white-screen on incremental updates + cheap Is…
goworm Apr 17, 2026
cbe6b6f
chore: bump version to 1.0.51
goworm Apr 17, 2026
e7bbc76
fix(xlsx): honor shape preset= to set prstGeom prst value
goworm Apr 17, 2026
8e77e7e
fix(xlsx): render double underline as text-decoration-style:double in…
goworm Apr 17, 2026
04ea00d
fix(xlsx): clear stale CellFormula when Add writes a literal value
goworm Apr 17, 2026
ac872a6
fix(xlsx): append table totals row below data instead of overwriting …
goworm Apr 17, 2026
5685907
fix(xlsx): normalize validation formula1/2 for time/date/custom
goworm Apr 17, 2026
ee02858
fix(xlsx): map chart legend=topRight to OOXML 'tr' position
goworm Apr 17, 2026
60e1455
fix(xlsx): write internal hyperlinks (#Sheet!A1) as location attr
goworm Apr 17, 2026
f55f5aa
fix(xlsx): round-14 audit P0/P1 batch — validation/namedrange/picture…
goworm Apr 17, 2026
a660253
chore(xlsx): remove unused Packaging using in ChartHelper.Builder
goworm Apr 17, 2026
86491ec
fix(xlsx): chart trendline Set now appends instead of replacing
goworm Apr 17, 2026
c6334d6
fix(xlsx): validation list formula-ref pass-through, stopIfTrue helpe…
goworm Apr 17, 2026
002db9e
fix(xlsx): wire silent-dropped CF/validation/table props into Add
goworm Apr 17, 2026
8396f26
fix(xlsx): persist pivot sort and repeatLabels in OOXML
goworm Apr 17, 2026
3150c2b
fix(xlsx): round-14 audit P2 batch
goworm Apr 17, 2026
d6564fc
fix: refresh excel watch when row patches change columns (#64)
xpfxzxc Apr 18, 2026
fd02081
chore(xlsx): remove unused System.Text using in PivotTableHelper.Defi…
goworm Apr 17, 2026
25a8217
refactor(watch): detect excel chrome change server-side
goworm Apr 18, 2026
9d298ea
fix(resident): redirect stdout on macOS/Linux to prevent pipe inherit…
goworm Apr 18, 2026
8f0716f
chore: bump version to 1.0.52
goworm Apr 18, 2026
9f05614
fix(xlsx): reject overlapping add table
goworm Apr 18, 2026
21d8d86
fix(xlsx): grow tableColumns when set ref expands
goworm Apr 18, 2026
df87e1d
fix(xlsx): declare mc:Ignorable=x14 on worksheets with sparklines
goworm Apr 18, 2026
87c91af
fix(xlsx): apply built-in Hyperlink cell style to link cells
goworm Apr 18, 2026
fc15126
fix(xlsx): coalesce chart dataLabel entries by idx
goworm Apr 18, 2026
8450b0e
fix(xlsx): honor picture opacity
goworm Apr 18, 2026
8f8292d
fix(xlsx): honor picture crop
goworm Apr 18, 2026
3bdf6ed
fix(xlsx): honor picture hyperlink
goworm Apr 18, 2026
04ea4ca
fix(pptx-html): honor avLst adj for rightArrow and star5 clip-paths
goworm Apr 18, 2026
a8b033e
fix(xlsx): honor comment font properties
goworm Apr 18, 2026
c3b7d68
fix(xlsx): emit a16:decorative on picture
goworm Apr 18, 2026
05bf4f9
chore(xlsx): suppress null-argument warning in CommentRunProperties r…
goworm Apr 18, 2026
9e178c1
fix(xlsx): preserve quotes on validation list formula1 readback
goworm Apr 18, 2026
73a4b95
fix(pptx-html): radial gradient fills to shape edge, not bbox corner
goworm Apr 18, 2026
e9fad01
fix(xlsx): validate row height / outline level / column width ranges
goworm Apr 18, 2026
b5caba1
fix(xlsx): accept logScale=true shorthand for logBase=10 on chart axis
goworm Apr 18, 2026
96d801a
fix(xlsx): honor picture anchorMode=oneCell|absolute
goworm Apr 18, 2026
80dbedf
fix(xlsx): honor cell readingOrder property
goworm Apr 18, 2026
e8630f0
fix(xlsx): support chart trendline label/forecast/order/equation props
goworm Apr 18, 2026
a457c30
fix(xlsx): honor chart errBars.direction
goworm Apr 18, 2026
da6cdbb
fix(xlsx): emit showLeaderLines on pie/doughnut
goworm Apr 18, 2026
b445409
fix(xlsx): support shape gradient fill via gradientFill=
goworm Apr 18, 2026
e888f10
fix(pptx-html): non-solid stroke width in pt, inset by half-stroke, e…
goworm Apr 18, 2026
ff6fc82
fix(xlsx): wire pivot bandedRows/bandedCols/showDrill/mergeLabels
goworm Apr 18, 2026
5732a56
fix(xlsx): support per-column custom totalsFormula on tables
goworm Apr 18, 2026
8aba482
fix(xlsx): expose per-column autofilter criteria (equals/contains/gt/…
goworm Apr 18, 2026
6e0f76a
chore(xlsx): drop top-level System.Text using (only fully-qualified u…
goworm Apr 18, 2026
60bbea7
fix(xlsx): add Set branch for shape and textbox
goworm Apr 18, 2026
eedaeb1
fix(pptx-html): reflection gradient direction and EndAlpha
goworm Apr 18, 2026
d0c4e53
fix(xlsx): render shapes and textboxes in html preview
goworm Apr 18, 2026
99a6ac1
fix(xlsx): wrap non-Office OLE payloads in CFB Ole10Native
goworm Apr 18, 2026
a1108f4
fix(pptx-html): render double underline as two distinct strokes
goworm Apr 18, 2026
e2898f5
fix(xlsx): support rich-text cells via runs=<json>
goworm Apr 18, 2026
0bc0089
fix(xlsx): complete autofilter criteria (topPercent/bottom/between/va…
goworm Apr 18, 2026
1a064a4
fix(xlsx): support table autoExpand and per-column dxfId
goworm Apr 18, 2026
fd6241d
fix(xlsx): support pivot labelFilter row-level pre-cache filter
goworm Apr 18, 2026
6365c51
fix(pptx-html): numbered bullets and hanging-indent layout
goworm Apr 18, 2026
3d71b96
fix(pptx-html): default 1pt black grid when table cell borders absent
goworm Apr 18, 2026
b0326ab
fix(xlsx): auto-expand table ref when cells are added below/right
goworm Apr 18, 2026
1fa1acc
fix(xlsx): support pivot calculatedField
goworm Apr 18, 2026
621d663
fix(preview): clean deferred rendering bugs across pptx svg/shapes/ta…
goworm Apr 18, 2026
20f8230
fix(pptx-html): map remaining underline and strike variants
goworm Apr 18, 2026
979f869
feat(xlsx): add text overflow detection for wrapText cells in 'check'…
goworm Apr 18, 2026
ed98ed8
feat(xlsx): fire text-overflow warning inline on add/set
goworm Apr 18, 2026
e726881
feat(resident): emit text-overflow warning on set/add through residen…
goworm Apr 18, 2026
1d82c54
feat(pptx): add pattern= fill and blur= effect to shape Add/Set
goworm Apr 18, 2026
fdacd0e
feat(pptx): AddParagraph accepts level, lineSpacing, spaceBefore/After
goworm Apr 18, 2026
76ab085
fix(xlsx): cover all OOXML preset shapes via reflection map
goworm Apr 18, 2026
d9af096
revert(pptx-html): drop double-underline background-image polyfill
goworm Apr 18, 2026
126e960
fix(xlsx): honor shape/textbox anchor= parameter
goworm Apr 18, 2026
537eceb
fix(xlsx): honor picture anchor= cell-range syntax
goworm Apr 18, 2026
a80065a
fix(pptx): picture crop schema order and Add parity
goworm Apr 18, 2026
065ea19
fix(pptx-html): reverse legend series order for horizontal bar charts
goworm Apr 18, 2026
d5be21f
fix(docx): enforce rPr schema order when setting paragraph font/size
goworm Apr 18, 2026
9559c40
fix(docx): enforce rPr schema order for empty-table-cell font/size
goworm Apr 18, 2026
0bcada2
chore(docx): route rPr shading/vertAlign through schema-ordered insert
goworm Apr 18, 2026
b821f17
fix(pptx-html): render bent/curved connectors and both-end arrows
goworm Apr 18, 2026
c8881e9
fix(xlsx): honor chart anchor= cell-range syntax
goworm Apr 18, 2026
a9eb92e
fix(xlsx): honor slicer anchor= cell-range syntax
goworm Apr 18, 2026
9a7b24c
fix(pptx-html): compose group rotation onto child wrapper
goworm Apr 18, 2026
f6d7aad
fix(docx): accept /body/sectPr path in Set for page size/margins
goworm Apr 18, 2026
1a0de64
fix(watch): surface initial render errors to stderr
goworm Apr 18, 2026
165acf3
fix(xlsx): split merge= comma-list into separate mergeCell elements
goworm Apr 18, 2026
2f50a5d
fix(xlsx): wire conditionalFormatting rule=cellIs with operators + dxf
goworm Apr 18, 2026
696b451
fix(xlsx): honor font.* sub-props on shape/textbox text
goworm Apr 18, 2026
62f014c
fix(pptx-html): emit anchor tags and auto-style hyperlinked runs
goworm Apr 18, 2026
0279445
fix(xlsx): honor seriesN.color on chart Add
goworm Apr 18, 2026
4e480ea
fix(xlsx): accept flipH/flipV/flipBoth aliases on shape
goworm Apr 18, 2026
5485e75
fix(xlsx): accept cropLeft/cropRight/cropTop/cropBottom aliases on pi…
goworm Apr 18, 2026
531ec15
fix(xlsx): accept showTotals= alias for totalRow on table
goworm Apr 18, 2026
e103f8a
chore(xlsx): drop unused Packaging/Drawing usings in ChartHelper
goworm Apr 18, 2026
aa600b9
fix(pptx-html): picture srcRect zooms region to fill container
goworm Apr 18, 2026
592e44c
fix(pptx-html): render diagonal cell borders in tables
goworm Apr 18, 2026
5932303
fix(xlsx): remove __total__ / Total Sum leakage in pivot layout
goworm Apr 18, 2026
a23c854
fix(xlsx): complete pivot calculatedField end-to-end (known prop)
goworm Apr 18, 2026
046cd3f
fix(xlsx): accept /namedrange[NAME] path bracket on Add
goworm Apr 18, 2026
0a36df7
fix(xlsx): stop appending underscore to first use of table name
goworm Apr 18, 2026
90479f4
chore(xlsx): drop unused System.Text / OpenXml usings in PivotTableHe…
goworm Apr 18, 2026
a45ea00
fix(word-html): append generic font-family so per-run font survives
goworm Apr 18, 2026
109cc74
fix(xlsx): honor gradientFill= on chart Add
goworm Apr 18, 2026
dfcfab0
fix(xlsx): accept type=error with standard error tokens
goworm Apr 18, 2026
0faa2fc
fix(word-html): honor titlePg when first-page footer reference is absent
goworm Apr 18, 2026
c7227f9
fix(xlsx): propagate border.all.color to all four sides
goworm Apr 18, 2026
1307da8
fix(xlsx): bind chart secondary Y axis to right edge via crosses=max
goworm Apr 18, 2026
e53be91
fix(xlsx): honor cell-ref path tail on cell Add
goworm Apr 18, 2026
4d29ce1
fix(xlsx): strip leading = from definedName ref
goworm Apr 18, 2026
4adf1cb
fix(xlsx): set fullCalcOnLoad when named-range has formula body
goworm Apr 18, 2026
10ea8db
fix(xlsx): copy cells when row Add uses --from
goworm Apr 18, 2026
c28d176
fix(xlsx): accept ref= as single-cell anchor on shape/textbox
goworm Apr 18, 2026
b38ce60
fix(xlsx): invalidate formula cachedValue on sheet removal
goworm Apr 18, 2026
502976e
chore(xlsx): drop unused X14 using in ExcelHandler.Remove
goworm Apr 18, 2026
318edca
fix(xlsx): emit Excel 2010+ x14 extension for databar CF
goworm Apr 18, 2026
8fe12a2
fix(xlsx): honor chart name= property
goworm Apr 18, 2026
6b1a40f
fix(xlsx): prefix Excel 2016+ dynamic-array functions with _xlfn.
goworm Apr 18, 2026
74dda8d
fix(xlsx): expose activeTab/firstSheet on workbook Set
goworm Apr 18, 2026
0118487
fix(xlsx): report correct cell type when formula cached value is a st…
goworm Apr 18, 2026
b2c4777
fix(xlsx): echo shape rotation on Get
goworm Apr 18, 2026
2e3a1a7
feat: word underline variants, firstLineIndent lenient, chart datalab…
goworm Apr 18, 2026
7284a74
feat(pptx): slide HeaderFooter toggles and picture fill modes
goworm Apr 18, 2026
46cfd95
feat(pptx): add placeholder via CLI and preserve chExt on group resize
goworm Apr 18, 2026
b48ba31
feat(pptx): hyperlink tooltip, slide-jump actions, and shape-level ht…
goworm Apr 18, 2026
6f1579f
fix(xlsx): reject cell values exceeding 32767-char Excel limit
goworm Apr 18, 2026
21cf657
fix(xlsx): convert ISO datetime with time component to OADate serial
goworm Apr 18, 2026
16ffbc8
fix(xlsx): warn when value= and formula= are both supplied
goworm Apr 18, 2026
dd2d010
fix(xlsx): enforce CT_EffectList schema order on shape effects
goworm Apr 18, 2026
74613df
fix(xlsx): honor explicit cell type= directive
goworm Apr 19, 2026
590505e
fix(xlsx): apply chart xAxis/valAxis labelRotation to tick labels
goworm Apr 19, 2026
14171d0
fix(xlsx): expand single-cell shape ref to visible extent
goworm Apr 19, 2026
8b58e2a
fix(xlsx): wire aboveAverage stdDev=/equalAverage= on CF rule
goworm Apr 19, 2026
94bec0a
fix(xlsx): add Set dispatch for /SheetName/slicer[N]
goworm Apr 19, 2026
1191f1c
fix(xlsx): join shape text paragraphs with \n on Get
goworm Apr 19, 2026
41e28e3
fix(xlsx): resolve chart series name cell reference to strRef
goworm Apr 19, 2026
600cc6f
fix(xlsx): emit calculatedColumnFormula when table column has uniform…
goworm Apr 19, 2026
9c6d8cd
fix(xlsx): wire full font sub-props into formulacf dxf
goworm Apr 19, 2026
36a012f
fix(xlsx): resolve chart title and axis title cell references to strRef
goworm Apr 19, 2026
56171db
fix(xlsx): skip freeze pane element when freeze=A1 (no-op)
goworm Apr 19, 2026
4a5b82d
fix(xlsx): propagate source numFmt to pivot cacheField
goworm Apr 19, 2026
5fdefa8
fix(xlsx): accept yAxisScale=log / logScale=true / logBase= on chart Add
goworm Apr 19, 2026
7c4d071
chore: bump version to 1.0.53
goworm Apr 19, 2026
f6e28ed
docs: v1.0.46–v1.0.53 — check command, new features across formats
goworm Apr 19, 2026
b18e526
refactor: fold 'check' command into 'view <file> issues'
goworm Apr 19, 2026
2a65990
docs(readme): replace 'check' row with 'view issues' in command table
goworm Apr 19, 2026
3ce0387
fix(word): query run[color=...] now matches runs inside table cells
goworm Apr 19, 2026
4a7ae5d
feat(word): add tracked changes find/replace support
kuishou68 Apr 22, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
39 changes: 35 additions & 4 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -34,12 +34,16 @@ jobs:
os: ubuntu-latest
- rid: win-x64
name: officecli-win-x64.exe
os: ubuntu-latest
os: windows-latest
- rid: win-arm64
name: officecli-win-arm64.exe
os: ubuntu-latest
os: windows-latest
runs-on: ${{ matrix.os }}

defaults:
run:
shell: bash

steps:
- uses: actions/checkout@v4

Expand Down Expand Up @@ -81,14 +85,41 @@ jobs:
if: >-
(matrix.rid == 'osx-arm64' && runner.arch == 'ARM64') ||
(matrix.rid == 'osx-x64' && runner.arch == 'X64') ||
(matrix.rid == 'linux-x64' && runner.os == 'Linux')
(matrix.rid == 'linux-x64' && runner.os == 'Linux') ||
(matrix.rid == 'win-x64' && runner.os == 'Windows')
env:
# Disable Git Bash (MSYS) POSIX-to-Windows path conversion on
# windows-latest, which otherwise mangles `/body` into
# `C:/Program Files/Git/body` before it reaches the CLI.
MSYS_NO_PATHCONV: '1'
MSYS2_ARG_CONV_EXCL: '*'
run: |
chmod +x publish/${{ matrix.name }}
publish/${{ matrix.name }} create test_smoke.docx
publish/${{ matrix.name }} add test_smoke.docx /body --type paragraph --prop text="Hello from CI"
publish/${{ matrix.name }} get test_smoke.docx /body/p[1]
publish/${{ matrix.name }} get test_smoke.docx '/body/p[1]'
publish/${{ matrix.name }} close test_smoke.docx
rm -f test_smoke.docx

- name: Smoke test - install
if: >-
(matrix.rid == 'osx-arm64' && runner.arch == 'ARM64') ||
(matrix.rid == 'osx-x64' && runner.arch == 'X64') ||
(matrix.rid == 'linux-x64' && runner.os == 'Linux') ||
(matrix.rid == 'win-x64' && runner.os == 'Windows')
env:
MSYS_NO_PATHCONV: '1'
MSYS2_ARG_CONV_EXCL: '*'
run: |
publish/${{ matrix.name }} install
if [ "$RUNNER_OS" == "Windows" ]; then
test -f "$LOCALAPPDATA/OfficeCli/officecli.exe" || { echo "FAIL: officecli.exe not found in %LOCALAPPDATA%\\OfficeCli"; exit 1; }
"$LOCALAPPDATA/OfficeCli/officecli.exe" --version
else
test -f "$HOME/.local/bin/officecli" || { echo "FAIL: officecli not found in ~/.local/bin"; exit 1; }
"$HOME/.local/bin/officecli" --version
fi

- name: Upload artifact
uses: actions/upload-artifact@v4
with:
Expand Down
126 changes: 126 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,126 @@
# Contributing to OfficeCLI

> 中文版 / Chinese version: [CONTRIBUTING.zh.md](./CONTRIBUTING.zh.md)

> You must follow the two rules below. Code style, dependencies, tests, and
> docs are handled by the maintainer in post-merge cleanup — do not worry
> about them.

## Rule 1: One PR = one atomic change

A PR must contain exactly one feature or one bug fix that cannot be further
decomposed. If your change can be split into multiple pieces that each have
standalone value, submit each piece as a separate PR.

### Self-check

Before opening the PR, ask your AI tool:

> "Analyze this diff. Can it be decomposed into multiple PRs where each
> could be merged or reverted independently? If yes, list them."

If the answer is "yes, N PRs", split into N PRs before submitting.

### Examples

**✅ Single-PR bugs** — one root cause, one fix
- `Picture added with only 'width' specified gets wrong default height`
- `Body-level find: anchor throws ArgumentException`
- `AddParagraph --index N is off-by-one when the body contains a table`

**✅ Single-PR features** — one coherent capability
- `query ole: list embedded OLE objects with ProgID and dimensions`
- `set wrap/hposition/vposition on floating pictures`

**❌ Must split** — multiple independent changes bundled together
- `Fix picture index bug + add OLE detection + add HTML heading numbering`
→ 3 PRs, zero shared code
- `Add OLE object detection + add EMF→PNG conversion`
→ 2 PRs, two independent layers
- `Add auto aspect ratio + fix index off-by-one + fix line spacing clipping`
→ 3 PRs, three unrelated root causes

**🤔 Judgment calls** — default to splitting
- `Add helper function + its first consumer`
→ 1 or 2 PRs; split if the helper has standalone reuse potential
- `Add read support + add write support for the same property`
→ 1 or 2 PRs; split if you want read to land before write is vetted

## Rule 2: Every PR must include a verifiable validation method

State in the PR description (or a linked issue) how a reviewer can confirm
your change actually works.

### For bug-fix PRs — pick one (in order of preference)

1. **officecli command sequence** showing broken output before and fixed
output after
2. **Shell or Python script** that reproduces the bug and runs clean after
the fix
3. **Authoritative reference** showing what the correct behavior should be
(OOXML spec, Microsoft / ECMA docs, etc.)
4. **Screenshot** — only when the bug is purely visual

### For feature PRs — include at minimum

- **A screenshot** of the feature in action (Word / Excel / PowerPoint
window, HTML preview, or terminal output)
- Optionally a command sequence showing how to trigger it

### Examples

**Bug fix — command sequence (ideal):**

```bash
# Before my fix:
officecli blank test.docx
officecli add test.docx picture --prop "path=photo-2x1.png" --prop "width=10cm"
officecli query test.docx picture
# → height: "10.2cm" ❌ WRONG (hardcoded 4-inch default)

# After my fix:
officecli blank test.docx
officecli add test.docx picture --prop "path=photo-2x1.png" --prop "width=10cm"
officecli query test.docx picture
# → height: "5.0cm" ✓ CORRECT (auto-computed from 2:1 pixel ratio)
```

**Feature — screenshot (ideal):**

> **Heading auto-numbering from style chain**
>
> Before: ![heading-before.png] (plain "Chapter One" with no number)
> After: ![heading-after.png] ("1. Chapter One" with auto-numbering span)
>
> How to trigger:
> ```bash
> officecli blank demo.docx
> officecli add demo.docx paragraph --prop "style=Heading1" --prop "text=Chapter One"
> officecli watch demo.docx
> ```

## If you don't follow these rules

The maintainer reserves two options.

### Option A — Reject and ask for resubmission (preferred)

The maintainer closes the PR with a link to this guide and asks you to
resubmit as properly decomposed PRs with validation methods.

**Your credit:** the PR is entirely yours, including the **"Merged"** badge
after resubmission.

### Option B — Cherry-pick the valuable parts (last resort)

If part of your PR is clearly valuable and worth saving, the maintainer runs
`git cherry-pick` on those commits into `main` directly and closes the
original PR.

**Your credit:**
- `git cherry-pick` preserves the original author, so `git log` and
`git blame` still show you as author of those lines.
- The maintainer's reconcile commit message carries a
`Co-authored-by: <you> <your-email>` trailer, which counts toward your
GitHub contribution graph.
- **However, the original PR shows as "Closed" instead of "Merged"**.
118 changes: 118 additions & 0 deletions CONTRIBUTING.zh.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,118 @@
# 为 OfficeCLI 贡献代码

> English / 英文主文件: [CONTRIBUTING.md](./CONTRIBUTING.md)

> 你必须遵守下面两条规则。代码风格、依赖、测试、文档由维护者在 merge 之后通过
> follow-up commit 处理 —— 不用操心。

## Rule 1: 一个 PR 只做一件不可再拆的事

一个 PR 必须包含且仅包含一个 feature 或一个 bug 修复,而且这个单元不能再被拆分。
如果你的改动可以被拆成多个每个都有独立价值的部分,就拆成多个 PR 分别提交。

### 自检

提交前,先让你的 AI 做一次拆分分析:

> "分析下面这一坨 diff,它能不能拆成多个独立的 PR,每个都可以独立 merge 或独立
> revert?如果可以,列出来。"

如果回答是"可以,N 个 PR",就先拆再提。

### Examples

**✅ 可以作为一个 PR 的 bug** —— 单一根因,单一修复
- `图片只指定 width 时 height fallback 错了`
- `body 级 find: 锚点抛 ArgumentException`
- `AddParagraph --index N 在 body 含 table 时偏移`

**✅ 可以作为一个 PR 的 feature** —— 单一 coherent 能力
- `query ole: 列出所有嵌入的 OLE 对象及其 ProgID 和尺寸`
- `set wrap/hposition/vposition on floating pictures`

**❌ 必须拆** —— 多个独立改动被打包
- `修图片索引 bug + 加 OLE 检测 + 加 HTML heading 编号`
→ 3 个 PR,零共享代码
- `加 OLE 对象检测 + 加 EMF→PNG 转换`
→ 2 个 PR,两个独立 layer
- `加自动宽高比 + 修索引 off-by-one + 修行距裁剪`
→ 3 个 PR,三个不相关的根因

**🤔 可拆可不拆** —— 默认选拆
- `加一个 helper 函数 + 第一处调用者`
→ 1 或 2 个 PR;helper 有独立复用价值就拆
- `加 read 支持 + 加 write 支持(同一属性)`
→ 1 或 2 个 PR;希望 read 先被 vet 就拆

## Rule 2: 每个 PR 必须附带可验证的验证方法

在 PR description 或关联 issue 里写清楚:reviewer 怎么才能验证你的改动真的有效。

### Bug 修复 PR —— 至少给出一种(按优先顺序)

1. **officecli 命令序列**,展示改动前的错误输出和改动后的正确输出
2. **shell 或 python 脚本**,能复现 bug、在修复后干净退出
3. **权威文档引用**,说明正确行为应该是什么样(OOXML spec、Microsoft / ECMA
文档等)
4. **截图** —— 仅当 bug 纯粹是视觉问题时

### Feature PR —— 至少包含

- **一张截图**,展示 feature 实际效果(Word / Excel / PowerPoint 窗口、HTML
预览、或终端输出)
- 可选:一段 shell 命令序列说明如何触发这个 feature

### Examples

**Bug 修复 —— 命令序列格式(最理想):**

```bash
# Before my fix:
officecli blank test.docx
officecli add test.docx picture --prop "path=photo-2x1.png" --prop "width=10cm"
officecli query test.docx picture
# → height: "10.2cm" ❌ 错(硬编码 4 英寸 fallback)

# After my fix:
officecli blank test.docx
officecli add test.docx picture --prop "path=photo-2x1.png" --prop "width=10cm"
officecli query test.docx picture
# → height: "5.0cm" ✓ 对(根据 2:1 像素比例自动计算)
```

**Feature —— 截图格式(最理想):**

> **标题自动编号(从 style chain 解析)**
>
> Before: ![heading-before.png] (纯 "Chapter One",无编号)
> After: ![heading-after.png] ("1. Chapter One",带自动编号 span)
>
> 如何触发:
> ```bash
> officecli blank demo.docx
> officecli add demo.docx paragraph --prop "style=Heading1" --prop "text=Chapter One"
> officecli watch demo.docx
> ```

## 如果你不遵守这两条规则

维护者保留以下两种处理方式。

### Option A —— 拒绝并要求重新提交(首选)

维护者关闭 PR,留一条指向本 guide 的 comment,请你按规则拆分后重新提交。

**你的 credit:** PR 完全归你,重新提交成功后仍然拿 **"Merged"** badge。

### Option B —— Cherry-pick 有价值的部分(最后手段)

如果你的 PR 里有一部分明显有价值、值得保留,维护者会用 `git cherry-pick` 直接把
这些 commit 摘到 `main`,然后关闭原 PR。

**你的 credit:**
- `git cherry-pick` 保留原作者,所以 `git log` 和 `git blame` 里那些代码行仍然
显示你是作者。
- 维护者创建的 reconcile commit message 会附带
`Co-authored-by: <you> <your-email>` trailer,GitHub 贡献图会把它算进你的
contribution。
- **但原 PR 会显示为 "Closed" 而不是 "Merged"**。
Loading