시트의 열 크기를 자동으로 조정하려고합니다. 파일을 작성 중이며 결국 모든 열의 크기를 조정하려고합니다.
// 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();
위의 코드는 작동하지 않습니다. 텍스트에 맞게 열 크기를 변경하지 않습니다.
업데이트
내가 사용하는 작가$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
답변
열이 AutoSize로 설정된 경우 PHPExcel은 계산 된 열 값 (즉, 수식의 결과에 따라) 및 천 단위 구분 기호와 같은 형식 마스크에 의해 추가 된 추가 문자를 기반으로 열 너비를 계산하려고합니다.
기본적으로 이것은 estimated
너비입니다. GD 사용을 기반으로보다 정확한 계산 방법을 사용할 수 있으며 굵게 및 기울임 꼴과 같은 글꼴 스타일 기능도 처리 할 수 있습니다. 그러나 이것은 훨씬 더 큰 오버 헤드이므로 기본적으로 꺼져 있습니다. 다음을 사용하여보다 정확한 계산을 활성화 할 수 있습니다.
PHPExcel_Shared_Font::setAutoSizeMethod(PHPExcel_Shared_Font::AUTOSIZE_METHOD_EXACT);
그러나 자동 크기 조정은 모든 작성기 형식에 적용되지는 않습니다. 예를 들어 CSV. 어떤 작가를 사용하고 있는지 언급하지 않습니다.
그러나 차원을 설정하려면 열을 식별해야합니다.
foreach(range('B','G') as $columnID) {
$objPHPExcel->getActiveSheet()->getColumnDimension($columnID)
->setAutoSize(true);
}
$objPHPExcel->getActiveSheet()->getColumnDimension()
열 ID가 필요합니다.
$objPHPExcel->getActiveSheet()->getColumnDimensions()
정의 된 모든 열 차원 레코드의 배열을 반환합니다. 그러나 열 차원 레코드가 명시 적으로 생성되지 않은 경우 (아마도 템플릿을로드하거나 수동으로 호출하여 getColumnDimension()
) 존재하지 않습니다 (메모리 저장).
답변
여러 시트와 각 시트의 여러 열에서이를 수행해야하는 경우 다음과 같이 모든 시트를 반복 할 수 있습니다.
// Auto size columns for each worksheet
foreach ($objPHPExcel->getWorksheetIterator() as $worksheet) {
$objPHPExcel->setActiveSheetIndex($objPHPExcel->getIndex($worksheet));
$sheet = $objPHPExcel->getActiveSheet();
$cellIterator = $sheet->getRowIterator()->current()->getCellIterator();
$cellIterator->setIterateOnlyExistingCells(true);
/** @var PHPExcel_Cell $cell */
foreach ($cellIterator as $cell) {
$sheet->getColumnDimension($cell->getColumn())->setAutoSize(true);
}
}
답변
@Mark Baker 게시물을 기반으로 한 더 유연한 변형은 다음과 같습니다.
foreach (range('A', $phpExcelObject->getActiveSheet()->getHighestDataColumn()) as $col) {
$phpExcelObject->getActiveSheet()
->getColumnDimension($col)
->setAutoSize(true);
}
도움이 되었기를 바랍니다 😉
답변
for ($i = 'A'; $i != $objPHPExcel->getActiveSheet()->getHighestColumn(); $i++) {
$objPHPExcel->getActiveSheet()->getColumnDimension($i)->setAutoSize(TRUE);
}
답변
다음은 워크 시트의 모든 열을 사용하는 방법의 예입니다.
$sheet = $PHPExcel->getActiveSheet();
$cellIterator = $sheet->getRowIterator()->current()->getCellIterator();
$cellIterator->setIterateOnlyExistingCells( true );
/** @var PHPExcel_Cell $cell */
foreach( $cellIterator as $cell ) {
$sheet->getColumnDimension( $cell->getColumn() )->setAutoSize( true );
}
답변
이 코드 조각은 모든 시트의 데이터를 포함하는 모든 열의 크기를 자동으로 조정합니다. activeSheet getter 및 setter를 사용할 필요가 없습니다.
// In my case this line didn't make much of a difference
PHPExcel_Shared_Font::setAutoSizeMethod(PHPExcel_Shared_Font::AUTOSIZE_METHOD_EXACT);
// Iterating all the sheets
/** @var PHPExcel_Worksheet $sheet */
foreach ($objPHPExcel->getAllSheets() as $sheet) {
// Iterating through all the columns
// The after Z column problem is solved by using numeric columns; thanks to the columnIndexFromString method
for ($col = 0; $col <= PHPExcel_Cell::columnIndexFromString($sheet->getHighestDataColumn()); $col++) {
$sheet->getColumnDimensionByColumn($col)->setAutoSize(true);
}
}
답변
phpspreadsheet의 경우 :
$sheet = $spreadsheet->getActiveSheet(); // $spreadsheet is instance of PhpOffice\PhpSpreadsheet\Spreadsheet
foreach (
range(
1,
Coordinate::columnIndexFromString($sheet->getHighestColumn(1))
) as $column
) {
$sheet
->getColumnDimension(Coordinate::stringFromColumnIndex($column))
->setAutoSize(true);
}