相关疑难解决方法(0)

如何使用PHPExcel从大型Excel文件(27MB +)中读取大型工作表?

我有大量的Excel工作表,我希望能够使用PHPExcel读入MySQL.

我正在使用最近的补丁,它允许您在不打开整个文件的情况下读取工作表.这样我就可以一次阅读一个工作表.

但是,一个Excel文件大27MB.我可以成功阅读第一个工作表,因为它很小,但第二个工作表是如此之大,以至于22:00启动进程的cron作业在上午8:00没有完成,工作表很简单.

是否有任何方法可以逐行读取工作表,例如:

$inputFileType = 'Excel2007';
$inputFileName = 'big_file.xlsx';
$objReader = PHPExcel_IOFactory::createReader($inputFileType);
$worksheetNames = $objReader->listWorksheetNames($inputFileName);

foreach ($worksheetNames as $sheetName) {
    //BELOW IS "WISH CODE":
    foreach($row = 1; $row <=$max_rows; $row+= 100) {
        $dataset = $objReader->getWorksheetWithRows($row, $row+100);
        save_dataset_to_database($dataset);
    }
}
Run Code Online (Sandbox Code Playgroud)

附录

@mark,我使用您发布的代码创建以下示例:

function readRowsFromWorksheet() {

    $file_name = htmlentities($_POST['file_name']);
    $file_type = htmlentities($_POST['file_type']);

    echo 'Read rows from worksheet:<br />';
    debug_log('----------start');
    $objReader = PHPExcel_IOFactory::createReader($file_type);
    $chunkSize = 20;
    $chunkFilter = new ChunkReadFilter();
    $objReader->setReadFilter($chunkFilter);

    for ($startRow = 2; $startRow <= …
Run Code Online (Sandbox Code Playgroud)

php phpexcel

27
推荐指数
2
解决办法
5万
查看次数

PHPExcel阅读器 - 需要帮助

我使用PHPExcel从Excel工作表中读取数据并存储在mysql表中,直到现在我能够上传.xls以及.xlsx文件并在上传xls之后我得到了下面的数据表结构

name    start_date              end_date               city
one 11/25/2011 3:30:00 PM   11/29/2011 4:40:00 AM   Jaipur
two 10/22/2011 5:30:00 PM   10/25/2011 6:30:00 AM   Kota
three  3/10/2011 2:30:00 PM 3/11/2011 12:30:00 AM   Bikaner
                                                    chandigarh
Run Code Online (Sandbox Code Playgroud)

现在我有一些问题,请建议我优化的方法

  1. 我们如何获得工作表名称(bcoz在一个excel中有7张)
  2. 现在我将这些数据存储到db中,下面是代码片段

    $inputFileName = "test.xls";  
    $inputFileType = PHPExcel_IOFactory::identify($inputFileName);  
    $objReader = PHPExcel_IOFactory::createReader($inputFileType);  
    $objReader->setReadDataOnly(true);  
    /**  Load $inputFileName to a PHPExcel Object  **/  
    $objPHPExcel = $objReader->load($inputFileName);  
    $total_sheets=$objPHPExcel->getSheetCount(); // here 4  
    $allSheetName=$objPHPExcel->getSheetNames(); // array ([0]=>'student',[1]=>'teacher',[2]=>'school',[3]=>'college')  
    $objWorksheet = $objPHPExcel->setActiveSheetIndex(0); // first sheet  
    $highestRow = $objWorksheet->getHighestRow(); // here 5  
    $highestColumn = $objWorksheet->getHighestColumn(); // …
    Run Code Online (Sandbox Code Playgroud)

php database file-upload phpexcel

10
推荐指数
1
解决办法
4万
查看次数

phpexcel允许的内存大小为134217728字节

我正在使用phpexcel编写相当大的excel文件.

我是从一个看起来像的数组中写的

array(
  [0] => stdClass Object
        (
            [sent] => Mar 31st, 2011 02:10PM
            [to_number] => 64211111111
            [additional_txt] => 
            [misc_data] => 
        )
  ...
  [14058] => stdClass Object
        (
            [sent] => Mar 31st, 2011 02:10PM
            [to_number] => 64211111111
            [additional_txt] => 
            [misc_data] => 
        )
)
Run Code Online (Sandbox Code Playgroud)

循环是

$r = 0;
foreach ($replies_obj as $row) {
  $c = 'A';
  foreach ($row as $col)
    $xlsx->getActiveSheet()->setCellValue($c++ . $r, $col);
  $r++;
}
Run Code Online (Sandbox Code Playgroud)

而错误是

致命错误:第961行/home/webspace/xxxx/test/htdocs/application/libraries/PHPExcel/Worksheet.php中允许的内存大小为134217728个字节(尝试分配105个字节)

这是一个phpexcel问题还是我做错了什么?

我怎样才能解决这个问题?

php memory arrays phpexcel

9
推荐指数
1
解决办法
6万
查看次数

使用PHP从企业应用程序生成MySQL数据中的大型Excel文件

我们正在开发和维护几个系统,这些系统需要以Excel格式将报告导出到最终用户.这些报告是从一个MySQL数据库中收集而来的,通过一些简单的处理,通常会产生大约40000行数据,包含10-15列,我们期望数据量稳步增长.

目前我们正在使用PHPExcel进行Excel生成,但它不再适用于我们.在我们超过5000行之后,内存消耗和加载时间变得无法容忍,无法通过无限增加PHP的内存使用和脚本执行时间的最大限制来解决.数据的处理尽可能精简,整个问题是PHPExcel是一个内存耗尽.CSV生成会更轻,但不幸的是,由于用户的需求,我们需要从我们的服务中导出Excel(和Excel).这是由于格式要求等原因,因此CSV不是一个选项.

有关第三方应用程序/模块/服务/产生大型Excel的任何想法/建议吗?如果它是商业许可证无关紧要,只要它符合我们的需求,就可以集成到现有的PHP应用程序中并完成它的工作.我们的服务通常在linux/php/mysql上运行,我们可以做任何我们需要对服务器做的事情.

谢谢!

php mysql excel export-to-excel large-data

8
推荐指数
1
解决办法
2万
查看次数

通过PHPExcel读取.xls文件会引发致命错误:允许内存大小...即使使用块读取器也是如此

即时通讯使用PHPExcel读取.xls文件.我见面的时间很短

Fatal error: Allowed memory size of 1073741824 bytes exhausted (tried to allocate 730624 bytes) in Excel\PHPExcel\Shared\OLERead.php on line 93
Run Code Online (Sandbox Code Playgroud)

经过一些谷歌搜索,我尝试chunkReader来防止这种情况(甚至在PHPExcel主页上提到),但我仍然坚持这个错误.

我的想法是,通过大块阅读器,我将逐个阅读文件,我的记忆不会溢出.但是必须有一些严重的记忆漏洞?或者我释放一些记忆力不好?我甚至试图将服务器ram提升到1GB.我试图阅读的文件大小约为700k,这不是那么多(我也读取~20MB pdf,xlsx,docx,doc等文件没有问题).所以我假设我可能会忽略一些小的巨魔.

代码看起来像这样

function parseXLS($fileName){
    require_once dirname(__FILE__) . './sphider_design/include/Excel/PHPExcel/IOFactory.php';
    require_once dirname(__FILE__) . './sphider_design/include/Excel/PHPExcel/ChunkReadFilter.php';

    $inputFileType = 'Excel5';

    /**  Create a new Reader of the type defined in $inputFileType  **/
    $objReader = PHPExcel_IOFactory::createReader($inputFileType);
    /**  Define how many rows we want to read for each "chunk"  **/ 
    $chunkSize = 20;
    /**  Create a new Instance of our Read Filter  **/ 
    $chunkFilter = …
Run Code Online (Sandbox Code Playgroud)

php memory-leaks phpexcel

6
推荐指数
1
解决办法
1075
查看次数

PHPExcel不释放内存

我有一个脚本可以读取附带 Excel 文件的电子邮件。
我正在使用 PHPExcel 来解析这些文件。

我目前遇到的问题是一封附有五个电子表格的电子邮件。
每次加载第五个文件时,PHP 都会耗尽内存。

最初,我每次完成后都尝试取消 ( $objPHPExcel = NULL;) 和取消设置 ( ) unset($objPHPExcel);PHPExcel 对象。那没有帮助。

然后我尝试将垃圾收集添加到进程 ( gc_enable(); $cycles_collected = gc_collect_cycles();)。那没有帮助。

我将当前的 php 内存使用量打印到我的错误日志中,我可以看到它随着每个 Excel 文件加载到 PHPExcel 中而增长,我还可以看到内存使用量不会随着每个NULL,unsetgc_collect.

以下是 PHP 内存不足之前和之后我的 error_log 的一些示例输出:

[17-Aug-2017 16:04:29 America/Chicago] [Blackouts] Current Memory Usage at beginning of script before loading Excel file: 85575176

[17-Aug-2017 16:04:32 America/Chicago] [Blackouts] Current Memory Usage after loading Excel file: 104474632

[17-Aug-2017 16:04:34 America/Chicago] [Blackouts] Current Memory …
Run Code Online (Sandbox Code Playgroud)

php memory phpexcel

1
推荐指数
1
解决办法
1339
查看次数

提升PHP内存并将其降低是非常糟糕的做法吗?

我写了一个PHP应用程序,它使用数据库数据生成Excel文件.我正在使用着名的库PHPExcel.与此库一起工作的每个人都知道内存管理是这个库的最差点.

所以,我的问题是,在我写excel然后把它关闭之前,可以增加内存吗?

就像是,

error_reporting(1);
ini_set('memory_limit', '500M');
@set_time_limit(0);
Run Code Online (Sandbox Code Playgroud)

一旦完成

error_reporting(1);
ini_set('memory_limit', '128M');
@set_time_limit(0);
Run Code Online (Sandbox Code Playgroud)

php memory-management phpexcel

0
推荐指数
1
解决办法
116
查看次数