3 Commits

Author SHA1 Message Date
Nebojša Zlatanović adde74b4e6 Fix DIMENSIONS record to use 0-based indices for both rows AND columns
The initial fix only converted column indices to 0-based, but overlooked
that row indices also need the same treatment per BIFF8 specification.

Changes:
- Convert firstRowIndex from 1-based to 0-based (subtract 1)
- Convert lastRowIndex from 1-based to 0-based (subtract 1)
- Update row capping logic for 65536 limit
- Fix test assertions to expect rwMic=0 and rwMac=5 (not 1 and 6)
- Enhanced documentation to clarify all DIMENSIONS indices are 0-based

This now matches the behavior observed in Excel-generated XLS files,
where a file with 3 rows × 5 columns shows: rwMic=0, rwMac=3, colMic=0, colMac=5

All tests pass (53 tests, 244 assertions).
2025-10-20 09:07:39 +02:00
Nebojša Zlatanović f2ea8b6cb9 Fix PHPStan type safety issues in DimensionsRecordTest
Add proper type assertions to handle potential false returns:
- Assert file_get_contents() returns string, not false
- Assert strpos() returns int, not false
- Assert unpack() returns array, not false

This resolves all 7 PHPStan errors reported in CI while maintaining
test functionality (12 assertions, all passing).
2025-10-17 13:35:12 +02:00
Nebojša Zlatanović b9857e53d5 Improve DIMENSIONS record fix with better code coverage and unit tests
This commit refines the BIFF8 DIMENSIONS record fix by:

1. **Optimized column index capping**: Replaced the if-statement with min()
   function to ensure lastColumnIndex never exceeds 255, improving code
   coverage and eliminating unreachable branches in unit tests.

2. **Added comprehensive unit tests**: Created DimensionsRecordTest.php which
   directly parses the binary DIMENSIONS record (0x0200) from XLS files to
   verify correct 0-based column indices.

The tests validate:
- colMic (first column) = 0 for column A (was incorrectly 1 before fix)
- colMac (last column + 1) uses proper 0-based indexing
- Column indices are correctly capped at 255 (BIFF8 limit)

These tests fail without the fix and pass with it, ensuring the DIMENSIONS
record is correctly written for compatibility with legacy XLS parsers that
expect 0-based column indices per the BIFF8 specification.
2025-10-17 13:26:55 +02:00