首页 > 编程语言 >要在PHP中导入Excel文件并转换复杂的公式,可以使用PhpSpreadsheet库。这个库是PHPExcel的继任者,提供了更多功能和更好的性能。

要在PHP中导入Excel文件并转换复杂的公式,可以使用PhpSpreadsheet库。这个库是PHPExcel的继任者,提供了更多功能和更好的性能。

时间:2023-07-14 17:45:51浏览次数:42  
标签:cell arr 公式 Excel PhpSpreadsheet 库是 row

要在PHP中导入Excel文件并转换复杂的公式,可以使用PhpSpreadsheet库。这个库是PHPExcel的继任者,提供了更多功能和更好的性能。

下面是一个示例代码,展示了如何使用PhpSpreadsheet库导入Excel文件、读取和计算复杂的公式:

```php
// 引入PhpSpreadsheet库的Autoloader
require 'vendor/autoload.php';

use PhpOffice\PhpSpreadsheet\IOFactory;
use PhpOffice\PhpSpreadsheet\Cell\Coordinate;
use PhpOffice\PhpSpreadsheet\Calculation\Calculation;

// 加载Excel文件
$spreadsheet = IOFactory::load('your_excel_file.xlsx');

// 获取活动工作表
$worksheet = $spreadsheet->getActiveSheet();

// 启用公式计算引擎
Calculation::getInstance($spreadsheet);

// 获取所有使用了公式的单元格
$formulaCells = $worksheet->getCellCollection()->getCellCache();

// 遍历每个公式单元格
foreach ($formulaCells as $cell) {
    $cellValue = $cell->getValue();
    $cellFormula = $cell->getFormula();

    // 检查单元格是否包含公式
    if (!empty($cellFormula)) {
        // 将公式中的A1样式坐标转换为R1C1样式坐标
        $cellReference = $cell->getCoordinate();
        $rc1Coordinates = Coordinate::coordinateToFormula($cellReference);

        // 替换公式中的A1样式坐标为R1C1样式坐标
        $cellFormula = str_replace($cellReference, $rc1Coordinates, $cellFormula);

        // 设置公式到单元格
        $cell->setValueExplicit($cellFormula, \PhpOffice\PhpSpreadsheet\Cell\DataType::TYPE_FORMULA);

        // 强制重新计算公式
        Calculation::getInstance()->clearCalculationCache();
        $cell->getWorksheet()->getCell($cellReference)->recalculate();

        // 获取计算结果
        $cellResult = $cell->getCalculatedValue();

        // 在控制台输出公式和结果
        echo "公式: " . $cellFormula . PHP_EOL;
        echo "结果: " . $cellResult . PHP_EOL;
    }
}

// 保存修改后的Excel文件
$writer = IOFactory::createWriter($spreadsheet, 'Xlsx');
$writer->save('modified_excel_file.xlsx');
```

在上述代码中,我们使用了PhpSpreadsheet库的`IOFactory`类来加载Excel文件,并使用`getCellCollection()`方法获取所有使用了公式的单元格。然后,我们将A1样式的坐标转换为R1C1样式的坐标,并使用`str_replace()`函数替换公式中的坐标。接下来,我们设置公式到单元格,并强制重新计算公式,然后获取计算结果并输出到控制台。最后,我们使用`IOFactory`类的`createWriter()`方法保存修改后的Excel文件。

请确保你已经将PhpSpreadsheet库正确安装,并将`your_excel_file.xlsx`替换为实际的Excel文件名。修改后的Excel文件将保存为`modified_excel_file.xlsx`。

这个示例可以处理复杂的公式,但请注意某些特殊的公式可能需要更复杂的处理逻辑。因此,根据你的具体需求,你可能需要对代码进行一些自定义修改。

 


//上传excel表 获取数据
public function excelToArrayNew($filename){
// 加载Excel文件
$spreadsheet = IOFactory::load($filename);

$sheet = $spreadsheet->getSheet(0); // 读取第一个工作表(编号从 0 开始)
$highestRow = $sheet->getHighestRow(); // 取得总行数
$highestColumn = $sheet->getHighestColumn(); // 取得总列数
$arr = array('A','B','C','D','E','F','G','H','I','J','K','L','M', 'N','O','P','Q','R','S','T','U','V','W','X','Y','Z');
// 一次读取一列
$res_arr = array();
for ($row = 2; $row <= $highestRow; $row++) {
$row_arr = array();
for ($column = 0; $column <= 30;$column++) {
$val = $sheet->getCellByColumnAndRow($column, $row)->getCalculatedValue();
$row_arr[] = trim(html_entity_decode($val),chr(0xc2).chr(0xa0));
}
$res_arr[] = $row_arr;
}
return $res_arr;

}

 

标签:cell,arr,公式,Excel,PhpSpreadsheet,库是,row
From: https://www.cnblogs.com/cuishilei/p/17554603.html

相关文章

  • Excel-批量填充数字
    1、一般情况下,都是使用鼠标左右键拖动来实现数据的填充的2、但是填充1200列,下拉拖动就非常麻烦,可以首先定位到A200。在屏幕左侧中央处找到剪切板下方的“A1”字样,鼠标单击A1文字,输入想要跳转的单元格,如A200,输入完成之后,点击回车即可。3、将要填充数据的单元格全部选中,选择的......
  • java导出的excel默认路径
    如何设置Java导出Excel的默认路径作为一名经验丰富的开发者,我将指导你如何实现Java导出Excel的默认路径。下面是整个流程的步骤:步骤操作1创建一个Excel文件对象2设置Excel文件的默认导出路径3创建一个Sheet对象4向Sheet中添加数据5保存Excel文件现......
  • java导出excel列名不固定
    Java导出Excel列名不固定的实现引言在Java开发中,我们经常需要将数据导出到Excel表格中。一般情况下,表格的列名是固定的,但有时候我们需要根据实际的数据动态生成列名。本文将介绍一种实现Java导出Excel列名不固定的方法。实现流程下面是实现Java导出Excel列名不固定的流程,可以用......
  • Excel宏教程_编程入门自学教程_菜鸟教程-免费教程分享
    教程简介宏语言VisualBasicforApplication(VBA).VisualBasic是windows环境下开发应用软件的一种通用程序设计语言,功能强大,简便易用。Excel宏是Excel中的一种编程功能,它可以让用户录制一系列的操作,以便在需要时自动执行这些操作。用户可以将录制的宏与Excel的单元格、图表、......
  • java设置excel自定义列宽
    Java设置Excel自定义列宽在Java中,我们经常需要操作Excel文件。Excel文件的列宽度对于数据的展示非常重要。默认情况下,Excel中的列宽度是根据内容自动调整的,但有时我们需要手动设置列宽度来确保数据的可读性和美观性。本文将介绍如何使用Java程序来设置Excel文件的自定义列宽。使......
  • java设置excel居中
    Java设置Excel居中在处理Excel文件时,有时候我们需要对单元格中的数据进行格式化和对齐操作,以便更好地呈现数据。本文将介绍如何使用Java设置Excel单元格居中对齐,并提供代码示例以供参考。准备工作在开始之前,我们需要确保以下几点:你已经安装了Java开发工具包(JavaDevelopmentK......
  • [C#] MiniExcel获取表格标题内容
    MiniExcel的GetColumns仅返回标题的有效列(如果有5列就返回A,B,C,D,E五个字符),不能给出标题名稍作修改:privatestaticFileStreamMiniExcel_OpenSharedRead(stringpath){returnFile.Open(path,FileMode.Open,FileAccess.Read,FileShare.Read......
  • Vue实现在线编辑excel、导入、导出(转)
    原文:https://www.baidu.com/link?url=AuyjwtPhSkYFpr8dpb-mdYLpniwQhc7URksdLNktJ-dFgYmR4eEv3VpuTWxEH1p37BdTjfnva4iKCX8_pZx4BgFMyFjgxtMT95FLe5N02vi&wd=&eqid=dc455e22000331bf0000000664af71c1概要Vue实现在线编辑excel、导入、导出整体架构流程luckysheet文档地址exceljs文......
  • C#_生成二维码放到excel中
    1、需要提前导包2、代码//创建二维码//content:扫描二维码出来的内容,例如想要扫出来的内容是:A=3&B=4,那么content就要赋值为content="A=3&B=4"privateBitmapcreateQRCode(stringcontent){QRCodeGeneratorqRCodeGenerator=newQRCodeGenerator();QRCodeDa......
  • Excel单元格进入编辑模式,保存更改退出编辑模式
    在Excel中,按F2键可以进入单元格的编辑模式,以便在单元格中编辑公式或文本。要退出编辑模式并保存更改,可以按Enter键或Tab键。如果要放弃更改并退出编辑模式,可以按Esc键。以下是一些常见的方法来退出编辑模式:按下Enter键:按下Enter键将保存更改并将焦点移动到下一个......