1

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());
    }
}

質問1

私が今していることをより速く行う方法はありますか?チャンクについては知っていますが、機能しないため、間違っているようです。

質問2

スクリプトが現在どの行にあるかをユーザーに表示する方法はありますか?

どんな助けでもありがたいです

4

1 に答える 1

2

約6kのSQL挿入があります。1つのSQLクエリですべてのデータを挿入してみてください。

于 2012-10-25T07:18:41.010 に答える