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文件的標題與數據庫中的標題匹配。因此,如果用戶更改列的位置,數據將始終保持正確。例如,名字|姓。但我想改變名字和姓氏的位置。當他/她上傳到我的界面時,數據仍然可以管理,並正確插入各自的列中。你明白我的觀點了嗎? –
所以我只需要知道如何首先檢查列標題。如果一列或多列不正確,則必須取消查詢以避免信息不匹配。 –