如何使用Go encoding/csv包向CSV文件写入多行值?
解决Go语言encoding/csv写入合并单元格内容的问题
首先,咱们先揪出你代码里的核心问题:你试图把[]string类型的multiValue直接作为一个单元格传入w.Write(),但csv.Writer.Write()方法接收的[]string参数里,每个元素都对应CSV的一个独立单元格,而且类型上也不匹配(你相当于把切片嵌套进了切片里),这肯定没法得到你想要的结果。
要实现你期望的输出,你需要先把multiValue里的字符串拼接成一个单独的字符串,再作为单个单元格传入,具体修改步骤如下:
- 导入
strings包,用来拼接字符串 - 把
multiValue切片的元素合并成一个字符串 - 调用
Write时传入正确的单元格切片,同时别忘了刷新缓冲区并检查错误
修改后的完整代码:
package main import ( "encoding/csv" "log" "os" "strings" ) func main() { fileName := "output.csv" fh, err := os.Create(fileName) if err != nil { log.Fatalf("Could not create file: %v", err) } defer fh.Close() w := csv.NewWriter(fh) defer w.Flush() // 确保程序退出前刷新缓冲区,把数据写入文件 normalValue := "I am a single line value" multiValue := []string{"I am a ", "multi line value"} // 把切片里的所有字符串合并成一个整体 joinedMultiValue := strings.Join(multiValue, "") // 写入一行数据,每个元素对应CSV的一个单元格 if err := w.Write([]string{normalValue, joinedMultiValue}); err != nil { log.Fatalf("Failed to write CSV record: %v", err) } // 检查Flush操作是否有错误(比如文件写入失败) if err := w.Error(); err != nil { log.Fatalf("Failed to flush CSV writer: %v", err) } }
运行这段代码后,生成的CSV内容会和你期望的完全一致:
I am a single line value,"I am a multi line value"
额外补充:如果你的multiValue里包含换行符(真正的多行内容),csv.Writer会自动识别并把这个单元格用双引号包裹,完全符合CSV规范,不需要你手动处理引号。
内容的提问来源于stack exchange,提问作者max
相关产品推荐
相关产品推荐

