我使用的是 PHPExcel 1.7.8、PHP 5.4.14、Windows 7 和 Excel 2007 电子表格。该电子表格由 750 行、A 列到 BW 列组成,大小约为 600KB。这是我打开电子表格的代码——非常标准:
//Include PHPExcel_IOFactory
include 'PHPExcel/IOFactory.php';
include 'PHPExcel.php';
$inputFileName = 'C:\xls\lspimport\GetLSP1.xlsx';
// Read your Excel workbook
try {
$inputFileType = PHPExcel_IOFactory::identify($inputFileName);
$objReader = PHPExcel_IOFactory::createReader($inputFileType);
$objReader->setReadDataOnly(true);
$objPHPExcel = $objReader->load($inputFileName);
} catch(Exception $e) {
die('Error loading file "'.pathinfo($inputFileName,PATHINFO_BASENAME).'": '.$e->getMessage());
}
//set active worksheet
$objWorksheet = $objPHPExcel->setActiveSheetIndexbyName('Sheet1');
$j = 0;
for($i = 2; $i < 3; $i++)
{
...
}
Run Code Online (Sandbox Code Playgroud)
最后,我最终希望遍历电子表格中的每一行,但目前在我完善脚本的同时,我只遍历了一行。问题是,执行此脚本需要 30 分钟。我echo会在每段代码之后发送消息,以便我可以看到正在处理的内容和时间,并且我的脚本在这部分基本上等待了 30 分钟:
$objPHPExcel = $objReader->load($inputFileName);
Run Code Online (Sandbox Code Playgroud)
有一个配置不正确的东西?我不明白为什么加载电子表格需要 30 分钟。我感谢任何和所有的帮助。
PHPExcel 在识别 excel 文件的结尾位置时遇到问题。或者更确切地说,Excel 很难知道自己的终点在哪里。如果您触摸 A:1000000 处的单元格,它认为它需要读取那么远。
我过去做了两件事来解决这个问题:
1) 将您需要的数据剪切并粘贴到新的 excel 文件中。2) 指定您要阅读的确切尺寸。
编辑如何做选项 2
public function readExcelDataToArray($excelFilePath, $maxRowNumber=-1, $maxColumnNumber=-1)
{
$objPHPExcel = PHPExcel_IOFactory::load($excelFilePath);
$objWorksheet = $objPHPExcel->getActiveSheet();
//Get last row and column that have data
if ($maxRowNumber == -1){
$lastRow = $objWorksheet->getHighestDataRow();
} else {
$lastRow = $maxRowNumber;
}
if ($maxColumnNumber == -1){
$lastCol = $objWorksheet->getHighestDataColumn();
//Change Column letter to column number
$lastCol = PHPExcel_Cell::columnIndexFromString($lastCol);
} else {
$lastCol = $maxColumnNumber;
}
//Get Data Array
$dataArray = array();
for ($currentRow = 1; $currentRow <= $lastRow; $currentRow++){
for ($currentCol = 0; $currentCol <= $lastCol; $currentCol++){
$dataArray[$currentRow][$currentCol] = $objWorksheet->getCellByColumnAndRow($currentCol,, $currentRow)->getValue();
}
}
return $dataArray;
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,这些解决方案不是很动态。
请注意,现代 excel 文件实际上只是带有 xlsx 扩展名的 zip。我已经为 PHPExcel 编写了解压缩它们的扩展,并修改了某些 xml 文件以获得我想要的行为类型。
给您的第三个建议是监视每一行的内容,并在有空行时停止。