Excel用のファイルを生成する必要があります。このファイルの値の一部には複数の行が含まれています。
英語以外のテキストも含まれているため、ファイルはUnicodeである必要があります。
生成するファイルは次のようになります(UTF8では、英語以外のテキストが混在し、多くの行があります)
Header1,Header2,Header3
Value1,Value2,"Value3 Line1
Value3 Line2"
複数行の値は二重引用符で囲まれ、通常の毎日の改行が含まれていることに注意してください。
私がウェブ上で見つけたものによると、これは動作するはずですが、少なくともExcel 2007とUTF8ファイルを勝ち取らないと、Excelは3行目を最初のデータ行の2行目ではなく2行目のデータ行として扱います。
これは顧客のマシンで実行する必要があり、Excelのバージョンを制御できないため、Excel 2000以降で動作するソリューションが必要です。
ありがとう
編集:Excel用(Unicode、タブ区切り、フィールド内の改行なし)と他の世界用(UTF8、標準CSV)の2つのCSVオプションを使用して、問題を「解決」しました。
私が探していたものではありませんが、少なくともそれは動作します(これまで)
スペース文字がデータの一部である場合にのみ、フィールドの先頭にスペース文字が必要です。 Excelは先頭のスペースを削除しません。見出しとデータフィールドに不要なスペースができます。さらに悪いことに、3番目の列の改行を「保護」する必要がある"
は、フィールドの先頭にないため無視されます。
ファイルに非ASCII文字(UTF-8でエンコードされた)がある場合、ファイルの先頭にUTF-8 BOM(3バイト、hex EF BB BF
)が必要です。そうしないと、Excelはutf-8ではなく、ロケールのデフォルトエンコーディング(cp1252など)に従ってデータを解釈し、非ASCII文字は破棄されます。
次のコメントはExcel 2003、2007、2013に適用されます。 Excel 2000ではテストされていません
Windowsエクスプローラーでファイル名をダブルクリックしてファイルを開くと、すべて正常に機能します。
Excel内から開くと、結果は異なります。
オプションが含まれます:
多くの調整を行った後、Linuxでファイルを生成し、Windows + Excelで読み取りを行う構成を以下に示します。
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);
最近、同様の問題が発生しました。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で異なる動作をする可能性がありますが、試してみる価値があると思います。
これが役立つことを願っています;-)
.CSVファイルに改行を含む二重引用符で囲まれたフィールドがある場合、.CSVファイルがUTF-8形式で記述されていると、Excelは.CSVファイルを正しくインポートしないことに注意してください。 Excelは、改行をCR/LFとして扱い、改行を開始します。スプレッドシートが文字化けしています。 (コンマの代わりに)セミコロンがフィールド区切り文字として使用されている場合でも、それは真実のようです。
この問題は、Windowsのメモ帳を使用して.CSVファイルを編集し、ファイル>名前を付けて保存...を使用してファイルを保存し、ファイルを保存する前にファイルエンコーディングをUTF-8からANSIに変更することで解決できます。ファイルをANSI形式で保存すると、Windows 7 Professionalで実行されているMicrosoft Excel 2013がファイルを適切にインポートすることがわかります。
値内の改行は、コンマやタブの代わりにセミコロンを区切り文字として使用し、引用符を使用すると機能するようです。
これは、Excel 2010とExcel 2000の両方で機能します。しかし、驚くべきことに、ファイルを新しいスプレッドシートとして開いたときにのみ機能し、データインポート機能を使用して既存のスプレッドシートにインポートするときは機能しません。
PCでは、ASCII文字#10は、値内に改行を入れたいものです。
ただし、Excelに入力したら、複数行のセルのワードラップがオンになっているか、改行が正方形のボックスとして表示されることを確認する必要があります。
ファイルをExcelにインポートしようとすると、これは機能しません。
ファイル拡張子csvをExcel.EXEに関連付けて、csvファイルをダブルクリックしてExcelを起動できるようにします。
ここでは、テキストの後にNewLine Charが続き、さらにテキストが続き、文字列全体を二重引用符で囲みます。
Excelは文字列の一部を次のセルに配置するため、CRは使用しないでください。
""text" + NL + "text""
Excelを起動すると、これが表示されます。すべてを表示するには、高さの自動サイズ調整が必要になる場合があります。改行位置は、セルの幅によって異なります。
2
日付
これが基本のコードです
CHR$(34,"2", 10,"DATE", 34)
私はこれを見つけて、それは私のために働いた
$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';
これをテストしてください:それは私のために完全に動作します: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環境にいるので、ユニコードや他の面白いことで遊びたくありませんでした。
この方法で、csvからExcelに式を入力します。この作業方法には多くの用途があります。 (引用符の前の=に注意してください)
pd:あなたの提案には、コードだけでなくデータのサンプルをいくつか入れてください。
BOMを含むUTFファイルは、そのフィールドが引用符で囲まれている場合でも、Excelが改行を文字通り処理するようにします。 (Excel 2008 Macのテスト済み)
解決策は、改行を改行ではなくキャリッジリターン(CHR 13)にすることです。
各行の最後に「\ r」を置くと、実際にはExcelで改行の効果がありましたが、.csvでは消失し、各行がスペースや改行なしで次の行に押しつぶされたい混乱を残しました
それを行う方法(VB.Netを使用)は、二重引用符を表すcharであるChr(34)でテキストを改行で囲み、LFのすべてのCR-LF文字を置き換えます。
通常、新しい行は「\ r\n」です。 CSVでは、「\ r」を空の値に置き換えました。 Javascriptのコードは次のとおりです。
cellValue = cellValue.replace(/\r/g, "")
CSVをMS Excelで開くと、うまくいきました。値に複数の行がある場合、Excelシートの1つの単一セル内に留まります。
ファイルを開くの場合のみ、構文は
,"one\n
two",...
重要なことは、最初の「、」の後にスペースなしがあることです。通常、スペースは問題なく、文字列が引用符で囲まれていない場合は削除されます。しかし、そうでなければ厄介です。それを理解するためにしばらくかかりました。
行が\ nまたは\ c\nで終了するかどうかは問題ではないようです。
数式バーを展開して、セル内のテキストを実際に表示できることを確認してください(長い一日を過ごした後...)
もちろん、File OpenはUTF-8を適切にサポートしません(トリックを使用しない限り)。
Excel>データ> 外部データの取得>テキストから
TF-8モードに設定できます(フォントのリストの下にあります)。ただし、その場合、新しい行は機能しないようで、それを修正する方法はわかりません。
(30年後にMSがこのようなことを正しくするようになるかもしれません。)