Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Rozwiązany] PHPOffice, PhpSpreadsheets, problem z zakresem z funkcją
Forum PHP.pl > Forum > PHP > Object-oriented programming
bulimaxiu
Witam.

Tworzę w PHPOffice / PHPSpreadsheet w wersji 1.20.0 - 2021-11-23 formułę typu
Kod
=SUM($K$2:INDIRECT("K"&(ROW()-4)))
Excel tą formułę przyjmuje bez zastrzeżeń, ale klasa PHP niestety zwraca błąd
Kod
Fatal error: Uncaught TypeError...


Ustaliłem, że problem tkwi w części, gdzie podany zakres jest łączony z funkcji INDIRECT
Kod
=INDIRECT("K"&(ROW()-4)) // nie zgłasza błędu
=SUM(INDIRECT("K"&(ROW()-4))) // nie zwraca błędu
=SUM(INDIRECT("K"&(ROW()-5)):INDIRECT("K"&(ROW()-4))) // ZWRACA BŁĄD Uncaught TypeError: trim(): Argument #1 ($string) must be of type string, array given
=SUM($K$5:INDIRECT("K"&(ROW()-4))) // ZWRACA BŁĄD - błędna formuła
=SUM($K$5;INDIRECT("K"&(ROW()-4))) // ZWRACA BŁĄD - błędna formuła
=SUM($K$5:INDIRECT("K"+(ROW()-4))) // nie zwraca błędu, ale Excel wskazuje błędny argument
=SUM($K$5;INDIRECT("K"+(ROW()-4))) // ZWRACA BŁĄD - błędna formuła


Podejrzewam, że problemem jest określenie zakresu czyli dwukropek -> średnik, zgodnie z dokumentacją zastąpiłem, ale nadal jestem w ślepej uliczce.\
Czy ktoś dostrzega defekt?
nospor
Do jakiej funkcji php/phpoffice przekazyjesz ten tekst?
bulimaxiu
Ten tekst przekazuje do funkcji $sheet->setCellValue(), tak jak inne formuły (działają), choć nie zawierające zakresów.
Kod
$sheet->setCellValue('K20', '=SUM($K$5;INDIRECT("K"&(ROW()-4)))');


Problem rozwiązany. Wystarczyło zakres komórek określić w funkcji INDIRECT, a nie tylko adres docelowej komórki:
Kod
=SUM(INDIRECT("$K$2:K"&(ROW()-4)))

Pomimo, że Excel akceptuje obie te formy, to PHPOffice nakazuje tylko tą jedną.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.