Phpspreadsheet中文文档(翻译软件版)

由于phpoffice/phpexcel(此包已被放弃,不再维护。作者建议改用phpoffice/phpspreadsheet包。)

最近开始使用Phpspreadsheet,发现中文文档不全。自己英文水平一般,又比较着急开发。所以贴上google翻译版,着急的朋友可以先凑合看看,英文底子好的同学可以直接忽略本帖。

本贴仅供参考。
本贴仅供参考。
本贴仅供参考。


原文地址:

Phpspreadsheet官方文档

今天先分享『读取文件』的文档。下一次更新『导出表』文档。

文件 » 主题 ” 读取文件

读取文件

安全

在读取电子表格文件时,基于XML的格式(例如OfficeOpen XML,Excel2003 XML,OASIS和Gnumeric)容易受到XML外部实体处理(XXE)注入攻击。这可能导致:

  • 披露文件是否存在
  • 服务器端请求伪造
  • 命令执行(取决于已安装的PHP包装器)

为了防止这种情况,默认情况下,每个基于XML的阅读器都将在DOCTYPE中声明的XML实体进行查找,如果发现任何实体,则会引发异常。

阅读有关XXE注射的更多信息。

加载电子表格文件

加载工作簿文件的最简单方法是让PhpSpreadsheet的IO Factory识别文件类型并加载它,并调用该类的静态load() 方法\PhpOffice\PhpSpreadsheet\IOFactory

$inputFileName = './sampleData/example1.xls';
/** Load $inputFileName to a Spreadsheet Object  **/
$spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load($inputFileName);

有关samples/Reader/01_Simple_file_reader_using_IOFactory.php该代码的有效示例,请参见。

load()方法将尝试识别文件类型,并为该文件类型实例化加载程序;使用它来加载文件并在Spreadsheet对象中存储数据和任何格式。

该方法根据文件扩展名对加载器进行初始猜测以实例化;但会在实际执行加载之前测试该文件:因此,例如,如果该文件实际上是CSV文件或包含HTML标记,但已赋予.xls扩展名(很常见),它将拒绝Xls通常用于.xls文件的加载程序;并使用其他加载程序测试文件,直到找到合适的加载程序,然后使用该文件读取文件。

虽然很容易在代码中实现,但您不必担心文件类型;这不是加载文件的最有效方法;而且它缺乏在实际将文件读入Spreadsheet对象之前以任何方式配置加载程序的灵活性。

创建阅读器并加载电子表格文件

如果知道需要加载的电子表格文件的文件类型,则可以实例化该文件类型的新阅读器对象,然后使用阅读器的load()方法将文件读取为Spreadsheet对象。可以通过名称实例化每种不同的受支持文件类型的阅读器对象。但是,如果文件类型不正确(例如,扩展名为.xls的CSV文件),则可能会得到无法预测的结果,尽管通常应捕获此类异常。

$inputFileName = './sampleData/example1.xls';

/** Create a new Xls Reader  **/
$reader = new \PhpOffice\PhpSpreadsheet\Reader\Xls();
//    $reader = new \PhpOffice\PhpSpreadsheet\Reader\Xlsx();
//    $reader = new \PhpOffice\PhpSpreadsheet\Reader\Xml();
//    $reader = new \PhpOffice\PhpSpreadsheet\Reader\Ods();
//    $reader = new \PhpOffice\PhpSpreadsheet\Reader\Slk();
//    $reader = new \PhpOffice\PhpSpreadsheet\Reader\Gnumeric();
//    $reader = new \PhpOffice\PhpSpreadsheet\Reader\Csv();
/** Load $inputFileName to a Spreadsheet Object  **/
$spreadsheet = $reader->load($inputFileName);

有关samples/Reader/02_Simple_file_reader_using_a_specified_reader.php 该代码的有效示例,请参见。

或者,您可以使用IO Factory的createReader()方法为您实例化阅读器对象,只需告诉它要实例化的阅读器的文件类型即可。

$inputFileType = 'Xls';
//    $inputFileType = 'Xlsx';
//    $inputFileType = 'Xml';
//    $inputFileType = 'Ods';
//    $inputFileType = 'Slk';
//    $inputFileType = 'Gnumeric';
//    $inputFileType = 'Csv';
$inputFileName = './sampleData/example1.xls';

/**  Create a new Reader of the type defined in $inputFileType  **/
$reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader($inputFileType);
/**  Load $inputFileName to a Spreadsheet Object  **/
$spreadsheet = $reader->load($inputFileName);

有关samples/Reader/03_Simple_file_reader_using_the_IOFactory_to_return_a_reader.php 该代码的有效示例,请参见。

如果不确定文件类型,则可以IOFactory::identify() 在使用该createReader()方法实例化Reader对象之前,使用该方法标识所需 的阅读器。

$inputFileName = './sampleData/example1.xls';

/**  Identify the type of $inputFileName  **/
$inputFileType = \PhpOffice\PhpSpreadsheet\IOFactory::identify($inputFileName);
/**  Create a new Reader of the type that has been identified  **/
$reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader($inputFileType);
/**  Load $inputFileName to a Spreadsheet Object  **/
$spreadsheet = $reader->load($inputFileName);

有关samples/Reader/04_Simple_file_reader_using_the_IOFactory_to_identify_a_reader_to_use.php 该代码的有效示例,请参见。

电子表格阅读器选项

为要加载的工作簿创建阅读器对象后,您将有机会在执行该load()方法之前设置其他选项。

从电子表格文件中仅读取数据

如果您只对工作簿中的单元格值感兴趣,而又不需要任何单元格格式信息,则可以使用该setReadDataOnly()方法将读取器设置为仅读取每个单元格中的数据值和任何公式 。

$inputFileType = 'Xls';
$inputFileName = './sampleData/example1.xls';

/**  Create a new Reader of the type defined in $inputFileType  **/
$reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader($inputFileType);
/**  Advise the Reader that we only want to load cell data  **/
$reader->setReadDataOnly(true);
/**  Load $inputFileName to a Spreadsheet Object  **/
$spreadsheet = $reader->load($inputFileName);

有关samples/Reader/05_Simple_file_reader_using_the_read_data_only_option.php 该代码的有效示例,请参见。

重要的是要注意,工作簿(和PhpSpreadsheet)将日期和时间存储为简单的数字值:它们只能通过应用于该单元格的格式掩码与其他数字值区分开。将只读数据设置为true时,PhpSpreadsheet不会读取单元格格式掩码,因此无法区分日期/时间和数字。

即使仅将读取数据设置为true,Gnumeric加载器也已编写为读取日期值的格式掩码,因此可以区分日期/时间和数字。但是其他读者尚未实现此更改。

从电子表格文件中仅读取数据适用于读取器:
在这里插入图片描述

从文件中仅读取命名的工作表

如果您的工作簿包含许多工作表,但是您仅对阅读其中一些表感兴趣,则可以使用该 setLoadSheetsOnly()方法来标识您对阅读感兴趣的那些表。

要读取一张纸,您可以将该纸名作为参数传递给setLoadSheetsOnly()方法。

$inputFileType = 'Xls';
$inputFileName = './sampleData/example1.xls';
$sheetname = 'Data Sheet #2';

/**  Create a new Reader of the type defined in $inputFileType  **/
$reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader($inputFileType);
/**  Advise the Reader of which WorkSheets we want to load  **/
$reader->setLoadSheetsOnly($sheetname);
/**  Load $inputFileName to a Spreadsheet Object  **/
$spreadsheet = $reader->load($inputFileName);

有关samples/Reader/07_Simple_file_reader_loading_a_single_named_worksheet.php 该代码的有效示例,请参见。

如果您要阅读的不仅仅是一张纸,可以将纸名列表作为数组参数传递给该setLoadSheetsOnly()方法。

$inputFileType = 'Xls';
$inputFileName = './sampleData/example1.xls';
$sheetnames = ['Data Sheet #1','Data Sheet #3'];

/**  Create a new Reader of the type defined in $inputFileType  **/
$reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader($inputFileType);
/**  Advise the Reader of which WorkSheets we want to load  **/
$reader->setLoadSheetsOnly($sheetnames);
/**  Load $inputFileName to a Spreadsheet Object  **/
$spreadsheet = $reader->load($inputFileName);

有关samples/Reader/08_Simple_file_reader_loading_several_named_worksheets.php 该代码的有效示例,请参见。

要将此选项重置为默认值,可以调用该setLoadAllSheets() 方法。

$inputFileType = 'Xls';
$inputFileName = './sampleData/example1.xls';

/**  Create a new Reader of the type defined in $inputFileType  **/
$reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader($inputFileType);
/**  Advise the Reader to load all Worksheets  **/
$reader->setLoadAllSheets();
/**  Load $inputFileName to a Spreadsheet Object  **/
$spreadsheet = $reader->load($inputFileName);

有关samples/Reader/06_Simple_file_reader_loading_all_worksheets.php该代码的有效示例,请参见。

从文件中仅读取命名的工作表适用于读者:
在这里插入图片描述

从文件中仅读取特定的列和行(读取过滤器)

如果您只对阅读工作表的一部分感兴趣,则可以编写一个筛选器类,该类标识装入程序是否应读取单个单元格。读过滤器必须实现的 \PhpOffice\PhpSpreadsheet\Reader\IReadFilter接口,并且包含一个 readCell()接受的参数的方法$column,$row以及 $worksheetName,并返回一个布尔值true或false指示由这些参数确定的工作簿的小区是否应该读与否。

$inputFileType = 'Xls';
$inputFileName = './sampleData/example1.xls';
$sheetname = 'Data Sheet #3';

/**  Define a Read Filter class implementing \PhpOffice\PhpSpreadsheet\Reader\IReadFilter  */
class MyReadFilter implements \PhpOffice\PhpSpreadsheet\Reader\IReadFilter
{
    public function readCell($column, $row, $worksheetName = '') {
        //  Read rows 1 to 7 and columns A to E only
        if ($row >= 1 && $row <= 7) {
            if (in_array($column,range('A','E'))) {
                return true;
            }
        }
        return false;
    }
}

/**  Create an Instance of our Read Filter  **/
$filterSubset = new MyReadFilter();

/**  Create a new Reader of the type defined in $inputFileType  **/
$reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader($inputFileType);
/**  Tell the Reader that we want to use the Read Filter  **/
$reader->setReadFilter($filterSubset);
/**  Load only the rows and columns that match our filter to Spreadsheet  **/
$spreadsheet = $reader->load($inputFileName);

有关samples/Reader/09_Simple_file_reader_using_a_read_filter.php该代码的有效示例,请参见。

此示例不是特别有用,因为它只能在非常特殊的情况下使用(当您只希望工作表中的A1:E7范围内的单元格时。通用的读取过滤器可能会更有用:

/**  Define a Read Filter class implementing \PhpOffice\PhpSpreadsheet\Reader\IReadFilter  */
class MyReadFilter implements \PhpOffice\PhpSpreadsheet\Reader\IReadFilter
{
    private $startRow = 0;
    private $endRow   = 0;
    private $columns  = [];

    /**  Get the list of rows and columns to read  */
    public function __construct($startRow, $endRow, $columns) {
        $this->startRow = $startRow;
        $this->endRow   = $endRow;
        $this->columns  = $columns;
    }

    public function readCell($column, $row, $worksheetName = '') {
        //  Only read the rows and columns that were configured
        if ($row >= $this->startRow && $row <= $this->endRow) {
            if (in_array($column,$this->columns)) {
                return true;
            }
        }
        return false;
    }
}

/**  Create an Instance of our Read Filter, passing in the cell range  **/
$filterSubset = new MyReadFilter(9,15,range('G','K'));

有关samples/Reader/10_Simple_file_reader_using_a_configurable_read_filter.php 该代码的有效示例,请参见。

通过允许您以“块”形式读取和处理大型工作簿,这对于节省内存特别有用:例如,当将数据从Excel工作表传输到数据库时,这种用法的一个例子。

$inputFileType = 'Xls';
$inputFileName = './sampleData/example2.xls';

/**  Define a Read Filter class implementing \PhpOffice\PhpSpreadsheet\Reader\IReadFilter  */
class ChunkReadFilter implements \PhpOffice\PhpSpreadsheet\Reader\IReadFilter
{
    private $startRow = 0;
    private $endRow   = 0;

    /**  Set the list of rows that we want to read  */
    public function setRows($startRow, $chunkSize) {
        $this->startRow = $startRow;
        $this->endRow   = $startRow + $chunkSize;
    }

    public function readCell($column, $row, $worksheetName = '') {
        //  Only read the heading row, and the configured rows
        if (($row == 1) || ($row >= $this->startRow && $row < $this->endRow)) {
            return true;
        }
        return false;
    }
}

/**  Create a new Reader of the type defined in $inputFileType  **/
$reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader($inputFileType);

/**  Define how many rows we want to read for each "chunk"  **/
$chunkSize = 2048;
/**  Create a new Instance of our Read Filter  **/
$chunkFilter = new ChunkReadFilter();

/**  Tell the Reader that we want to use the Read Filter  **/
$reader->setReadFilter($chunkFilter);

/**  Loop to read our worksheet in "chunk size" blocks  **/
for ($startRow = 2; $startRow <= 65536; $startRow += $chunkSize) {
    /**  Tell the Read Filter which rows we want this iteration  **/
    $chunkFilter->setRows($startRow,$chunkSize);
    /**  Load only the rows that match our filter  **/
    $spreadsheet = $reader->load($inputFileName);
    //    Do some processing here
}

有关samples/Reader/12_Reading_a_workbook_in_chunks_using_a_configurable_read_filter_ 该代码的有效示例,请参见。

使用读取过滤器适用于:
在这里插入图片描述

将多个文件合并到一个电子表格对象中

虽然您可以使用该setLoadSheetsOnly()方法限制从工作簿文件中读取的工作表的数量,但某些阅读器还允许您将来自不同文件的多个单独的“工作表”组合到单个Spreadsheet对象中,其中每个单独的文件都是该工作簿中的单个工作表。对于您阅读的每个文件,您需要使用的setSheetIndex()方法来指示应将其加载到哪个工作表索引中$reader,然后使用 loadIntoExisting()方法而不是将该load()方法实际将文件读入该工作表中。

$inputFileType = 'Csv';
$inputFileNames = [
    './sampleData/example1.csv',
    './sampleData/example2.csv'
    './sampleData/example3.csv'
];

/**  Create a new Reader of the type defined in $inputFileType  **/
$reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader($inputFileType);

/**  Extract the first named file from the array list  **/
$inputFileName = array_shift($inputFileNames);
/**  Load the initial file to the first worksheet in a `Spreadsheet` Object  **/
$spreadsheet = $reader->load($inputFileName);
/**  Set the worksheet title (to the filename that we've loaded)  **/
$spreadsheet->getActiveSheet()
    ->setTitle(pathinfo($inputFileName,PATHINFO_BASENAME));

/**  Loop through all the remaining files in the list  **/
foreach($inputFileNames as $sheet => $inputFileName) {
    /**  Increment the worksheet index pointer for the Reader  **/
    $reader->setSheetIndex($sheet+1);
    /**  Load the current file into a new worksheet in Spreadsheet  **/
    $reader->loadIntoExisting($inputFileName,$spreadsheet);
    /**  Set the worksheet title (to the filename that we've loaded)  **/
    $spreadsheet->getActiveSheet()
        ->setTitle(pathinfo($inputFileName,PATHINFO_BASENAME));
}

有关samples/Reader/13_Simple_file_reader_for_multiple_CSV_files.php该代码的有效示例,请参见。

请注意,对多个工作表使用相同的工作表索引不会将文件追加到同一工作表中,但会覆盖先前加载的结果。您不能将多个CSV文件加载到同一工作表中。

将多个文件合并为一个电子表格对象适用于:
在这里插入图片描述

将读取过滤器与将setSheetIndex()大型CSV文件拆分为多个工作表的方法相结合

Xls BIFF .xls文件在工作表中限制为65536行,而Xlsx Microsoft Office Open XML SpreadsheetML .xlsx文件在工作表中限制为1,048,576行;但是CSV文件不受可用磁盘空间的限制。这意味着我们通常无法从超大型CSV文件中读取超过这些限制的所有行,并将其另存为Xls或Xlsx文件。但是,通过使用“读取过滤器”读取“块”中的CSV文件(使用我们在上一节中定义的ChunkReadFilter类和的setSheetIndex()方法$reader,我们可以将CSV文件拆分为几个单独的工作表。

$inputFileType = 'Csv';
$inputFileName = './sampleData/example2.csv';

echo 'Loading file ',pathinfo($inputFileName,PATHINFO_BASENAME),' using IOFactory with a defined reader type of ',$inputFileType,'<br />';
/**  Create a new Reader of the type defined in $inputFileType  **/
$reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader($inputFileType);

/**  Define how many rows we want to read for each "chunk"  **/
$chunkSize = 65530;
/**  Create a new Instance of our Read Filter  **/
$chunkFilter = new ChunkReadFilter();

/**  Tell the Reader that we want to use the Read Filter  **/
/**    and that we want to store it in contiguous rows/columns  **/

$reader->setReadFilter($chunkFilter)
    ->setContiguous(true);

/**  Instantiate a new Spreadsheet object manually  **/
$spreadsheet = new \PhpOffice\PhpSpreadsheet\Spreadsheet();

/**  Set a sheet index  **/
$sheet = 0;
/**  Loop to read our worksheet in "chunk size" blocks  **/
/**  $startRow is set to 2 initially because we always read the headings in row #1  **/
for ($startRow = 2; $startRow <= 1000000; $startRow += $chunkSize) {
    /**  Tell the Read Filter which rows we want to read this loop  **/
    $chunkFilter->setRows($startRow,$chunkSize);

    /**  Increment the worksheet index pointer for the Reader  **/
    $reader->setSheetIndex($sheet);
    /**  Load only the rows that match our filter into a new worksheet  **/
    $reader->loadIntoExisting($inputFileName,$spreadsheet);
    /**  Set the worksheet title for the sheet that we've justloaded)  **/
    /**    and increment the sheet index as well  **/
    $spreadsheet->getActiveSheet()->setTitle('Country Data #'.(++$sheet));
}

有关samples/Reader/14_Reading_a_large_CSV_file_in_chunks_to_split_across_multiple_worksheets.php 该代码的有效示例,请参见。

此代码将从我们正在加载的CSV文件中一次读取65,530行,并将每个“块”存储在新的工作表中。

setContiguous()这里,阅读器的方法很重要。它仅在使用“读取过滤器”时适用,并标识是否应按单元在CSV文件中的位置或相对于过滤器的位置存储单元。

例如,如果过滤器对B2:C3范围内的单元格返回true,则将setContiguous设置为false(默认值),这些将作为B2:C3加载到Spreadsheet对象中。但是将setContiguous设置为true时,它们将被加载为A1:B2。

在多个工作表中拆分单个加载的文件适用于:
在这里插入图片描述

管道或制表符分隔值文件

CSV加载程序将尝试自动检测文件中使用的分隔符。如果无法自动检测,它将默认为逗号。如果这不适合您的用例,则可以使用setDelimiter() 方法手动指定分隔符。

$inputFileType = 'Csv';
$inputFileName = './sampleData/example1.tsv';

/**  Create a new Reader of the type defined in $inputFileType  **/
$reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader($inputFileType);
/**  Set the delimiter to a TAB character  **/
$reader->setDelimiter("\t");
//    $reader->setDelimiter('|');

/**  Load the file to a Spreadsheet Object  **/
$spreadsheet = $reader->load($inputFileName);

有关samples/Reader/15_Simple_file_reader_for_tab_separated_value_file_using_the_Advanced_Value_Binder.php 该代码的有效示例,请参见。

除了定界符之外,您还可以使用以下方法来设置数据加载的其他属性:
在这里插入图片描述
设置CSV分隔符适用于:
在这里插入图片描述

简要介绍高级价值粘结剂

从不包含格式信息的文件(例如CSV文件)中加载数据时,数据将以字符串或数字(浮点数或整数)的形式读取。这意味着PhpSpreadsheet不会自动将日期/时间(例如16-Apr-200913:30),布尔值(truefalse),百分比(75%),超链接(https://www.example.com)等识别为简单字符串以外的任何内容。但是,可以在Value Binder的加载过程中应用针对这些值执行的其他处理。

值绑定器是实现\PhpOffice\PhpSpreadsheet\Cell\IValueBinder接口的类 。它必须包含一个 bindValue()接受a \PhpOffice\PhpSpreadsheet\Cell\Cell和一个值作为参数的方法,并返回一个布尔值truefalse指示是否已使用该值填充工作簿单元格。Advanced Value Binder实现了这样一个类:在其他测试中,它标识包含“ TRUE”或“ FALSE”(基于区域设置)的字符串,并将其设置为布尔值;或科学格式的数字(例如“ 1.234e-5”)并将其转换为浮点数;或日期和时间,将它们转换为Excel时间戳值–在将值存储在单元格对象中之前。它还为标识为日期,时间或百分比的字符串设置格式。当它遇到超链接或CSV文件中的HTML标记时,可以轻松扩展它以提供其他处理(包括文本或单元格格式)。

因此,使用Value Binder可以在读取未格式化的文本文件时在加载程序逻辑中提供更大的灵活性。

/**  Tell PhpSpreadsheet that we want to use the Advanced Value Binder  **/
\PhpOffice\PhpSpreadsheet\Cell\Cell::setValueBinder( new \PhpOffice\PhpSpreadsheet\Cell\AdvancedValueBinder() );

$inputFileType = 'Csv';
$inputFileName = './sampleData/example1.tsv';

$reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader($inputFileType);
$reader->setDelimiter("\t");
$spreadsheet = $reader->load($inputFileName);

有关samples/Reader/15_Simple_file_reader_for_tab_separated_value_file_using_the_Advanced_Value_Binder.php 该代码的有效示例,请参见。

使用Value Binder进行加载适用于:
在这里插入图片描述

错误处理

当然,您也应该始终对脚本执行一些错误处理。PhpSpreadsheet会引发异常,因此您可以将访问库方法的所有代码包装在Try / Catch块中,以捕获遇到的任何问题,并以适当的方式进行处理。

PhpSpreadsheet读取器将引发一个 \PhpOffice\PhpSpreadsheet\Reader\Exception。

$inputFileName = './sampleData/example-1.xls';

try {
    /** Load $inputFileName to a Spreadsheet Object  **/
    $spreadsheet = \PhpOffice\PhpSpreadsheet\IOFactory::load($inputFileName);
} catch(\PhpOffice\PhpSpreadsheet\Reader\Exception $e) {
    die('Error loading file: '.$e->getMessage());
}

有关samples/Reader/16_Handling_loader_exceptions_using_TryCatch.php该代码的有效示例,请参见。

辅助方法

您可以使用Reader的listWorksheetNames() 方法检索文件中包含的工作表名称列表,而无需加载整个文件。同样,一种listWorksheetInfo()方法将检索文件中工作表的尺寸,而无需加载和解析整个文件。

listWorksheetNames

listWorksheetNames()方法返回一个简单的数组,列出工作簿中的每个工作表名称:

$reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader($inputFileType);

$worksheetNames = $reader->listWorksheetNames($inputFileName);

echo '<h3>Worksheet Names</h3>';
echo '<ol>';
foreach ($worksheetNames as $worksheetName) {
    echo '<li>', $worksheetName, '</li>';
}
echo '</ol>';

有关samples/Reader/18_Reading_list_of_worksheets_without_loading_entire_file.php 该代码的有效示例,请参见。

listWorksheetInfo

listWorksheetInfo()方法返回一个嵌套数组,每个条目列出工作表的名称和尺寸:

$reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader($inputFileType);

$worksheetData = $reader->listWorksheetInfo($inputFileName);

echo '<h3>Worksheet Information</h3>';
echo '<ol>';
foreach ($worksheetData as $worksheet) {
    echo '<li>', $worksheet['worksheetName'], '<br />';
    echo 'Rows: ', $worksheet['totalRows'],
         ' Columns: ', $worksheet['totalColumns'], '<br />';
    echo 'Cell Range: A1:',
    $worksheet['lastColumnLetter'], $worksheet['totalRows'];
    echo '</li>';
}
echo '</ol>';

有关samples/Reader/19_Reading_worksheet_information_without_loading_entire_file.php 该代码的有效示例,请参见。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值