php - PHPSpreadsheet - 无法更新现有电子表格但可以写入新电子表格?
问题描述
所以我使用 PHPSpreadsheet 写入现有的电子表格,但由于某种原因,我不断收到此错误:
PHP Fatal error: Uncaught Error: Call to a member function setValue() on null in /home/joe/vendor/phpoffice/phpspreadsheet/samples/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/Worksheet.php:1127
Stack trace:
#0 /home/joe/vendor/phpoffice/phpspreadsheet/samples/server.php(90): PhpOffice\PhpSpreadsheet\Worksheet\Worksheet->setCellValue('b15', '6429093')
#1 {main}
thrown in /home/joe/vendor/phpoffice/phpspreadsheet/samples/vendor/phpoffice/phpspreadsheet/src/PhpSpreadsheet/Worksheet/Worksheet.php on line 1127
我只在尝试从现有电子表格加载而不是从新电子表格加载时收到此错误。代码如下:
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
$letters = ['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','aa','ab','ac','ad','ae','af','ag','ah','ai','aj','ak','al','am','an','ao','ap','aq','ar','as','at','au','av','aw','ax','ay','az','ba','bb','bc','bd','be'];
$numColumns = count($letters);
foreach($rows as $row) {
foreach($row as $key => $value) {
if(isset($value) && $value != null) {
$sheet->setCellValue($letters[$key].$i, $value);
}
//print_r();
}
$i++;
}
我从中加载的电子表格仅包含一堆单元格格式和一些已经包含数据的单元格。您可以提供的任何帮助都会很棒:-)
解决方案
字母要大写,不能小写,这个方法是通过ascii码获取char。并将其转换为带有 function 的 char chr
。
$letters = range(65, 90) // A-Z ascii code
foreach($rows as $i => $row) {
foreach($row as $j => $value) {
if(isset($value) && $value != null) {
// array start from 0, but spreadsheet line start from 1. then $i+1
$sheet->setCellValue( chr($letters[$j]).($i+1) , $value); // A1, $value
}
//print_r();
}
}
推荐阅读
- html - 网页转发到域
- c++ - 是否有任何简单的方法可以从用户那里获取整数输入来填充向量并提供在 C++ 中停止的选项?
- python - 在 DataFrame Python 上一次遍历行和列的表单
- python - 使用 CX_freeze 为我的 exe 文件添加图标
- sql - SUM (CASE WHEN A=B THEN COUNT*X) 语句
- apache-kafka - 带有可选记录的 AVRO 模式
- python-3.x - 如何从这种格式行中获取术语?
- sql - jooq sql builder输出给出“?” 在 WHERE 子句中的 eq()
- java - 如何在不初始化的情况下使这个 For 循环工作?
- c++ - C++ 模板:值应该是编译时常量,但编译器说它不是