我正在使用列标题作为数组索引(第1行),当他们开始使用错误的列标题(或有时会丢失)上传其XLSX文件时,我不希望出现问题。
我发现这个答案非常有用。我可以将我的数组索引作为列标题:
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
)
把它写到数据库中。[0]
,它现在应该返回[firstname]
)或者抛出错误消息。长话短说,这是我的代码:
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..
}
有人可以帮助我解决这个问题吗?
答案 0 :(得分:0)
要比较标头值,您可以使用array_diff()
功能。
如果您想为用户提供更多灵活性,那么您可以使用以下示例。 在这种情况下使用
$excelSheetHeaders = array();
for ($i = 1; $i <= 1; $i++) {
$rowData = $sheet->rangeToArray('A' . $i . ':' . $highestColumn . $i, NULL, TRUE, FALSE);
$excelSheetHeaders = $rowData[0];
$excelSheetHeaders = array_map('strtolower', $excelSheetHeaders);
$errorCount = 0;
foreach ($headerArray as $index => $value){
if(!in_array(strtolower($value), $excelSheetHeaders)){
$errorCount++;
}
}
if($errorCount > 0){
//Throw Error and exit;
}
}
for ($i = 2; $i <= $highestRow; $i++){
$rowData = $sheet->rangeToArray('A' . $i . ':' . $highestColumn . $i,NULL,TRUE,FALSE);
$spreadsheetData = array();
foreach($headerArray as $index => $value){
$spreadsheetData[$value] = $rowData[0][array_search(strtolower($value),$excelSheetHeaders)];
}
var_dump($spreadsheetData);
}
此错误正是您想要的。现在您可以访问$spreadsheetData['firstName']
。