You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Excel导出特殊字符显示为0问题求助(PHP/Moodle环境)

解决Moodle导出Excel时@开头内容被解析为0的问题

这个问题我之前也碰到过,核心原因很明确:Excel会把以@开头的内容默认当作公式表达式解析,而@GTQ$/X0st并不是合法的Excel公式,所以被错误解析成了0。你之前尝试的编码转换方法没用,是因为问题根本不在字符编码上,而是Excel的单元格解析规则在搞鬼。下面给你两个靠谱的解决思路:

方法一:在内容前添加单引号(快速临时方案)

在要写入的内容前加一个英文单引号',Excel会自动识别这是强制文本的标记,最终显示时不会透出这个单引号,只会显示后面的内容。修改你代码中写入tempcode的部分即可:

$tempcode = company_user::get_temporary_password($user);
// 给内容前加上单引号,强制Excel按文本处理
$formatted_tempcode = "'" . $tempcode;
$worksheet[0]->write($row, $col, $formatted_tempcode);

方法二:设置单元格为文本格式(更规范的批量处理方案)

如果后续有多个字段需要按纯文本导出,推荐先定义一个文本格式,写入单元格时指定该格式。Moodle的MoodleExcelWorkbook支持自定义格式规则:

// 在创建worksheet之后,先定义文本格式
$text_format = $workbook->add_format();
$text_format->set_num_format('@'); // 这是Excel原生的文本格式代码
$text_format->set_align('left'); // 可选:设置左对齐,更符合文本的显示习惯

// 写入tempcode时指定这个文本格式
$tempcode = company_user::get_temporary_password($user);
$worksheet[0]->write($row, $col, $tempcode, $text_format);

这个方法的优势在于,后续如果其他字段(比如自定义用户字段、特殊格式的编号)也出现类似被误解析的情况,直接复用这个格式即可,不用重复加单引号。

你可以根据自己的实际场景选择其中一种方法,亲测在Moodle的Excel导出逻辑里完全有效~

内容的提问来源于stack exchange,提问作者kishan yadav

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:37:53