Saya mencoba mengubah ukuran kolom lembar saya secara otomatis. Saya sedang menulis file dan pada akhirnya saya mencoba mengubah ukuran semua kolom saya.
// 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();
Kode di atas tidak berfungsi. Tidak mengubah ukuran kolom agar pas dengan teks
UPDATE
Penulis yang saya gunakan$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
Jika Anda perlu melakukannya di beberapa lembar, dan beberapa kolom di setiap lembar, berikut adalah cara Anda dapat mengulang semuanya:
sumber
Berikut varian yang lebih fleksibel berdasarkan postingan @Mark Baker:
Semoga ini membantu ;)
sumber
range('A', 'AB')
hanya akan mengembalikan satu item bernama 'A'. Jadi menggunakanrange()
dalam kasus ini BUKAN ide yang bagus!sumber
$i <= $objPHPExcel->getActiveSheet()->getHighestColumn()
sebaliknya, kolom terakhir tidak berukuranIni adalah contoh bagaimana menggunakan semua kolom dari lembar kerja:
sumber
Potongan kode ini akan secara otomatis mengukur semua kolom yang berisi data di semua lembar. Tidak perlu menggunakan pengambil dan penyetel activeSheet.
sumber
untuk phpspreadsheet:
sumber
foreach (range('A', $sheet->getHighestDataColumn()) as $column) {$sheet->getColumnDimension($column)->setAutoSize(true);}
sumber
Seandainya seseorang mencari ini.
Resolusi di bawah ini juga berfungsi
PHPSpreadsheet
, versi baru PHPExcel mereka.Apa yang dilakukan metode ini:
getHighestColumn($row = null)
- Dapatkan kolom lembar kerja tertinggi.getHighestDataColumn($row = null)
- Dapatkan kolom lembar kerja tertinggi yang berisi data.getHighestRow($column = null)
- Dapatkan baris lembar kerja tertinggigetHighestDataRow($column = null)
- Dapatkan baris lembar kerja tertinggi yang berisi data.sumber
Jika Anda mencoba untuk mengulang dengan
for ($col = 2; $col <= 'AC'; ++ $col){...}
, atau denganforeach(range('A','AC') as $col) {...}
itu akan bekerja untuk kolom dari A ke Z, tetapi gagal melewati Z (Mis. Iterasi antara 'A' ke 'AC').Untuk mengulang pass 'Z', Anda perlu mengonversi kolom menjadi integer, increment, bandingkan, dan dapatkan lagi sebagai string:
Dengan ini, Anda dapat dengan mudah mengulangi kolom 'Z' dan mengatur ukuran otomatis ke setiap kolom.
sumber
Datang terlambat, tetapi setelah mencari di mana-mana, saya telah membuat solusi yang tampaknya "satu-satunya".
Diketahui bahwa ada iterator kolom pada versi API terakhir, tetapi tidak tahu bagaimana cara menyesuaikan objek kolom itu sendiri, pada dasarnya saya telah membuat loop untuk beralih dari kolom yang pertama digunakan yang sebenarnya ke yang terakhir digunakan yang sebenarnya.
Ini dia:
sumber
Anda juga perlu mengidentifikasi kolom untuk mengatur dimensi:
sumber
sumber
Untuk spreedsheet + PHP 7, Anda harus menulis bukan
PHPExcel_Cell::columnIndexFromString
,\PhpOffice\PhpSpreadsheet\Cell::columnIndexFromString
. Dan di loop adalah kesalahan, di sana Anda<
tidak boleh bekerja dengannya<=
. Jika tidak, dia mengambil kolom terlalu banyak ke dalam loop.sumber
sumber