Próbuję automatycznie zmienić rozmiar kolumn w moim arkuszu. Piszę plik i na koniec próbuję zmienić rozmiar wszystkich moich kolumn.
// Add some data
$objPHPExcel->setActiveSheetIndex(0)
->setCellValue('B1', 'test1111111111111111111111')
->setCellValue('C1', 'test1111111111111')
->setCellValue('D1', 'test1111111')
->setCellValue('E1', 'test11111')
->setCellValue('F1', 'test1')
->setCellValue('G1', 'test1');
foreach($objPHPExcel->getActiveSheet()->getColumnDimension() as $col) {
$col->setAutoSize(true);
}
$objPHPExcel->getActiveSheet()->calculateColumnWidths();
Powyższy kod nie działa. Nie zmienia rozmiaru kolumny w celu dopasowania do tekstu
AKTUALIZACJA
Pisarz, którego używam$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
Jeśli musisz to zrobić na wielu arkuszach i wielu kolumnach w każdym arkuszu, oto jak możesz iterować je wszystkie:
źródło
$worksheet->getColumnIterator()
aby uprościć tutaj. Zobacz moją odpowiedźTutaj bardziej elastyczny wariant oparty na poście @Mark Baker:
Mam nadzieję że to pomoże ;)
źródło
range('A', 'AB')
zwróci tylko jeden element o nazwie „A”. Więc używanierange()
w tym przypadku NIE jest dobrym pomysłem!$sheet->getColumnIterator()
źródło
$i <= $objPHPExcel->getActiveSheet()->getHighestColumn()
przeciwnym razie ostatnia kolumna nie ma rozmiaruOto przykład użycia wszystkich kolumn z arkusza:
źródło
Ten fragment kodu automatycznie dopasuje rozmiar wszystkich kolumn zawierających dane we wszystkich arkuszach. Nie ma potrzeby używania metody pobierającej i ustawiającej activeSheet.
źródło
dla arkusza phpspreadsheet:
źródło
foreach (range('A', $sheet->getHighestDataColumn()) as $column) {$sheet->getColumnDimension($column)->setAutoSize(true);}
Na wypadek, gdyby ktoś tego szukał.
Poniższa rozdzielczość działa również na
PHPSpreadsheet
ich nowej wersji PHPExcel.Co robią te metody:
getHighestColumn($row = null)
- Uzyskaj najwyższą kolumnę arkusza.getHighestDataColumn($row = null)
- Uzyskaj najwyższą kolumnę arkusza zawierającą dane.getHighestRow($column = null)
- Uzyskaj najwyższy wiersz arkuszagetHighestDataRow($column = null)
- Uzyskaj najwyższy wiersz arkusza, który zawiera dane.źródło
źródło
Jeśli spróbujesz wykonać iterację z
for ($col = 2; $col <= 'AC'; ++ $col){...}
lub zforeach(range('A','AC') as $col) {...}
nią, będzie działać dla kolumn od A do Z, ale nie powiedzie się, aby przejść do Z (np. Iteracja między „A” a „AC”).Aby iterować przebieg `` Z '', musisz przekonwertować kolumnę na liczbę całkowitą, zwiększyć, porównać i ponownie uzyskać jako ciąg:
Dzięki temu możesz łatwo przejść przez kolumnę „Z” i ustawić autosize dla każdej kolumny.
źródło
Przyjdź późno, ale po przeszukaniu wszędzie stworzyłem rozwiązanie, które wydaje się być „tym jedynym”.
Wiedząc, że w ostatnich wersjach API istnieje iterator kolumn, ale nie wiedząc, jak dostosować sam obiekt kolumny, w zasadzie stworzyłem pętlę, aby przejść od prawdziwej pierwszej używanej kolumny do rzeczywistej, ostatnio używanej.
Oto jest:
źródło
źródło
musisz również zidentyfikować kolumny, aby ustawić wymiary:
źródło
źródło
Dla Spreedsheet + PHP 7, musisz napisać zamiast
PHPExcel_Cell::columnIndexFromString
,\PhpOffice\PhpSpreadsheet\Cell::columnIndexFromString
. A na pętli jest błąd, nie możesz<
z nim pracować<=
. W przeciwnym razie zbyt mocno weźmie kolumnę do pętli.źródło
Wszystkie te odpowiedzi są do dupy ... nie używaj zakresu (), to nie zadziała poza kolumną Z.
Po prostu użyj:
Zrób to po zapisaniu danych, aby iterator kolumn wiedział, ile kolumn ma wykonać iteracja.
źródło