HCRM博客

如何解决gethighestrow函数报错的问题?

问题分析与解决方法

在使用gethighestrow 方法时,如果遇到报错,通常是由于以下几种原因导致的,本文将详细分析这些原因,并提供相应的解决方案。

如何解决gethighestrow函数报错的问题?-图1
(图片来源网络,侵权删除)

一、常见错误及解决方法

1、对象属性不存在

错误描述:报错信息为“Worksheet”对象没有属性“get_highest_row”。

原因分析:可能是由于使用了错误的库或版本不兼容导致的方法不存在。

解决方法

确认使用的是正确的库和版本,对于PHPExcel,应使用getHighestRow()而不是get_highest_row()

如果使用的是PhpSpreadsheet库,确保方法名称正确。

如何解决gethighestrow函数报错的问题?-图2
(图片来源网络,侵权删除)

2、循环读取列数不全

错误描述:在读取超过26列的表格时,只能获取到部分列的数据。

原因分析:第二层for循环的判断条件有误,导致无法遍历所有列。

解决方法

修改列循环的条件,确保能够遍历到最大列,将for ($colIndex = 'A'; $colIndex <= $highestColumn; $colIndex++)改为for ($colIndex = 'A'; $colIndex != $highestColumn; $colIndex++)

3、读取空行问题

如何解决gethighestrow函数报错的问题?-图3
(图片来源网络,侵权删除)

错误描述:使用PHPExcel读取工作表时,会读取所有的行,包括空白行。

原因分析:PHPExcel默认会读取整个工作表的所有行,包括空白行。

解决方法

在读取数据时添加判断条件,跳过空白行,可以使用trim($cell>getValue()) !== ''来判断单元格是否为空。

4、列索引转换错误

错误描述:在使用列索引时,可能会出现转换错误,导致无法正确获取列数据。

原因分析:列索引从字母转换为数字时可能出现错误。

解决方法

使用正确的函数进行列索引转换,使用PhpOffice\PhpSpreadsheet\Cell\Coordinate::columnIndexFromString($highestColumn)将列索引从字母转换为数字。

二、代码示例

以下是一个简单的示例,演示如何使用PhpSpreadsheet库读取Excel文件并插入到MySQL数据库中:

<?php
require 'vendor/autoload.php';
use PhpOffice\PhpSpreadsheet\IOFactory;
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
// 创建Spreadsheet对象
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet>getActiveSheet();
$sheet>setCellValue('A1', 'Welcome to Helloweba.');
// 保存为xlsx文件
$writer = new Xlsx($spreadsheet);
$writer>save('hello.xlsx');
// 读取Excel文件
$inputFileName = './hello.xlsx';
$spreadsheet = IOFactory::load($inputFileName);
$worksheet = $spreadsheet>getActiveSheet();
$highestRow = $worksheet>getHighestRow(); // 获取总行数
$highestColumn = $worksheet>getHighestColumn(); // 获取总列数
$highestColumnIndex = \PhpOffice\PhpSpreadsheet\Cell\Coordinate::columnIndexFromString($highestColumn); // 将列索引从字母转换为数字
$lines = $highestRow 2;
if ($lines <= 0) {
    exit('Excel表格中没有数据');
}
$sql = "INSERT INTOt_student (name,chinese,maths,english) VALUES ";
for ($row = 3; $row <= $highestRow; ++$row) {
    $name = $worksheet>getCellByColumnAndRow(1, $row)>getValue(); // 姓名
    $chinese = $worksheet>getCellByColumnAndRow(2, $row)>getValue(); // 语文
    $maths = $worksheet>getCellByColumnAndRow(3, $row)>getValue(); // 数学
    $english = $worksheet>getCellByColumnAndRow(4, $row)>getValue(); // 外语
    $sql .= "('$name','$chinese','$maths','$english'),";
}
$sql = rtrim($sql, ","); // 去掉最后一个逗号
try {
    $db>query($sql);
} catch (Exception $e) {
    echo $e>getMessage();
}
?>

三、FAQs

Q1: 如何更改PhpSpreadsheet的列循环条件以读取超过26列的数据?

A1: 更改列循环的条件,确保能够遍历到最大列,将for ($colIndex = 'A'; $colIndex <= $highestColumn; $colIndex++)改为for ($colIndex = 'A'; $colIndex != $highestColumn; $colIndex++),这样可以确保循环遍历所有列,而不仅仅是前26列。

Q2: 如何解决PhpSpreadsheet读取Excel时遇到的空白行问题?

A2: 在读取数据时添加判断条件,跳过空白行,可以使用trim($cell>getValue()) !== ''来判断单元格是否为空,这样可以避免将空白行的数据插入到数据库中。

分享:
扫描分享到社交APP
上一篇
下一篇