12

私が持っている(データテーブルに保存されている)いくつかのデータをエクスポートしようとしています。これらの値の一部には、改行が含まれています。これで、Excel(2010)でファイルをインポートしようとするたびに、実際の改行ではなく、新しい行として改行が認識されます。

私は何時間も検索し、多くの解決策を見てきましたが、それを修正することができないようです。

csvファイルを出力する方法:(変数csvfileはstringbuilderです)

context.Response.Clear();
context.Response.ContentType = "text/csv";
context.Response.ContentEncoding = System.Text.Encoding.UTF8;
context.Response.AppendHeader("Content-Disposition", "attachment; filename=" + name + ".csv");
context.Response.Write(csvfile.ToString());
context.Response.End();

手動でExcelで開くと正常に表示されます。ただし、Excel 2003はファイル形式をサポートしていないため、インポートする必要があります。インポートすると、改行(フィールド内の\ n)が新しい行として表示されます。

残念ながら、私が使用している実際のデータ(すべて個人データ)の例を示すことはできませんが、それがどのようにうまくいかないかの例を示すことができます:

Header1,Header2,Header3
"value1","value2","value 3
and this is where its going wrong"

これは単純なcsvファイルであり、インポートすると、どこで問題が発生するかがわかります。デフォルトでは、二重引用符でフィールドをカプセル化します。また、デフォルトで値から先頭のスペースを削除します。

私はこの一見単純な問題に少なくとも2日間費やしましたが、私の人生では、どうすればそれを修正できるかわかりません。私はこの同じ問題について複数のトピックを見てきましたが、そこで提供されている解決策のどれもこれを修正していないようです。

4

6 に答える 6

4

これは私のために働く:

a) Response.ContentEncoding = System.Text.Encoding.UTF8Excel で UTF-8 ファイルを正しく開くには設定が不十分です。代わりに、Excel ファイルのバイト オーダー マーク (BOM) ヘッダーを手動で記述する必要があります。

if (UseExcel2003Compatibility)
    {
        // write UTF-16 BOM, even though we export as utf-8. Wrong but *I think* the only thing Excel 2003 understands
        response.Write('\uFEFF');
    }
    else
    {
        // use the correct UTF-8 bom. Works in Excel 2008 and should be compatible to all other editors
        // capable of reading UTF-8 files
        byte[] bom = new byte[3];
        bom[0] = 0xEF;
        bom[1] = 0xBB;
        bom[2] = 0xBF;
        response.BinaryWrite(bom);
    }

b) オクテット ストリームとして送信し、拡張子 .csv のファイル名を使用し、HTTP 仕様で要求されているようにファイル名を引用符で囲みます。

response.ContentType = "application/octet-stream";
response.AppendHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");

c) すべてのフィールドに二重引用符を使用する

確認したところ、Excel は改行のあるフィールドを含め、このようにダウンロードしたファイルを正しく開きます。

ただし、既定の区切り記号が "," と異なるすべてのシステムでは、Excel はそのような CSV を正しく開くことができないことに注意してください。たとえば、ユーザーがドイツの地域設定に設定された Windows システムで Excel を実行している場合、Excel は区切り文字としてコンマではなくセミコロンを想定しているため、ファイルを正しく開きません。それについてできることは何もないと思います。

于 2011-05-10T15:40:30.600 に答える
2

フィールドが適切に二重引用符で囲まれている限り、CSV ファイルに改行を入れることができます。ここでの問題は、Excel がレコードを正しくインポートするようになっているようです。

これは、サイトで以前に質問されており、いくつかの可能な解決策があります。

  • 出力ファイルのエンコーディングを ASCII または UTF-8 に設定します。質問ではUTF-8に設定しているので、次はASCIIにしてみてください。(リンク)

  • ファイル名を に変更すると.csv、Excel がだましてファイルを正しくインポートする可能性があります (リンク)

于 2011-05-10T15:08:36.400 に答える
0

私も同じ問題を抱えていました。このブログのセクション「適切な書式設定で Excel にエクスポート:」を参照しているときに、解決策にたどり着きました。

コードを次のように変更しました。

string brstyle = @"<style>br { mso-data-placement:same-cell; }</style>";

Response.Write(brstyle);

Response.Write(stringWriter.ToString());

それは私のために働いた。改行を含むテキストは、改行ごとに新しいセル (行) ではなく、単一のセルに表示されるようになりました。

于 2012-05-30T16:18:27.147 に答える
0

改行は新しいレコードを示すため、CSV フィールドに改行を入れることはできないと思います。文字列に追加する前に、フィールド値のすべての改行を置き換えることができますか? または、Excel ファイルを作成することもできます。フィールドに改行を許可する必要があります。

于 2011-05-10T15:02:21.110 に答える
0

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

解決策は、新しい行を改行ではなく改行 (CHR 13) にすることです。

于 2011-12-09T08:11:42.323 に答える