Unoconv转换XLSX为CSV时合并单元格填充值的方案问询
解决unoconv转换CSV时合并单元格未填充的问题
关于unoconv的内置选项
很遗憾,unoconv目前没有直接填充合并单元格值的内置参数。它底层依赖LibreOffice/OpenOffice的文档转换引擎,默认导出CSV时,合并单元格的内容只会保留在起始单元格中,后续的空单元格不会自动继承上方的值。
如果不想用脚本处理,你可以先通过LibreOffice手动打开XLSX文件,用「填充合并单元格」的功能(选中合并区域 → 右键取消合并单元格 → 按Ctrl+G定位空值 → 输入=上方单元格 → 按Ctrl+Enter批量填充),再用unoconv转换,但这种方式不太适合自动化场景。
使用awk自动填充空值
如果需要自动化处理,awk是个非常高效的工具。针对你的场景,我们可以写一个脚本,记住上一行Column_1的值,当当前行Column_1为空时自动填充:
awk -F',' 'BEGIN{OFS=","} NR==1{print; next} {if ($1 == "") $1 = prev; prev = $1; print}' input.csv > output.csv
脚本解释:
-F',':指定输入的字段分隔符为逗号,适配CSV格式BEGIN{OFS=","}:设置输出的字段分隔符也为逗号,避免输出格式混乱NR==1{print; next}:第一行是表头,直接打印并跳过后续处理if ($1 == "") $1 = prev:如果当前行第一列是空值,就用上一行保存的prev值替换它prev = $1:更新prev为当前行第一列的值(确保下一行能获取到正确的填充值)print:输出处理后的行
处理效果
你的原始CSV输入:
Column_1,Column_2,Column_3,Column_4 C,ABC,DEF,123 ,ABC,DEF,123 ,ABC,DEF,123
经过脚本处理后,输出会变成:
Column_1,Column_2,Column_3,Column_4 C,ABC,DEF,123 C,ABC,DEF,123 C,ABC,DEF,123
如果你的场景中存在其他列需要填充,只需要扩展判断逻辑即可(比如同时处理$2、$3等)。
内容的提问来源于stack exchange,提问作者user2058738
相关产品推荐
相关产品推荐

