PhpSheet整理

对于PhpSheet我浅显的理解——Php中用来表格读写的工具。(我是在tp5下使用的)
其支持的文件格式:
phpsheet支持的文件格式(网上找的图)

读文件

//第一步创建读操作
$reader = \PhpOffice\PhpSpreadsheet\IOFactory::createReader('Xlsx');
//设置只读(不设置应该也没大问题)
$reader->setReadDataOnly(TRUE);
//导入文件
$spreadsheet = $reader->load("test.xlsx");

写文件

如果重复写入同一文件会直接覆盖原文件的内容

//第一步创建写操作
$writer = IOFactory::createWriter($spreadsheet, 'Xlsx'); //按照指定格式生成Excel文件
//导出文件
$writer->save('filename.xlsx');

获取工作表

当从电子表格文件加载工作簿时,它将与所有现有工作表一起加载(除非指定仅应加载某些工作表)
法1.通过索引位置访问工作表:

$countSheet = $spreadsheet -> getSheetCount();    //获取工作表数量
for ($i = 0; $i < $countSheet; $i++)
{
   
    $currentSheet = $spreadsheet -> getSheet($i);   //获取工作表内容
    $dataArray[$i] = $currentSheet -> toArray();       //转换为数组
    
    print_r($dataArray[$i]);
}

法2.通过名称访问工作表:

$dataArray    = [];
$currentSheet = $spreadsheet->getSheetByName('Sheet1');
$dataArray    = $currentSheet->toArray();
var_dump($dataArray);

获取单元格

获取单个单元格:
//1.实例化 Spreadsheet 对象(导入文件的话就不用new了)
$spreadsheet = new Spreadsheet();
//2.获取活动工作薄
$sheet = $spreadsheet->getActiveSheet();

获取单元格A1的值,这将检索单元格中包含的原始,未格式化的值(比如日期,取出来的就是时间戳)。

$cellValue = $sheet->getCell('A1')->getValue();

如果单元格包含一个公式,而且需要检索计算的值而不是公式本身,则使用该单元格的 getCalculatedValue()方法。关于getCalculatedValue()这将在计算引擎中再做补充 。

$cellValue = $sheet->getCell('A1')->getCalculatedValue();

如果要查看应用了任何单元格格式的值(例如,对于人类可读的日期或时间值),可以使用单元格的getFormattedValue()方法。

$cellValue = $sheet->getCell('A1')->getFormattedValue();

单元格获取也通过坐标值检索,如B5坐标值为(2,5),先列后行。

$cellValue = $sheet->getCellByColumnAndRow(2, 5)->getValue();
获取一定范围内的单元格到数组中:

toArray()方法将返回整个工作表;rangeToArray() 将返回指定的范围或单元格;namedRangeToArray()将返回定义内的单元格。这些方法都将返回一个二维的行和列数组。

//rangeToArray
$dataArray = $sheet->rangeToArray(
        'C3:E5',     // 读取范围
        NULL,      //  空单元格要返回的默认值
        TRUE,      // 若是公式则返回计算值        
        TRUE,      // 返回格式化后的值
        TRUE         // 数组的坐标和表中的一致
);
遍历表格:

法1.使用迭代器

foreach ($sheet->getRowIterator() as $row) //行迭代器
{
   
    $cellIterator = $row->getCellIterator();//列迭代器
    $cellIterator->setIterateOnlyExistingCells(FALSE); 
    foreach ($cellIterator as $cell) {
   
             $cell->getValue() ;
             echo $value . PHP_EOL;//打印
    }
}

将单元格迭代器设置 setIterateOnlyExistingCells()为FALSE。这使得迭代器循环工作表范围内的所有单元格,即使它们尚未设置。
将单元格迭代器设置 setIterateOnlyExistingCells()为false会循环工作表中当时可用的所有单元格。如果需要,这将创建新的单元并增加内存使用!仅在打算循环所有可用单元时才使用它。(最好还是使用第二个方法的意思吧emm maybe)

法2.按坐标值遍历

$highestRow = $sheet->getHighestRow(); // 获取总行数
$highestColumn = $sheet->getHighestColumn(); // 获取总列数(这里是ABCD)
$highestColumnIndex= \PhpOffice\PhpSpreadsheet\Cell\Coordinate::columnIndexFromString($highestColumn); // 获取总列数(数字值)
for ($row = 1; $row <= $highestRow; ++$row) {
   
    for ($col = 1; $col <= $highestColumnIndex; ++$col) {
   
        $value = $sheet->getCellByColumnAndRow($col, $row
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值