PhpSpreadsheet转换xlsx为csv时新增固定值ClientID列实现咨询
实现方案
这个需求完全可以实现,你只需要在导出CSV前,对每个工作表的所有行追加固定的ClientID字段即可,修改后的代码如下:
use \PhpOffice\PhpSpreadsheet\Reader\Xlsx; use \PhpOffice\PhpSpreadsheet\Writer\Csv; // 定义你要固定写入的ClientID值,可根据需求修改 define('CLIENT_ID', '你需要的固定ClientID值'); $reader = new Xlsx(); $uploaded_xls_file = $_FILES['file']['tmp_name']; $spreadsheet = $reader->load($uploaded_xls_file); $loadedSheetNames = $spreadsheet->getSheetNames(); $writer = new Csv($spreadsheet); foreach($loadedSheetNames as $sheetIndex => $loadedSheetName) { $sheet = $spreadsheet->getSheet($sheetIndex); // 获取当前工作表的最大列数和最大行数 $highestRow = $sheet->getHighestRow(); $highestColumn = $sheet->getHighestColumn(); $newColumn = ++$highestColumn; // 新的列位置 // 第一行(表头)追加列名 $sheet->setCellValue($newColumn . '1', 'ClientID'); // 从第二行开始逐行追加固定的ClientID值 for ($row = 2; $row <= $highestRow; $row++) { $sheet->setCellValue($newColumn . $row, CLIENT_ID); } $writer->setSheetIndex($sheetIndex); $writer->setPreCalculateFormulas(false); $savingpath = $loadedSheetName.'.csv'; $writer->save($savingpath); }
代码说明
- 你只需要修改
define('CLIENT_ID', '你需要的固定ClientID值')中引号里的内容,换成你实际要写入的固定值即可 - 代码会自动识别每个工作表的原有最后一列,在右侧新增列写入表头和固定值,不会影响原有数据的结构
内容的提问来源于stack exchange,提问作者Rand
相关产品推荐
相关产品推荐

