セル内に改行があるCSVは
"111","aaa" "222","bbb ccc"
のように「"」でくくってやれば表現可能です。
しかしセル内改行がある場合にExcelで読み込むと、セル内改行で切れてしまい表が崩れてしまう、という問題が起こりました。
実は最初にそのCSVを吐き出すモジュールを作成した時のテスト時にはうまくいっていたので、その後の修正でバグが混入したのだろう、ということで調査しました。
すると、出力するファイル名拡張子が「.csv」だったものを、後から出た要望で「.txt」に変更していたことがわかりました。
Excelは、拡張子が「.csv」の場合だと何も聞かずにCSVとして読み込んでくれるのですが、「.txt」の場合だとCSVや固定桁フォーマットのテキストを読み込むためのウィザードを動かしてそれで読み込みます。
ウィザードの場合でも「"」でくくられたCSVを読むことはもちろん出来るのですが、レコードを先に必ず改行で切ってしまってからパースするため、「"」でくくられている中に改行があってもそこでレコードは切れてしまうのです。
なので、状況を説明して変更された拡張子「.txt」を「.csv」に戻してもらうことで対応することになりました。
ちなみにExcelでセル内改行したものをCSVで出力すると、改行コードを可視化して表示すると
"111","aaa"\r\n "222","bbb\n ccc"\r\n
のようにセル内改行は「\n」のみで表現されています。
最初はこの違いのせいかと思ったのですが、セル内改行が「\r\n」になっている場合でも、拡張子が「.csv」であれば正しく読み込めます。
逆に、Excelが吐いたファイルでも拡張子を「.txt」に変更してしまうと、正しく読み込めなくなります。
(追記)
セル内改行コードを最初「\r」と書いてたのですが「\n」の間違いでしたので修正しました。
@tmtmsさんと@kotyさんに指摘頂きました。ありがとうございます!