Magento 2.2.6 CSV导入产品报错:数据行列数与标题行不匹配
我之前在Magento 2.2.x版本里也碰到过一模一样的问题——明明反复核对了CSV的列和数据,却还是弹出"Number of columns does not correspond to the number of rows in the header in row(s)"的错误。后来排查出几个容易被忽略的细节,你可以挨个尝试:
检查CSV的隐藏字符与格式问题
用纯文本编辑器(比如Notepad++)打开CSV,开启「显示所有字符」功能(Notepad++路径:视图→显示符号→显示所有字符),重点排查:- 标题行或数据行末尾是否有多余的逗号(会被识别为空列)
- 单元格内是否有未转义的换行符(比如用
Alt+Enter手动换行的内容) - 文件末尾是否存在空行,这会被系统当成一行无效数据
确认CSV的编码格式
Magento 2对导入文件的编码要求严格,尤其是包含非英文字符时。确保你的CSV以UTF-8 BOM编码保存:用Notepad++打开后,在顶部「编码」菜单选择「UTF-8 BOM」,重新保存文件后再尝试导入。检查单元格内容的引号转义
如果某个单元格包含逗号、双引号这类特殊字符,必须用双引号包裹整个单元格内容,且内部的双引号要转义(示例:"Product name with \"quote\" and , comma")。如果转义错误,系统会把单元格内的逗号当成列分隔符,直接导致列数不匹配。拆分大文件测试
如果你的CSV包含大量数据,先拆分出3-5行的小文件测试导入。大文件里某一行的微小错误可能会导致整个文件报错,小文件更容易定位问题所在。核对官方模板的字段一致性
导出一份Magento官方的产品导入模板(路径:系统→数据传输→导入→选择「产品」类型→点击「下载示例文件」),对比你的CSV字段名是否完全一致——Magento的导入字段是大小写敏感的,比如Price和price会被识别成两个不同的字段。调整PHP配置解决换行识别问题
部分服务器的PHP默认关闭了auto_detect_line_endings,导致Magento无法正确识别CSV的换行符。你可以在Magento根目录的index.php开头添加一行代码:ini_set('auto_detect_line_endings', true);保存后重新尝试导入。
内容的提问来源于stack exchange,提问作者OBAID

