Excel用のCSVファイルの生成、値内に改行を入れる方法


158

Excel用のファイルを生成する必要があります。このファイルの値の一部に複数の行が含まれています。

そこには英語以外のテキストも含まれているため、ファイルはUnicodeである必要があります。

私が生成しているファイルは次のようになります:(UTF8で、英語以外のテキストが混在し、行数が多い)

Header1,Header2,Header3
Value1,Value2,"Value3 Line1
Value3 Line2"

複数行の値は二重引用符で囲まれ、通常の毎日の改行が含まれていることに注意してください。

Webで見つけた結果によると、これは機能すると想定されていましたが、機能しませんが、少なくともExcel 2007およびUTF8ファイルは使用できません。Excelは、3行目を最初のデータ行の2行目ではなく2行目のデータとして扱います。

これは顧客のマシンで実行する必要があり、私は彼らのバージョンのExcelを制御できません。そのため、Excel 2000以降で動作するソリューションが必要です。

ありがとう

編集:私は2つのCSVオプションを使用して問題を「解決」しました。1つはExcel用(Unicode、タブ区切り、フィールドに改行なし)、もう1つはその他の国(UTF8、標準CSV)です。

私が探していたものではありませんが、少なくとも(これまでのところ)機能します


1
参考:これはすべてLibreOfficeで完全に機能し、CSVのインポートはそもそもはるかに簡単です。
user2061057 2016

9
質問を編集してスペースを削除したため、余分なスペースについて受け入れられた回答は非常に混乱しています...
Matti Virkkunen

回答:


70

スペース文字がデータの一部である場合にのみ、フィールドの先頭にスペース文字を含める必要があります。Excelは先頭のスペースを削除しません。見出しとデータフィールドに不要なスペースが表示されます。さらに悪いこと"に、3番目の列の改行はフィールドの先頭にないので無視されます。

ファイルに非ASCII文字(UTF-8でエンコード)がある場合、ファイルの先頭にUTF-8 BOM(3バイト、hex EF BB BF)が必要です。そうでない場合、Excelは、utf-8ではなく、ロケールのデフォルトのエンコーディング(cp1252など)に従ってデータを解釈し、非ASCII文字は破棄されます。

以下のコメントはExcel 2003、2007、2013に適用されます。Excel 2000ではテストされていません

エクスプローラでファイル名をダブルクリックしてファイルを開くと、すべてが正常に動作します。

Excel内から開くと、結果は異なります。

  1. ファイルにASCII文字のみ(BOMなし)があります:機能します。
  2. ファイルに非ASCII文字(UTF-8でエンコード)があり、最初にUTF-8 BOMが含まれている:データがUTF-8でエンコードされていると認識されますが、csv拡張子は無視され、テキストにドロップされますnot-a-Wizardをインポートすると、残念ながら改行の問題が発生します。

オプションは次のとおりです。

  1. Excel内からファイルを開かないようにユーザーをトレーニングします:-(
  2. XLSファイルを直接書き込むことを検討してください... Python / Perl / PHP / .NET / etcでそれを行うために利用可能なパッケージ/ライブラリがあります

1
おかげで、質問の先頭のスペースの問題を修正しました。CSVの例を手動で入力し、実際のファイルからコピーして貼り付けませんでした。実際のファイルにはこれらのスペースが含まれていません。
ニール

@Nir:では、実際の問題について話しましょう。つまり、UTF-8 BOMがあり、Excel内からファイルを開いたときに、テキストインポートウィザードがValue3の改行を「保護」する必要があることを認識していません-正しいですか?または、UTF-8 BOMがなく、TIWにデータがUTF-8エンコードされていて、それでも改行が抜けていることを伝える必要があったのでしょうか。
ジョンマチン

使用したい場合| フィールド区切り文字として、改行をレコード区切り文字として、 "を使用してテキストフィールドのコンテンツを保護します。テキストフィールドには|、"、および改行が含まれる場合があります。これは可能ですか?
Giorgio

1
参考:Excel2007とCSVをRedmineシステムからエクスポートしました。最初にUTF-8 BOM(EFBBBF)を追加した後、Excelはファイルを完全に開きました。「問題の説明」列に埋め込まれた改行は正しく処理され、行構造は損傷せず、すべての国別文字が適切に読み取られます(UTF8 BOMなしで読み取ると、それらは破棄されました)。Excelには、テキストインポートウィザードも表示されていません。現在、そのCSVにはEFBBBFヘッダーがあり、0A行セパレーター0D0Aとして、およびテキストセルの文字列内の新しい行として使用されます。
ケツァルコアトル2015年

1
あなたは正しく、CSV、読むためにOS X用のExcelを取得しようとしている場合だけでなく、 Windows用のエクセル、ここでの素晴らしいリソースです:stackoverflow.com/questions/4348802/...
アレクサンドル・R. Janini

25

たくさんの微調整の後、Linuxでファイルを生成し、Windows + Excelで読み取るように機能する構成がありますが、埋め込まれた改行フォーマットは標準に従っていません:

  • フィールド内の改行は\ n(そして明らかに二重引用符で囲まれている)である必要があります
  • レコードの終わり:\ r \ n
  • 等号でフィールドを開始しないでください。そうしないと、式として扱われ、切り捨てられます

Perlでは、次のようにText :: CSVを使用してこれを行いました。

use Text::CSV;

open my $FO, ">:encoding(utf8)", $filename or die "Cannot create $filename: $!";
my $csv = Text::CSV->new({ binary => 1, eol => "\r\n" });

#for each row...:
$csv -> print ($FO, \@row);

3
はい、\ r \ nやりました。これがWindows + Excel、OSX + Numbers、およびGoogleドキュメントで動作することを確認できます。
Yorick Sijsling

3
"で囲まれたフィールドで\ n(これも\ nを試しました)を使用し、\ r \ nを使用して行を分割しました。Excel2010では、この問題はまだ解決していません。ANSIおよびUTF8-with-BOMを試しました。いいえ成功しない
NL-X

1
しかし、これは私が使うためです| フィールドセパレータとして。私が使うなら; フィールド区切り文字として、CSVデータをインポートするときに問題がまだ存在しますが、ファイルエクスプローラーでCSVをダブルクリックしてCSVを開くと、問題は解消します。
nl-x

2
Windows 7のExcel 2003/2010では、Ianの回答が機能しません。16進エディターを使用してUTF-8 BOMファイルを編集しようとし、 '0D0A'ビット(\ r \ n)から0D(\ r)を削除しましたフィールド内の改行。しかし、それは機能しません。
Dan W

この答えは、Excel 2010とWindows 7を使用して(変更なしで)うまくいきました。cygwinに同梱されているperl v5.14.2も使用しています。私の埋め込まれた改行はすべて\nでした。おかげで
ardnew

21

最近同様の問題がありましたが、HTMLファイルをインポートすることで解決しました。ベースラインの例は次のようになります。

<html xmlns:v="urn:schemas-microsoft-com:vml"
xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:x="urn:schemas-microsoft-com:office:excel"
xmlns="http://www.w3.org/TR/REC-html40">
  <head>
    <style>
      <!--
      br {mso-data-placement:same-cell;}
      -->
    </style>
  </head>
  <body>
    <table>
      <tr>
        <td>first line<br/>second line</td>
        <td style="white-space:normal">first line<br/>second line</td>
      </tr>
    </table>
  </body>
</html>

それはCSVではなく、Excelのバージョンによって動作が異なる可能性があることはわかっていますが、試してみる価値はあります。

これが役に立てば幸いです;-)


35
@GusDeCooL OPの最初の文の表現 "Excel用のファイルを生成する必要があります。このファイルの値の一部に複数の行が含まれています。" おそらくCSVファイルである必要はないことを示唆しています。さらに、Q&A形式は他のリーダーにも適用され、一部の読者にとっては実行可能な選択肢となる可能性があります(OPがCSVを使用する必要がある場合でも)。私はあなたの反対票を無理だと思っています(理由を説明してくれてありがとう)
dtldarek 2013年

1
実際、これは私にとって最良の選択肢でした。提案してくれてありがとう!
ジョーダングレイ

8

.CSVファイルが改行を含む二重引用符で囲まれたフィールドを持つ場合、.CSVファイルがUTF-8形式で記述されていると、Excelは.CSVファイルを正しくインポートしません。Excelは改行をCR / LFであるかのように扱い、新しい行を開始します。スプレッドシートが文字化けしています。(コンマの代わりに)セミコロンをフィールド区切り文字として使用しても、それは正しいようです。

この問題は、Windowsのメモ帳を使用して.CSVファイルを編集し、[ファイル]> [名前を付けて保存]を使用してファイルを保存し、ファイルを保存する前に、ファイルエンコーディングをUTF-8からANSIに変更することで解決できます。ファイルをANSI形式で保存すると、Windows 7 Professionalで実行されているMicrosoft Excel 2013でファイルが正しくインポートされることがわかりました。


7

カンマやタブの代わりにセミコロンを区切り文字として使用し、引用符を使用すると、値内の改行が機能するようです。

これは、Excel 2010とExcel 2000の両方で機能します。ただし、驚くべきことに、ファイルを新しいスプレッドシートとして開いた場合にのみ機能し、データインポート機能を使用して既存のスプレッドシートにインポートした場合には機能しません。


ええ、でも私はExcelでセミコロンでエンドラインを作るオプションを見つけられませんでした
GusDeCooL 2013年

実際のテキストデータの一部にセミコロンが含まれている場合はどうなりますか?これは機能しません。
htm11h 2017

4

PCでは、ASCII文字#10は値内に改行を入れたいものです。

ただし、Excelに変換したら、複数行のセルでワードラップがオンになっているか、改行が正方形のボックスとして表示されることを確認する必要があります。


3

ファイルをEXCELにインポートしようとすると、これは機能しません。

ファイル拡張子csvをEXCEL.EXEに関連付けて、csvファイルをダブルクリックしてEXCELを起動できるようにします。

ここに、いくつかのテキストの後にNewLine Charが続き、さらにいくつかのテキストが続き、文字列全体を二重引用符で囲みます。

EXCELは文字列の一部を次のセルに配置するため、CRは使用しないでください。

""text" + NL + "text""

EXCELを呼び出すと、これが表示されます。すべてを表示するには、高さのサイズを自動調整する必要がある場合があります。改行の場所はセルの幅によって異なります。

2

日付

これがBasicのコードです

CHR$(34,"2", 10,"DATE", 34)

2

私はこれを見つけました、そしてそれは私のために働いています

$delimiter = ',';
$enc1 = '"';
$enc2 = '""';

次に、物を同封する必要がある場所

$myfile = ('/path/to/myfile.csv');
//erase any previous contents
$fp = fopen($myfile, 'w+');
fwrite($fp, $enc1 .  'Column Heading 1' . $enc1 . $delimiter );
//append to new file
$fp2 = fopen($myfile, 'a');
fwrite($fp2, $enc1 .  'Column Heading 2' . $enc1 . $delimiter );

.....

fwrite($fp2, $enc1 .  'Last Column Heading' . $enc1 . $delimiter. PHP_EOL );

次に、何かを書き出す必要があるとき-「これを実行できるHTMLのような

fwrite($fp2, $enc2 .  $myhtmlstring . $enc2 . $delimiter);

新しい行で終わる . PHP_EOL

スクリプトの最後にリンクを印刷して、ユーザーがファイルをダウンロードできるようにします。

echo 'Click <a href="myfile.csv">here</a> to download file';

1

BOMを含むUTFファイルは、引用符で囲まれているフィールドでも、Excelが改行を文字どおりに処理するようにします。(Excel 2008 Macでテスト済み)

解決策は、新しい行を改行ではなくキャリッジリターン(CHR 13)にすることです。


Excel 2016では、UTF8 BOMが含まれている場合でも、CSVファイルが正しく処理されるようです。ただし、すべての違いを生んだのは「;」を使用することです。フィールド区切り文字として(これは、小数点区切り文字として '、'を持つすべてのロケールに対してExcelが行うことです)。
エール

1

これをテストしてください:それは私のために完全に機能します:次の行をxxxx.csvファイルに入れます

hola_x,="este es mi text1"&CHAR(10)&"I sigo escribiendo",hola_a

hola_y,="este es mi text2"&CHAR(10)&"I sigo escribiendo",hola_b

hola_z,="este es mi text3"&CHAR(10)&"I sigo escribiendo",hola_c

Excelで開きます。

直接開く場合もあれば、列からデータへの変換を使用する必要がある場合もあります。列の幅を広げて、テキストの折り返しボタンをクリックします。または、セルをフォーマットして折り返しテキストをアクティブにします。

そして、他の提案に感謝しますが、それらは私にとってうまくいきませんでした。私は純粋なWindows環境にいて、Unicodeやその他の面白いことをしたくありませんでした。

このようにして、CSVからExcelに数式を入れます。この作業方法には多くの用途があります。(引用符の前の=に注意してください)

pd:あなたの提案では、コードだけでなくデータのいくつかのサンプルを入れてください。


1

各行の末尾に「\ r」を置くと、実際にはExcelで改行の影響がありましたが、.csvではそれが消えて、各行が次の行に対して押しつぶされ、スペースも改行もない醜い混乱を残しました


0

これを行う方法(VB.Netを使用)は、二重引用符を表す文字であるChr(34)で新しい行でテキストを囲み、LFのすべてのCR-LF文字を置き換えることです。


0

通常、新しい行は「\ r \ n」です。私のCSVでは、「\ r」を空の値に置き換えました。JavaScriptのコードは次のとおりです。

cellValue = cellValue.replace(/\r/g, "")

MS ExcelでCSVを開くと、うまくいきました。値に複数の行がある場合、その値はExcelシートの1つのセル内にとどまります。


0

以下のためにファイルを開くだけで、構文は次のとおりです。

 ,"one\n
 two",...

重要なことは、スペースないことです、最初の「、」の後に。通常、スペースは問題なく、文字列が引用されていない場合は削除されます。しかし、それ以外の場合は厄介です。それを理解するのにしばらくかかりました。

行が\ nまたは\ c \ nで終わっているかどうかは問題ではないようです。

数式バーを展開して、セル内のテキストが実際に表示されることを確認してください(長い一日の後で私を取得してください...)

もちろん、File OpenはUTF-8を正しくサポートしません(トリックを使用する場合を除く)。

Excel>データ> 外部データの取得 >テキストから

UTF-8モードに設定できます(フォントのリストのかなり下にあります)。ただし、その場合、新しい行が機能しないようで、修正する方法がわかりません。

(30年後には、MSがこれを正しく行うことができるかもしれません。)


0

ファイルのインポート中にExcel 365で:

データ->テキスト/ CSVから->ファイルの選択>データの変換->データソース設定->データソースの選択->ソースの編集をクリック->改行ドロップダウンで、引用符内の改行を無視を選択します。

上記のテキストはポルトガル語から翻訳されているため、英語では表現が異なる場合があります。


-1

あなたは次を行うことができます"\"Value3 Line1 Value3 Line2\""。それは私がJavaでCSVファイルを生成するのに役立ちます


-2

JavaScriptを使用した興味深いアプローチを次に示します...

  String.prototype.csv = String.prototype.split.partial(/,\s*/);  

  var results = ("Mugan, Jin, Fuu").csv();                        

  console.log(results[0]=="Mugan" &&                                   
         results[1]=="Jin" &&                                     
         results[2]=="Fuu",                                       
         "The text values were split properly");                  

-3

<br/>コンテンツにHTML改行を印刷してExcelで開くと、Excelで正常に機能します


-3

キーボードショートカットのALT + Enterを使用できます。

  1. 編集するセルを選択します
  2. ダブルクリックするか、F2を押して編集モードに入ります3.Alt + Enterを押します。これにより、セルに新しい行が作成されます

それをCVSファイル生成にどのように統合しますか?
ジクジャ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.