【问题标题】:How to read through each row of excel spreadsheet using SpreadsheetReader inPHP?如何使用 PHP 中的 SpreadsheetReader 读取 Excel 电子表格的每一行?
【发布时间】:2019-10-23 10:56:04
【问题描述】:

我正在使用SpreadsheetReader 将 excel 电子表格导入 mysql 服务器,但它只读取第一行。我在代码中做错了什么以及如何使其读取所有行?

<?php
require_once('../spreadsheet-reader-master/php-excel-reader/excel_reader2.php');
require_once('../spreadsheet-reader-master/SpreadsheetReader.php');

if (isset($_POST["import"])) {

    if (!$db) {
        die("Connection failed: " . mysqli_connect_error());
    }
    $device_type_id = $_POST['device_type_id'];
    $allowedFileType = ['application/vnd.ms-excel', 'text/xls', 'text/xlsx', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'];


    if (in_array($_FILES["file"]["type"], $allowedFileType)) {

        $targetPath = '../upload/' . $_FILES['file']['name'];
        move_uploaded_file($_FILES['file']['tmp_name'], $targetPath);

        $Reader = new SpreadsheetReader($targetPath);

        $sheetCount = count($Reader->sheets());
        error_reporting(E_ALL ^ E_NOTICE); //this hides all notices that php displays on the page
        for ($i = 0; $i < $sheetCount; $i++) {
            $Reader->ChangeSheet($i);

            foreach ($Reader as $Row) {

                $serial_imei = "";
                if (isset($Row[0])) {
                    $serial_imei = mysqli_real_escape_string($db, $Row[0]);
                }

                $serial_no = "";
                if (isset($Row[1])) {
                    $serial_no = mysqli_real_escape_string($db, $Row[1]);
                }

                if (empty($device_type_id)) {
                    echo "Please select a device type from the dropdown list!";
                }


                if (!empty($serial_no) || !empty($serial_imei) || !empty($device_type_id)) {

                    $query = "INSERT INTO 
                    devices (serial_imei, serial_no, type_id) 
                    VALUES ('$serial_imei', '$serial_no', '$device_type_id')";

                    if (mysqli_multi_query($db, $query)) {
                        echo "New records created successfully";
                    } else {
                        echo "Error: " . $query . "<br>" . mysqli_error($db);
                    }
                    mysqli_close($db);
                }
            }
        }
    } else {
        $type = "error";
        $message = "Invalid File Type. Upload Excel File.";
    }
}
?>

【问题讨论】:

标签: php mysql excel row spreadsheet


【解决方案1】:

您确定工作表使用的是数字索引吗?查看代码示例in the readme 他们使用foreach 来访问每一行。我会尝试类似:

foreach ( $Reader->sheets() as $index => $name ) {
    $Reader->ChangeSheet( $index );

    foreach ( $Reader as $Row ) {

        $serial_imei = "";
        if ( isset( $Row[0] ) ) {
            $serial_imei = mysqli_real_escape_string( $db, $Row[0] );
        }

        $serial_no = "";
        if ( isset( $Row[1] ) ) {
            $serial_no = mysqli_real_escape_string( $db, $Row[1] );
        }

        if ( empty( $device_type_id ) ) {
            echo "Please select a device type from the dropdown list!";
        }


        if ( ! empty( $serial_no ) || ! empty( $serial_imei ) || ! empty( $device_type_id ) ) {

            $query = "INSERT INTO
                    devices (serial_imei, serial_no, type_id)
                    VALUES ('$serial_imei', '$serial_no', '$device_type_id')";

            if ( mysqli_multi_query( $db, $query ) ) {
                echo "New records created successfully";
            } else {
                echo "Error: " . $query . "<br>" . mysqli_error( $db );
            }
            mysqli_close( $db );
        }
    }
}

【讨论】:

  • 我的错,我在做 mysqli_close($db);这就是为什么它在继续到另一行之前切断了连接。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-19
  • 2011-04-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-31
相关资源
最近更新 更多