28

PHPExcelを使用して、ダウンロード用のデータをエクスポートしています。ダウンロードしたファイルを開くと、セルの数が多い場合、値の数ではなく「#######」と表示されます。私はsetAutoSize()すべての列に対して試してから呼び出します$sheet->calculateColumnWidths()が、それでも変更されません。ここにcalculateColumnWidths()がありますが、@ Mark Ba​​kerは、「calculateColumnWidths()は、値をおそらく5%増やして、列全体が収まるようにします」と述べています。セルの数の長さが5%を超える場合、問題は解決したようです。

更新 これは、列のサイズを自動化するための私の関数です。

   function autoFitColumnWidthToContent($sheet, $fromCol, $toCol) {
        if (empty($toCol) ) {//not defined the last column, set it the max one
            $toCol = $sheet->getColumnDimension($sheet->getHighestColumn())->getColumnIndex();
        }
        for($i = $fromCol; $i <= $toCol; $i++) {
            $sheet->getColumnDimension($i)->setAutoSize(true);
        }
        $sheet->calculateColumnWidths();
    }
4

2 に答える 2

29

最初の潜在的な問題は、列の文字を扱っていることです。PHP のインクリメンタ操作は列文字で機能するため、$i が 'A' の場合、$i++ は 'B' を返し、$i が 'Z' の場合、$i++ は 'AA' を返します。ただし、比較として <= を使用することはできません。単純な比較として実行すると、'AA' は <= 'Z' になるためです。

それ以外の

for($i = $fromCol; $i <= $toCol; $i++) {

使用する

$toCol++;
for($i = $fromCol; $i !== $toCol; $i++) {

$sheet->calculateColumnWidths() を呼び出した後に 5% のマージンを追加するには、次のようにします。

for($i = $fromCol; $i !== $toCol; $i++) {
    $calculatedWidth = $sheet->getColumnDimension($i)->getWidth();
    $sheet->getColumnDimension($i)->setWidth((int) $calculatedWidth * 1.05);
}
于 2012-06-07T09:44:28.357 に答える