如何调整单元格的宽度,以便它们不会在Spreadsheet_Excel_Writer中剪切单词

时间:2010-12-22 19:25:55

标签: php excel pear export-to-excel

我正在尝试使用Pear附带的Spreadsheet_Excel_Writer创建Excel工作表。
工作表已创建,一切正常,除外,我的文字被剪切,单元格不调整宽度以容纳完整的单词。
我尝试用Office 2007打开它。
我必须将哪些值放入Spreadsheet_Excel_Writer_Format对象中?

3 个答案:

答案 0 :(得分:4)

我不相信你可以用S_E_W做到这一点。如果它对于列/行宽度/高度具有相当于Excel的“适合自动”,那将是很好的,但事实并非如此 - 您只能使用$worksheet->setColumn()将列设置为特定宽度。

您可能需要调查切换到PHPExcel。它仍在积极开发中,支持最新的Excel文件格式,以及更完整的API。 S_E_W基本上已经死了,现在应该被认为是放弃使用。

答案 1 :(得分:0)

我还需要在Spreadsheet_Excel_Writer中自动调整行高。显然,在开头设置"Worksheet::protect ( string $password )"标志(高度没有自动调整)或在工作表的最后设置(使用自动调整高度)会有所不同。

答案 2 :(得分:0)

我有一个解决方案。

$columns = 'NOMBRE,APELLIDO,CEDULA';
$arrayColumns = array('NOMBRE','APELLIDO','CEDULA');
$format = $report->workbook->addFormat(array('Align' => 'left', 'size' => 10, 'Color' => 0));
    $col = 2;
    $row = 5;

                foreach($arrayColumns as $columnName){
                    $report->worksheet->write($row, $col, $columnName, $format);
                    $arrayColumnsWidth[$col] = strlen($columnName);
                    $col++;
}


$sql = "SELECT $columns 
                    FROM table" ;   
            $objConnectionSQL->prepareSql($sql);
            $rs = $objConnectionSQL->executeQuery();


$row++;//it brings me to the next row
            while ($data = $objConnectionSQL->getRows($rs)) {
                $col = 2;
                foreach($arrayColumns as $columnName){
                    $report->worksheet->write($row, $col, $data[$columnName], $format);
                    if($arrayColumnsWidth[$col] < strlen($data[$columnName])){
                        $arrayColumnsWidth[$col] = strlen($data[$columnName]);
                    }
                $col++;
                }
                $row++;
            }

foreach($arrayColumnsWidth as $keyCol => $valWidth){
                $this->worksheet->setColumn($keyCol,$keyCol,floor($valWidth));
        }

一开始有点复杂,但现在我的方法是在每列上使宽度动态化。 我希望它会帮助别人。