1
我使用列标题作为数组索引(第1行),并且我不想在使用不正确的列标题(或有时缺少)上载其XLSX文件时遇到问题。如何检查列标题在PHPExcel中是否正确?
我发现这个答案真的很有用。我可以让我的数组索引的列标题:
for ($row = 2; $row <= $highestRow; $row++){
// Read a row of data into an array
$rowData = $sheet->rangeToArray('A' . $row . ':' . $highestColumn . $row,
NULL,
TRUE,
FALSE);
$rowData[0] = array_combine($headings[0], $rowData[0]);
}
这是我希望发生的事情:
- 首先检查列标题,如果他们匹配 我提供的标题(在数组中,所以我可以在循环中使用
in_array
)在 之前将它写入第e数据库。 - 如果标头是正确的,我现在将数组索引转换为列标题(所以不是
[0]
,现在应该返回[firstname]
),否则会抛出错误消息。 - 写入数据库,其中我的数据库中的列名与其XLSX文件中的列标题名完全匹配(或者如果没有,至少与查询匹配)。 (我称他们为“列映射”)。
长话短说,这里是我的代码:
try {
$inputFileName = $_FILES['file']['tmp_name'];
$inputFileType = PHPExcel_IOFactory::identify($inputFileName);
$objReader = PHPExcel_IOFactory::createReader($inputFileType);
$objPHPExcel = $objReader->load($inputFileName);
//-- Get worksheet dimensions
$sheet = $objPHPExcel->getSheet(0);
$highestRow = $sheet->getHighestRow();
$highestColumn = $sheet->getHighestColumn();
$headings = $sheet->rangeToArray('A1:'.$highestColumn.'1', NULL, TRUE, FALSE);
//-- $row = 2 <- skip row 1 since this is our headers
for($row = 2; $row <= $highestRow; $row++) {
//-- Read a row of data into an array
$xlsxRow = $sheet->rangeToArray('A' . $row . ':' . $highestColumn . $row, NULL, TRUE, FALSE);
//-- Combine to replace indexes with header names
$xlsxRow[0] = array_combine($headings[0], $xlsxRow[0]);
//-- Got stucked in here..
/*
If column header fails, should exit the loop
*/
//-- SQL query follows here..
}
所以有人可以帮我搞清楚了这一点?
你有没有办法做它的第一部分来匹配标题与数组?你为什么要改变标题索引与名称?相反,编写一个函数并将该值存入一个您可以在loop.i.e中使用的变量中。 '$ firstName = $ xlsxRow [0] [0]' –
因为我想将Excel文件的标题与数据库中的标题匹配。因此,如果用户更改列的位置,数据将始终保持正确。例如,名字|姓。但我想改变名字和姓氏的位置。当他/她上传到我的界面时,数据仍然可以管理,并正确插入各自的列中。你明白我的观点了吗? –
所以我只需要知道如何首先检查列标题。如果一列或多列不正确,则必须取消查询以避免信息不匹配。 –