Alk*_*ris 92 php size resize phpexcel
我正在尝试自动调整工作表的列数.我正在编写文件,最后我尝试调整所有列的大小.
// 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();
Run Code Online (Sandbox Code Playgroud)
上面的代码不起作用.不会更改列大小以适合文本
更新
我正在使用的作家$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
Mar*_*ker 184
如果将列设置为AutoSize,则PHPExcel会尝试根据列的计算值(以及任何公式的结果)计算列宽,以及通过格式掩码(如千位分隔符)添加的任何其他字符.
默认情况下,这是一个estimated
宽度:基于使用GD,可以使用更准确的计算方法,GD也可以处理字体样式功能,如粗体和斜体; 但这是一个更大的开销,因此它默认关闭.您可以使用启用更准确的计算
PHPExcel_Shared_Font::setAutoSizeMethod(PHPExcel_Shared_Font::AUTOSIZE_METHOD_EXACT);
Run Code Online (Sandbox Code Playgroud)
但是,自动调整大小不适用于所有Writer格式...例如CSV.你没有提到你正在使用的作家.
但您还需要确定要设置尺寸的列:
foreach(range('B','G') as $columnID) {
$objPHPExcel->getActiveSheet()->getColumnDimension($columnID)
->setAutoSize(true);
}
Run Code Online (Sandbox Code Playgroud)
$objPHPExcel->getActiveSheet()->getColumnDimension()
期望列ID.
$objPHPExcel->getActiveSheet()->getColumnDimensions()
将返回所有已定义列维度记录的数组; 但除非已明确创建列维度记录(可能通过加载模板,或通过手动调用getColumnDimension()
),否则它将不存在(节省内存).
MrU*_*own 47
如果您需要在多个工作表上执行此操作,并且每个工作表中有多个列,则可以使用以下方法迭代所有工作表:
// 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);
}
}
Run Code Online (Sandbox Code Playgroud)
Tod*_*rov 17
这是一个基于@Mark Baker帖子的更灵活的变体:
foreach (range('A', $phpExcelObject->getActiveSheet()->getHighestDataColumn()) as $col) {
$phpExcelObject->getActiveSheet()
->getColumnDimension($col)
->setAutoSize(true);
}
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助 ;)
Nat*_*han 11
for ($i = 'A'; $i != $objPHPExcel->getActiveSheet()->getHighestColumn(); $i++) {
$objPHPExcel->getActiveSheet()->getColumnDimension($i)->setAutoSize(TRUE);
}
Run Code Online (Sandbox Code Playgroud)
这是如何使用工作表中的所有列的示例:
$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 );
}
Run Code Online (Sandbox Code Playgroud)
不要使用 range() 它不会在列 Z 之外工作。
只需使用:
$sheet = $spreadsheet->getActiveSheet();
foreach ($sheet->getColumnIterator() as $column) {
$sheet->getColumnDimension($column->getColumnIndex())->setAutoSize(true);
}
Run Code Online (Sandbox Code Playgroud)
在写入数据后执行此操作,以便列迭代器知道要迭代多少列。
此代码段将自动调整包含所有工作表中数据的所有列的大小.无需使用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);
}
}
Run Code Online (Sandbox Code Playgroud)
小智 5
对于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);
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
183467 次 |
最近记录: |