Laravel Excel导入时如何获取单元格计算值而非公式?
解决方案:获取Excel单元格计算结果而非公式
我来给你个简洁直接的方案,刚好Laravel Excel(底层基于PhpSpreadsheet)自带了对应的配置项,只需要开启公式计算选项即可:
方式一:在导入请求中临时配置
直接修改你现有import方法里的Excel::import调用,添加读取选项让PhpSpreadsheet自动计算公式结果:
public function import() { for ($i = 1; $i <=2 ; $i++) { $import = new SiteImport(); // 添加calculateFormulas配置,获取单元格计算后的值 Excel::import( $import, 'C:\Users\ahmad\OneDrive\Desktop\sites\site'.$i.'.xlsx', null, \Maatwebsite\Excel\Excel::XLSX, [ 'calculateFormulas' => true, // 可选:如果公式计算耗时较长,可以设置内存限制,默认够用 // 'formulaMemorySize' => 8192 ] ); } return redirect('/site'); }
方式二:在Import类中全局配置(更优雅)
如果你的SiteImport类会被多处使用,推荐在类内部配置,这样所有导入场景都会自动获取计算结果:
use Maatwebsite\Excel\Reader\ReaderConfiguration; class SiteImport implements ToModel, WithHeadingRow // 假设你的类已经实现了这些接口 { // ... 你的现有代码 ... public function configure(ReaderConfiguration $readerConfig): void { $readerConfig->setReaderOptions([ 'calculateFormulas' => true, ]); } }
这样修改后,你原来的import方法不需要做任何改动,就能自动读取单元格的计算结果了。
原理很简单:Laravel Excel依赖的PhpSpreadsheet默认会读取单元格的原始内容(公式),开启calculateFormulas选项后,它会自动执行公式计算并返回最终结果。
内容的提问来源于stack exchange,提问作者Ahmad
相关产品推荐
相关产品推荐

