Drukowana wersja tematu

Kliknij tu, aby zobaczyć temat w orginalnym formacie

Forum PHP.pl _ Object-oriented programming _ [Rozwiązany] PHPOffice, PhpSpreadsheets, problem z zakresem z funkcją

Napisany przez: bulimaxiu 11.05.2022, 09:05:08

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?

Napisany przez: nospor 11.05.2022, 09:11:51

Do jakiej funkcji php/phpoffice przekazyjesz ten tekst?

Napisany przez: bulimaxiu 11.05.2022, 09:52:54

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ą.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)