使用PHPExcel

时间:2016-05-05 08:12:56

标签: php excel csv phpexcel

我正在努力将excel转换为csv。我目前面临一个问题,即将excel文件转换为15k记录,平均需要45到50秒来计算文件的行和列。

如果我使用50k记录,那么系统崩溃。在这里,我没有做任何csv转换工作,是的,我在这里只做行和列计数。有什么方法可以解决这个问题吗?您的建议非常感谢。

require_once('../PHPExcel/Classes/PHPExcel.php');

$start = time();

$infile = 'IMPORT_DATA_15000.xlsx';
$outfile = 'csv/15000.csv';

ini_set('memory_limit', -1);

//Usage:
convertExcel2CSV($infile);

echo 'Time: ' . (time() - $start);
die;

function convertExcel2CSV($infile)
{
    //  Read your Excel workbook
    try
    {
        $inputFileType = PHPExcel_IOFactory::identify($infile);
        $objReader = PHPExcel_IOFactory::createReader($inputFileType);
        $objPHPExcel = $objReader->load($infile);
    } catch (Exception $e)
    {
        die('Error loading file "' . pathinfo($infile, PATHINFO_BASENAME) . '": ' . $e->getMessage());
    }

    //  Get worksheet dimensions
    $sheet = $objPHPExcel->getSheet(0);
    $highestRow = $sheet->getHighestRow();
    $highestColumn = $sheet->getHighestColumn();

    echo $highestColumn;
    echo "====";
    echo $highestRow;
}

输出:

AMK
====
15000

1 个答案:

答案 0 :(得分:0)

如果您只需知道每个工作表中有多少行和列,那么为什么不使用

$inputFileType = PHPExcel_IOFactory::identify($infile);
$objReader = PHPExcel_IOFactory::createReader($inputFileType);
$worksheetData = $objReader->listWorksheetInfo($inputFileName);

var_dump($worksheetData);

通过阅读the documentation

,你能学到多少东西,这真是太神奇了

还有一些方法允许您一次加载文件一个工作表,或一小部分单元格,以及其中描述的其他精彩技术....并且知道那些listWorksheetInfo()提供详细信息的工作表详细信息将允许您使用较小的块处理文件,或通过单元格缓存减少内存使用,或者只读取数据而不是所有单元格样式