我正在尝试使用Pear附带的Spreadsheet_Excel_Writer创建Excel工作表。
工作表已创建,一切正常,除外,我的文字被剪切,单元格不调整宽度以容纳完整的单词。
我尝试用Office 2007打开它。
我必须将哪些值放入Spreadsheet_Excel_Writer_Format对象中?
答案 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));
}
一开始有点复杂,但现在我的方法是在每列上使宽度动态化。 我希望它会帮助别人。