我是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然后插入加号如果行改变,我只需要转到上面的列表并更改索引。
答案 0 :(得分:-1)
此处未列出将数据放入mysql的代码部分。 但是,只要第1行包含标题
,就会覆盖mysqlA 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])."`";