如何用PHPExcel从Excel表获取布尔值?解决False返回空值问题
解决PHPExcel读取Excel布尔值显示异常的问题
我完全懂你碰到的这个糟心问题——PHPExcel的toArray()方法默认会把Excel里的布尔值TRUE转成字符串"1",FALSE直接变成空值,这跟我们预期的完全不符。下面给你两种实用的解决办法:
方法1:遍历数组手动转换布尔值
如果还是习惯用toArray()读取数据,我们可以在拿到结果后,遍历数组把对应的值转换成你需要的格式:
require_once 'Classes/PHPExcel.php'; $file_path = "test.xlsx"; try { $objPHPExcel = PHPExcel_IOFactory::load($file_path); } catch(Exception $e) { die('Error loading file "'.pathinfo($file_path,PATHINFO_BASENAME).'": '.$e->getMessage()); } // 读取原始格式化后的数据 $sheetData = $objPHPExcel->getActiveSheet()->toArray(null,true,true,true); // 遍历转换布尔值格式 foreach ($sheetData as &$row) { foreach ($row as &$cell) { if ($cell === '1') { // 按需选择:转成数字1或者字符串'True' $cell = 1; // $cell = 'True'; } elseif ($cell === '') { // 按需选择:转成数字0或者字符串'False' $cell = 0; // $cell = 'False'; } } } print_R($sheetData);
方法2:直接读取单元格原始值(更推荐)
toArray()会自动格式化单元格数据,导致布尔值的原始类型丢失。我们可以直接遍历工作表的行和列,获取单元格的原始值,这样能精准保留数据类型,再按需转换:
require_once 'Classes/PHPExcel.php'; $file_path = "test.xlsx"; try { $objPHPExcel = PHPExcel_IOFactory::load($file_path); } catch(Exception $e) { die('Error loading file "'.pathinfo($file_path,PATHINFO_BASENAME).'": '.$e->getMessage()); } $activeSheet = $objPHPExcel->getActiveSheet(); $highestRow = $activeSheet->getHighestRow(); // 获取工作表最大行号 $highestColumn = $activeSheet->getHighestColumn(); // 获取工作表最大列号 $sheetData = []; // 逐行遍历 for ($row = 1; $row <= $highestRow; $row++) { $rowData = []; // 逐列遍历 foreach (range('A', $highestColumn) as $column) { $cellValue = $activeSheet->getCell($column.$row)->getValue(); // 针对布尔值做转换 if (is_bool($cellValue)) { // 按需选择:转成1/0 或者 'True'/'False' $cellValue = $cellValue ? 1 : 0; // $cellValue = $cellValue ? 'True' : 'False'; } $rowData[$column] = $cellValue; } $sheetData[$row] = $rowData; } print_R($sheetData);
用第二种方法处理后,你会得到符合预期的输出,比如转成数字1/0的话,输出会是:
Array (
[1] => Array (
[A] => Country
[B] => Boolean
)
[2] => Array (
[A] => India
[B] => 1
)
[3] => Array (
[A] => US
[B] => 0
)
)
内容的提问来源于stack exchange,提问作者Ramalingam Perumal
相关产品推荐
相关产品推荐

