PHPExcel使用标题名称将Excel工作表上载到数据库

时间:2018-04-24 18:03:35

标签: php excel

我是phpexcel的新手,请原谅我,如果这是一个愚蠢的问题, 我有一个PHP脚本,它接受一个excel文件并将其上传到我的SQL服务器。它从不同的列中获取数据并将其插入到两个不同的表中。只要excel表中的列保持不变,这样就可以正常工作:第1列=名称,第2列=年龄等等。

     $sheet = $objPHPExcel->getSheet(0); 
     $highestRow = $sheet->getHighestRow(); 
     $highestColumn = $sheet->getHighestColumn();
    for ($row = 2; $row <= $highestRow; $row++){

        $rowData = $sheet->rangeToArray('A' . $row . ':' . $highestColumn . $row,NULL,TRUE, FALSE);

            $Name = trim($rowData[0][0]);
            $Age = trim($rowData[0][1]);
            $Address = trim($rowData[0][2]);
    }

这就是我所拥有的。正如您所看到的,$ name var总是从文件的第一列获取值,依此类推。我的问题是我上传的文件并不总是按此顺序排列。例如,一周文件将在第1列中具有名称,在第2列中具有年龄,但下一周年龄将在第1列中,名称在第2列中。

列的标题总是与行中的数据匹配,所以我想像这样使用标题。

     $sheet = $objPHPExcel->getSheet(0); 
     $highestRow = $sheet->getHighestRow(); 
     $highestColumn = $sheet->getHighestColumn();
    for ($row = 2; $row <= $highestRow; $row++){

        $rowData = $sheet->rangeToArray('A' . $row . ':' . $highestColumn . $row,NULL,TRUE, FALSE);

            $Name = trim($rowData[0]['NAME']);
            $Age = trim($rowData[0]['AGE']);
            $Address = trim($rowData[0]['ADDRESS']);

      sql= "insert into dbo.mainTable (NAME,AGE,ADDRESS) VALUES ('$Name','$Age','$Address')";

     $stmt = sqlsrv_query($db,$sql);
    }

我认为你可以用关联数组做这样的事情,但我不知道如何用它来做这件事。我发现了一些接近我所要求的东西,但是当我尝试其中任何一个时,它只是赢了工作。如果有办法轻松做到这一点会很棒。这是我的最后一招,因为我已经在互联网上搜索了近一个星期了 先感谢您。

更新

我添加了一个简单的查询,就像我现在这样做。我这样做的原因是因为完整查询是一个更新查询和IF rowcount = 0然后插入加号如果行改变,我只需要转到上面的列表并更改索引。

1 个答案:

答案 0 :(得分:-1)

此处未列出将数据放入mysql的代码部分。 但是,只要第1行包含标题

,就会覆盖mysql
A    B       C
Name Address Age

$ header = implode(“,”,$ whatever-row-0-called

$sql="insert into `table` (".$header.") values ('".$col0."','".$col1."','".$col2."'");";

只要$ header匹配,数据的顺序无关紧要。

运行1

$header="name,age,address"

运行2

$header="age,address,name"

第3天

$header="address,age,name"

等等

只要$ header与传入数据的顺序匹配,数据库就会自动将正确的数据放入右列。

$header=join(",", trim($rowData[0]);

$header="'".join("','", trim($rowData[0])."`";