web-dev-qa-db-ja.com

Excel 2010でファイルを開くときに、CSVファイルに二重引用符とセミコロンを保存する方法は?

サーバーからCSVファイルを受け取ります。その中のデータはセミコロンで区切られ、UTF-8形式です。たとえば、受け取るデータは次のとおりです。

 "NL 我喜"" mutilple""我喜"

Excel 2010で初めて開くと、次のように表示されます。

NL 我喜" mutilple"我喜

しかし、このファイルを変更して(上記のテキストから文字Lを削除しただけです)、Excelを使用してCSVとして保存し、2回目に開くと、次のようになります。

N inbetween我喜(二重引用符なし)

変更後のデータを二重引用符で保存してください。

ありがとう

4
NJMR

私はVBAマクロを書きました、そしてロジックは:

  1. データセルにdouble quoteがある場合、二重引用符はduplicateです。
  2. データセルにcommanまたはdouble quoteが存在する場合は、データ全体を二重引用符で囲みます囲みます

例:

  • ステップ1:NL 我喜" mutilple"我喜NL 我喜"" mutilple""我喜になります
  • ステップ2:ステップ2の後、データは"NL 我喜"" mutilple""我喜"になります

このコードは上記の説明と一致します

tempString = Sheets(1).Cells(lRow, lCol).Text                   ' Get the data from cell.
tempString = Replace(tempString, Chr(34), Chr(34) & Chr(34))    ' If there is double quote, then duplicate it.
CurrTextStr = tempString
pos1 = InStr(tempString, Chr(34))                               ' Get the position of double quote. If not present, it will be 0.
pos2 = InStr(tempString, ";")                                   ' Get the position of semicolon. If not present, it will be 0.
If (pos1 <> 0 Or pos2 <> 0) Then                                ' If there is any double quote or semicolon, then the whole data
    CurrTextStr = Chr(34) & tempString & Chr(34)                '       should be enclosed with double quotes.
End If
oAdoS.WriteText (";" & CurrTextStr)
0
NJMR

Excel 2016を使ってこれを試しました

Excelを開きました-[ファイル]を選択し、[CSV]ファイルを開いて区切り文字を選択し、区切り文字としてセミコロンを選択し、テキスト区切り文字として "を選択しました。

これは期待どおりにインポートされ、セルを編集してLを削除できます

[保存]をクリックすると、他の回答で見つけて説明したようにファイルが破損します。

ただし、コメントの1つとして[名前を付けて保存]と[UNICODE]を選択します。ファイルはUTF-8をテキスト区切り文字として「」が付いたTAB区切りファイルとして保存されています。これを試しましたか?これは受け入れられませんか?

SAVEASを選択し、UTF-8カンマ区切りを選択した場合、UTF-8カンマ区切りで保存されました。セミコロンを区切り文字として保持する方法がわかりませんでした。ただし、[名前を付けて保存]オプションを使用して、お使いのバージョンのExcelで使用可能な形式の1つが許容できるかどうかを確認してください。

セミコロンを保持する必要がある場合は、保存されたファイルを後処理して、引用符を理解するテキスト置換スクリプトを作成できます(引用符内が置換されないように)。これを行うために、VBScriptまたはPowershellスクリプトを作成できます。すべてのセルをコンマで区切って1つのセルに連結するVBAマクロを使用できます。

その最終的な変換への1行のPowershell依存コマンドは次のようになります(CMDプロンプトから実行)

powershell -command "& import-csv 'CSVUTF.CSV'| export-csv 'PSCSVUTF.CSV' -Encoding 'UTF8' -Delimiter ';' -notype"

ファイルに列名のヘッダー行がない場合は、-headerパラメーターを指定する必要があり、出力ファイルはヘッダー行になります。

2
Ross

これは何年も前にStackOverflowで回答されたようです: https://stackoverflow.com/questions/4221176/Excel-to-csv-with-utf8-encoding

基本的に、ExcelはASCIIエンコーディングのみを使用してCSVを保存します。回避策はOpenOffice、Googleドキュメントを使用するか、UTF8エンコードされたテキストとして保存することです。それが操作で使用している他のプロセスにどのように影響するかわかりませんその後ファイル。

1
gns100