Skip to content

2.8.0

Latest

Choose a tag to compare

@iliaal iliaal released this 04 Sep 00:23
2.8.0
843f2ff

Docs

  • Documented that ExcelSheet::writeRow()/writeCol() are non-atomic on libxl-side failure: PHP-side validation rejects the whole row or column before any cell is written, but a failure inside libxl can leave earlier cells committed.

Fixed

  • Stream-wrapper saves whose rename() is present but fails now also fail closed (destination left unchanged) instead of falling back to a truncating direct write. Only wrappers that omit rename() keep the warned fallback.
  • ExcelBook::save() to a local path no longer falls back to a truncating direct write when replacing the destination with the staged file fails. It now removes the staged file, warns that the destination was left unchanged, and returns false. Stream wrappers that do not implement rename() keep the previous direct-write fallback with its warning.
  • ExcelBook::load(), loadFile(), loadPartially(), loadFilePartially(), loadFileWithoutEmptyCells(), loadInfo(), and loadInfoRaw() no longer destroy the previously loaded workbook when the new load fails. The existing book and its live child wrappers survive a failed reload.
  • ExcelBook::save() to a local path now checks the staging-stream close result before handing the path to LibXL instead of saving over a failed reservation.
  • Failed handle creation (getSheet, sheet copies, fonts, formats, custom number formats, default font) and rejected header, footer, font-size, and staging inputs now emit warnings naming the cause instead of failing silently.

Changed

  • Stream-backed loads set a read timeout where the wrapper supports it, and bulk read and write loops now honor executor interruption. Wrappers without stream_set_option support are unaffected.