Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHPExcel从少量数据生成大型文件_Php_Phpexcel - Fatal编程技术网

PHPExcel从少量数据生成大型文件

PHPExcel从少量数据生成大型文件,php,phpexcel,Php,Phpexcel,我使用PHPExcel 1.8版打开了一个101k Excel 5电子表格。我更新某些单元格,添加少量数据。当我将电子表格写回一个新文件时,内容看起来是正确的,但大小是3592K 我尝试打开原始电子表格,将更新后的电子表格中的单元格复制到原始表格中,并保存为新名称。结果的大小实际上更小,96k 为什么PHPExcel会使文件变得如此之大,我如何修复这个问题?下面是我的代码 $objReader = PHPExcel_IOFactory::createReader( 'Excel5' ); $ob

我使用PHPExcel 1.8版打开了一个101k Excel 5电子表格。我更新某些单元格,添加少量数据。当我将电子表格写回一个新文件时,内容看起来是正确的,但大小是3592K

我尝试打开原始电子表格,将更新后的电子表格中的单元格复制到原始表格中,并保存为新名称。结果的大小实际上更小,96k

为什么PHPExcel会使文件变得如此之大,我如何修复这个问题?下面是我的代码

$objReader = PHPExcel_IOFactory::createReader( 'Excel5' );
$objPHPExcel = $objReader->load( $template_location . $template_file_name );

$objPHPExcel->setActiveSheetIndex(0)
            ->setCellValue( "B17", $last_name )
            ->setCellValue( "C17", $first_name )
            ->setCellValue( "D17", $phone );

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');
$objWriter->save( $eapis_location . $output_file_name );

答案是因为PHPExcel没有应用MS-Excel本身用于保持文件大小小的任何优化,主要是为了避免性能开销。举几个例子,MS Excel并不存储其所有默认样式,而PHPExcel存储的是一整套默认样式。MS Excel对所有字符串数据使用UTF-8,MS Excel使用配置为使用的任何字符集

解决此问题的唯一方法是编写自己的Excel读写器;或者使用依赖MS Excel本身的COM之类的东西


如果PHPExcel创建的文件格式符合BIFF文件格式,并且MS Excel能够正确读取,那么文件大小的差异真的是一个关键问题吗?

是的,大小很重要,因为服务器可能会一次通过电子邮件发送其中几个文件。我试图查看现有编写器的代码,但我不知道如何更改它。你或任何人能向作者推荐一个可能解决问题的mod吗?它是phpexcelv1.8。PHPExcel编写器没有可能修复此问题的mod。如果我可以在不损失任何功能的情况下使文件变小,或者在执行时间上付出任何代价,那么我在几年前就已经这样做了。我建议,如果它是如此关键的任务,那么你使用COM。。。或者将文件集合压缩到单个捆绑包中。或者,如果用户不希望电子表格有任何格式或其他特殊功能,则只需向他们发送CSV文件即可