【问题标题】:PHPExcel - How to read excel sheet with sheet idPHPExcel - 如何读取带有工作表 ID 的 Excel 工作表
【发布时间】:2014-10-13 09:00:46
【问题描述】:

我正在使用PHPExcel 从 excel 文件中导入数据。

在我当前的代码中,我正在读取带有工作表名称的工作表数据并在数组中获取结果。现在我想用下面的函数读取带有工作表 id 的工作表数据。

$objPHPExcel->setActiveSheetIndex(2)

但这不适用于我的代码。

这是我的代码工作:

/** Error reporting */
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);
define('EOL',(PHP_SAPI == 'cli') ? PHP_EOL : '<br />');

/** PHPExcel_IOFactory */
require_once dirname(__FILE__) . '/../Classes/PHPExcel/IOFactory.php';

$objReader = PHPExcel_IOFactory::createReader('Excel2007');

$inputFileType = 'Excel2007';
$inputFileName = 'hello.xlsx';
$sheetname = 'Sample'; // I DON'T WANT TO USE SHEET NAME HERE

$objReader = PHPExcel_IOFactory::createReader($inputFileType);
$objReader->setLoadSheetsOnly($sheetname);
$objPHPExcel = $objReader->load($inputFileName);
$sheetData = $objPHPExcel->getActiveSheet()->toArray(null,true,true,true);
echo ' Highest Column '. $getHighestColumn = $objPHPExcel->setActiveSheetIndex()->getHighestColumn(); // Get Highest Column
echo ' Get Highest Row '. $getHighestRow = $objPHPExcel->setActiveSheetIndex()->getHighestRow(); // Get Highest Row

echo "<pre>";
    print_r($sheetData);
echo "</pre>";

马克贝克:

当工作表名称为 Sample (Sheet ID: 2)

时,我在问题代码中得到此结果
Array
(
    [1] => Array
        (
            [A] => OrderDate
            [B] => Region
            [C] => Rep
            [D] => Item
            [E] => Units
            [F] => Unit Cost
            [G] => Total
        )

    [2] => Array
        (
            [A] => 1/6/13
            [B] => East
            [C] => Jones
            [D] => Pencil
            [E] => 95
            [F] => 1.99
            [G] => 189.05
        )

    [3] => Array
        (
            [A] => 1/23/13
            [B] => Central
            [C] => Kivell
            [D] => Binder
            [E] => 50
            [F] => 19.99
            [G] => 999.5
        )

更改后我得到这个结果:

PHPExcel Object
(
    [_uniqueID:PHPExcel:private] => 543b9dab3f6da
    [_properties:PHPExcel:private] => PHPExcel_DocumentProperties Object
        (
            [_creator:PHPExcel_DocumentProperties:private] => comp-30
            [_lastModifiedBy:PHPExcel_DocumentProperties:private] => 
            [_created:PHPExcel_DocumentProperties:private] => 1158364800
            [_modified:PHPExcel_DocumentProperties:private] => 1413191554
            [_title:PHPExcel_DocumentProperties:private] => 
            [_description:PHPExcel_DocumentProperties:private] => 
            [_subject:PHPExcel_DocumentProperties:private] => 
            [_keywords:PHPExcel_DocumentProperties:private] => 
            [_category:PHPExcel_DocumentProperties:private] => 
            [_manager:PHPExcel_DocumentProperties:private] => 
            [_company:PHPExcel_DocumentProperties:private] => Microsoft Corporation
            [_customProperties:PHPExcel_DocumentProperties:private] => Array
                (
                    [KSOProductBuildVer] => Array
                        (
                            [value] => 1033-9.1.0.4674
                            [type] => s
                        )

                )

        )

    [_security:PHPExcel:private] => PHPExcel_DocumentSecurity Object
        (
            [_lockRevision:PHPExcel_DocumentSecurity:private] => 
            [_lockStructure:PHPExcel_DocumentSecurity:private] => 
            [_lockWindows:PHPExcel_DocumentSecurity:private] => 
            [_revisionsPassword:PHPExcel_DocumentSecurity:private] => 
            [_workbookPassword:PHPExcel_DocumentSecurity:private] => 
        )

    [_workSheetCollection:PHPExcel:private] => Array
        (
            [0] => PHPExcel_Worksheet Object

有什么想法吗?

谢谢。

【问题讨论】:

  • 好的,编辑你的问题后,你已经用你想要的工作表加载了 PHPExcel 对象,然后 var_dumped PHPExcel 对象.....使用 PHPExcel 方法,比如工作表的 toArray() 方法,就像你之前使用的那样(例如$sheetData = $objPHPExcel-&gt;getActiveSheet()-&gt;toArray(null,true,true,true);

标签: php phpexcel


【解决方案1】:

如果要加载工作簿中的所有工作表,则更改

$inputFileType = 'Excel2007';
$inputFileName = 'hello.xlsx';
$sheetname = 'Sample'; // I DON'T WANT TO USE SHEET NAME HERE

$objReader = PHPExcel_IOFactory::createReader($inputFileType);
$objReader->setLoadSheetsOnly($sheetname);
$objPHPExcel = $objReader->load($inputFileName);

$inputFileType = 'Excel2007';
$inputFileName = 'hello.xlsx';

$objReader = PHPExcel_IOFactory::createReader($inputFileType);
$objPHPExcel = $objReader->load($inputFileName);

编辑

根据您的 cmets:

$inputFileType = 'Excel2007';
$inputFileName = 'hello.xlsx';
$sheetIndex = 2;

$objReader = PHPExcel_IOFactory::createReader($inputFileType);
$sheetnames = $objReader->listWorksheetNames($inputFileName);
$objReader->setLoadSheetsOnly($sheetname);
$objReader->setLoadSheetsOnly($sheetnames[$sheetIndex]);
$objPHPExcel = $objReader->load($inputFileName);

这将获取用于 sheetindex 2 的工作表的工作表名称,然后使用该工作表名称仅加载该工作表

【讨论】:

  • 我想加载带有工作表 ID 的特定工作表。结果必须在数组中。有什么想法吗?
  • 当前代码非常适合我,但我不想使用工作表名称,因为当用户更改工作表名称时,所有逻辑都崩溃了。
  • 您只能按名称加载特定工作表,但您可以在加载文件之前调用listWorksheetNames() 以获取工作表名称列表。
  • 您能否向我提供带有解释的代码,因为我在数组中得到了一些磨损的数据。如果您支持我,我将不胜感激:)
  • worng data in array...解释你的意思。我看不到你得到什么数据,不知道你期望得到什么,也看不到你的电子表格文件
【解决方案2】:

Mark Baker 的帮助下,现在我可以获取带有工作表 ID 的工作表数据。

这是完整的代码工作:

<?php
/** Error reporting */
error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);
define('EOL',(PHP_SAPI == 'cli') ? PHP_EOL : '<br />');

/** PHPExcel_IOFactory */
require_once dirname(__FILE__) . '../PHPExcel/IOFactory.php';

$objReader = PHPExcel_IOFactory::createReader('Excel2007');

$inputFileType = 'Excel2007';
$inputFileName = 'hello.xlsx';
$sheetIndex = 2;

$objReader = PHPExcel_IOFactory::createReader($inputFileType);
$sheetnames = $objReader->listWorksheetNames($inputFileName);
$objReader->setLoadSheetsOnly($sheetnames[$sheetIndex]);
$objPHPExcel = $objReader->load($inputFileName);
$sheetData = $objPHPExcel->getActiveSheet()->toArray(null,true,true,true);

echo "<pre>";
    print_r($sheetData);
echo "</pre>";
?>

谢谢马克贝克:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-06
    • 1970-01-01
    • 2019-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多