我是PHPExcel的新手,我第一次使用它。我写了这段代码,但我知道有更好,更快的方法。目前,当我阅读示例电子表格(6000行,与实际电子表格相同)时,本地主机需要大约2分钟。
因此,除了使代码更快,更简化之外,有没有办法显示实际进度?
我已经阅读了文档,但仍然在努力解决这个问题。
以下是我目前正在使用的代码:
/** Include path **/
set_include_path(get_include_path() . PATH_SEPARATOR . '../local_code/classes/');
/** PHPExcel_IOFactory */
include 'PHPExcel/IOFactory.php';
/** Define a Read Filter class implementing PHPExcel_Reader_IReadFilter */
class MyReadFilter implements PHPExcel_Reader_IReadFilter
{
public function readCell($column, $row, $worksheetName = '') {
// read columns A, C, G, H from row 2
if ($row >= 2) {
if (in_array($column,array("A","C","G","H"))) {
return true;
}
}
return false;
}
}
$inputFileName = 'newsheet.xlsx'; // change to uploaded file
$sheetname = 'FULL COMBINED';
$inputFileType = PHPExcel_IOFactory::identify($inputFileName);
$objReader = PHPExcel_IOFactory::createReader($inputFileType);
$objReader->setLoadSheetsOnly($sheetname);
$objReader->setReadFilter(new MyReadFilter());
$objPHPExcel = $objReader->load($inputFileName);
$sheetData = $objPHPExcel->getActiveSheet()->toArray(null,false,false,true);
foreach($sheetData as $row => $columns) {
if($row != 1) {
$value = '';
foreach($columns as $cell => $val) {
if($cell == 'A') {
$val = trim($val);
}
if($cell == 'C') {
if(substr($val,0,1) != 'B') {
$val = trim($val);
$temp = substr($val,1);
if(is_numeric($temp))
$val = (int) $temp;
}
}
if($cell == 'G') {
$val = ($val * 86400) - 2209075200 - 86400;
}
if($cell == 'H') {
$val == floatval($val);
}
if($val != "")
$value[] = $val;
}
$values = "('" . implode("','",$value) . "')";
mysql_query("INSERT INTO projects_timesheet (employee_code,cost_code,date,hours) VALUES " . $values)or die(mysql_error());
}
}
有没有更快的方法来做我现在正在做的事情?我知道关于分块,但似乎我做错了,因为它不起作用。
有没有办法可以向用户显示脚本当前在哪一行?
任何帮助将不胜感激
答案 0 :(得分:2)
您有大约6k个SQL插入,尝试通过一个SQL查询插入所有数据。