web-dev-qa-db-ja.com

UTF-8エンコーディングのExcelからCSVへの変換

インポートファイルとして使用するには、CSVファイルに変換する必要があるスペイン語の文字(チルダなど)を含むExcelファイルがあります。ただし、[名前を付けてCSVに保存]を実行すると、ASCII文字ではない「特殊な」スペイン語文字が破損します。また、これは、左右の引用符と、MacでExcelファイルを作成している元のユーザーから来たように見える長いダッシュを使用しているようです。

CSVは単なるテキストファイルなので、UTF8エンコーディングを処理できると確信しています。したがって、これはExcelの制限であると思いますが、ExcelからCSVに変換し、非ASCII文字を保持する方法を探しています。無傷。

561
Jeff Treuting

簡単な回避策はGoogle Spreadsheetを使用することです。貼り付け(複雑な式がある場合にのみ値を入力)またはシートをインポートしてからCSVをダウンロードします。私はいくつかのキャラクターを試してみましたが、それはかなりうまくいきました。

注:Googleシートにはインポート時の制限があります。 ここ を参照してください。

注:Googleスプレッドシートでは機密データに注意してください。

編集: もう1つの選択肢 - 基本的にVBマクロまたはアドインを使用してUTF-8として保存する私はこれらの解決策のどれも試していませんが、それらは合理的に聞こえます。

384
nevets1219

OpenOffice の表計算アプリケーションCalcは、CSVデータの処理に非常に優れています。

[名前を付けて保存...]ダイアログで、[フォーマットオプション]をクリックしてCSVのさまざまなエンコードを取得します。 LibreOffice は同じように動作します。

calc save dialog

122
aendrew
  1. Excelシートを "Unicode Text(.txt)"として保存します。良いニュースは、すべての国際文字がUTF16であることです(注、UTF8ではありません)。ただし、新しい「* .txt」ファイルはタブ区切りで、カンマ区切りではないため、本当のCSVファイルではありません。

  2. (オプション)インポートにTAB区切りファイルを使用できない場合を除き、好みのテキストエディタを使用してTAB文字をカンマ "、"に置き換えます。

  3. ターゲットアプリケーションに* .txtファイルをインポートします。それがUTF16フォーマットを受け入れることができることを確認してください。

UTF-16がBMP以外のコードポイントをサポートするように正しく実装されていれば、情報を失うことなくUTF-16ファイルをUTF-8に変換できます。好きな方法を見つけるためにあなたに任せます。

この手順を使用して、ExcelからMoodleにデータをインポートします。

105
elomage

私はこれが古い質問であることを知っています、しかし私はOPと同じ問題に苦しんでいる間この質問にたどり着きました。

提供されたソリューションのどれも実行可能な選択肢を見つけられなかったので、私はExcelを使用してこれをする方法があるかどうか発見することに着手しました。

幸い、xlsx形式からcsv形式への保存時に(私の場合)失われた文字の問題が発生することがわかりました。 xlsxファイルを最初にxlsに、次にcsvに保存してみました。それは実際にうまくいきました。

試してみて、それがあなたのために機能するかどうかを確認してください。がんばろう。

41
Eric

Unixでは iconv commandを使用できます(Windowsでは libiconv としても使用できます)。

コマンドラインにExcelでCSVとして保存した後:

iconv -f cp1250 -t utf-8 file-encoded-cp1250.csv > file-encoded-utf8.csv

(cp1250をあなたのエンコーディングに置き換えるのを忘れないでください)。

GoogleDocsにインポートできない郵便番号データベースのような大きなファイル(400,000セルの制限)には、すばやくうまく機能します。

35
pmilewski

これを行う唯一の「簡単な方法」は次のとおりです。まず、表示される内容とExcelの.csvファイルに表示されない内容との間に違いがあることを理解してください。

(1) 情報があるExcelファイルを開く(.xls、.xlsx)

(2) Excelでは、ファイルの種類として「CSV(Comma Delimited)(* .csv)」を選択し、その種類として保存します。

(3) NOTEPAD([スタート]メニューの[プログラム]、[アクセサリ]の順)で、保存した.csvファイルをメモ帳で開きます。

(4) それから - >名前を付けて保存...を選択し、 "名前を付けて保存"ボックスの一番下に "エンコーディング"というラベルの付いた選択ボックスがあります。 UTF-8を選択してください(ANSIを使用しないでください。アクセントをすべて失うなど)。 UTF-8を選択したら、元のファイルとは少し異なるファイル名でファイルを保存します。

このファイルはUTF-8であり、すべての文字とアクセントを保持しており、例えばMySQLや他のデータベースプログラムにインポートすることができます。

この答えは このフォーラムの から取られます。

24
Nick

もう1つ便利なことがわかりました: " Numbers "はCSVとして保存するときにencoding-settingsを許可します。

22
leander

あなたはサードパーティ製のソフトウェアなしで現代のWindowsマシンでこれを行うことができます。この方法は信頼性が高く、引用符付きのカンマ、引用符付きのタブ文字、CJK文字などを含むデータを処理します。

1.エクセルから保存

Excelでは、タイプUnicode Text (*.txt)を使用してデータをfile.txtに保存します。

2. PowerShellを起動します

スタートメニューからpowershellを実行します。

3. PowerShellにファイルをロードします

$data = Import-Csv C:\path\to\file.txt -Delimiter "`t" -Encoding BigEndianUnicode

4.データをCSVとして保存します

$data | Export-Csv file.csv -Encoding UTF8 -NoTypeInformation
22
Don Cruickshank

"nevets1219"はGoogleドキュメントについては正しいのですが、単にファイルを "インポート"してもUTF-8に変換されないことがよくあります。

しかし、CSVを既存のGoogleスプレッドシートにインポートすると、UTF-8に変換されます。

ここにレシピがあります:

  • メインのDocs(またはDrive)画面で、[作成]ボタンをクリックして[スプレッドシート]を選択します。
  • 「ファイル」メニューから「インポート」を選択します
  • 「ファイルを選択」をクリック
  • [スプレッドシートを置き換える]を選択します
  • 区切り文字として使用している文字を選択してください
  • 「インポート」をクリック
  • [ファイル]メニューから[名前を付けてダウンロード] - > [CSV](現在のシート)を選択します。

結果のファイルはUTF-8になります

14
RedYeti

Notepad ++を使う

これにより、Excelによって保存された破損したCSVファイルが修正され、正しいエンコーディングで保存されます。

  • ExcelからCSVをエクスポート
  • Notepad ++にロードする
  • エンコードを修正
  • 保存する

ExcelはCP-1252/Windows-1252に保存します。 CSVファイルをメモ帳++で開きます。選択する

Encoding > Character Sets > Western European > Windows-1252

それから

Encoding > Convert to UTF-8
File > Save

最初にNotepad ++にエンコーディング、 そして convertを伝えます。これらの他の答えのいくつかは最初に適切なエンコーディングを設定せずに変換していて、ファイルをさらに荒らしています。彼らはであるべきものをに変えるでしょう。あなたのキャラクターがCP-1252に収まらない場合は、CSVとして保存されたときにすでに失われています。そのために別の答えを使ってください。

8
Chloe

完全にプログラムによる(または少なくともサーバー側の)ソリューションを探している人のために、私はcatdocのxls2csvツールを使用することで大成功を収めました。

Catdocをインストールしてください。

apt-get install catdoc

変換を行います。

xls2csv -d utf-8 file.xls > file-utf-8.csv 

これは非常に速いです。

-d utf-8フラグを含めることが重要です。そうしないと、デフォルトのcp1252エンコーディングで出力がエンコードされ、情報を失う危険性があります。

xls2csv.xlsファイルでのみ機能し、.xlsxファイルでは機能しません。

8
mpowered

Powershellを使うことについてはどうですか。

Get-Content 'C:\my.csv' | Out-File 'C:\my_utf8.csv' -Encoding UTF8
7
Michael Schau

最も簡単な方法: Open OfficeやGoogleドキュメントは必要ありません

  1. ファイルを「Unicodeテキストファイル」として保存します。
  2. 今、あなたはユニコードテキストファイルを持っています
  3. 「utf-8」または他の必要なコードページを選択して、「メモ帳」および「名前を付けて保存」で開きます。
  4. ファイル拡張子を "txt"から "csv"に変更します。これはタブ区切りのUTF-8 csvファイルになります。
  5. コンマ - 区切りファイルが必要な場合は、名前を変更したばかりのcsvファイルを開き、すべてのタブをコンマで置き換えます。 Win 10のメモ帳でこれを行うには、1つのタブフィールドを選択してからCtrl+Hをクリックします。表示されるウィンドウで、[置換後の文字列]フィールドにカンマ,を入力し、[すべて置換]をクリックします。ファイルを保存してください。結果は、カンマ区切りのUTF-8 csvファイルになります。

とにかくMS-Officeで開かないでください。これでタブ区切りのCSVファイルができました。または、ステップ番号5を適用した場合はカンマ区切りのもの。

6
Solivan

おかしなことに、180MBのスプレッドシートをUTF8のCSVファイルに保存する最も簡単な方法は、セルをExcelに選択してコピーし、クリップボードの内容をSublimeTextに貼り付けることでした。

5
oscaroscar

Excel 2016では、UTF-8形式専用のCSVエクスポートオプションがあります。

4
  1. Xlsファイル(Excelファイル)をUnicodeテキストとして保存=>ファイルはテキスト形式(.txt)で保存されます

  2. 形式を.txtから.csvに変更します(ファイルの名前をXYX.txtからXYX.csvに変更します)。

3
Mena

私はMac Excel上でこの問題に対するVBAの解決策を見つけることができませんでした。 UTF-8テキストを出力する方法が全くないようです。

それで私はついにVBAをあきらめなければならなくて、弾丸を噛んで、そしてAppleScriptを学びました。思ったほど悪くはありませんでした。

解決策はここで説明されています: http://talesoftech.blogspot.com/2011/05/Excel-on-mac-goodbye-vba-hello.html

3
anroy

私も同じ問題に遭遇しましたが、これに対する簡単な解決策があります。

  1. Excel 2016以降でxlsxファイルを開きます。
  2. [名前を付けて保存]でこのオプションを選択します。 "(CSV UTF-8(Comma Delimited)*。csv)"

それは完全に動作し、任意のソフトウェアにインポートすることができますcsvファイルが生成されます。私は私のSQLITEデータベースにこのcsvファイルをインポートしました、そして、それはそのままですべてのUnicode文字で完全に動作します。

3
Krish

簡単な方法:Open Officeをダウンロードし( here )、スプレッドシートをロードしてExcelファイル(.xlsまたは.xlsx)を開きます。それをテキストCSVファイルとして保存すると、現在のフォーマットを維持するか、.ODFフォーマットとして保存するかを尋ねるウィンドウが開きます。 「現在の形式を維持する」を選択し、新しいウィンドウで、ファイルが書かれている言語に応じて、自分に最適なオプションを選択します。スペイン語の場合は、西ヨーロッパ(Windows-1252/ WinLatin 1)を選択してください。ファイルは正常に動作します。 Unicode(UTF-8)を選択した場合、スペイン語の文字では機能しません。

3
Yessus

Windows環境を想定して、Excelで通常どおりにファイルを保存して操作しますが、保存したExcelファイルをGnome Gnumeric(無料)で開きます。 Gnome GnumericのスプレッドシートをCSVとして保存します。これは私にとってはとにかくUTF-8 CSVとして保存します。

3
spring_chicken

Excelは通常、csvファイルをutf8ではなくANSIエンコーディングとして保存します。

ファイルを修正する1つの方法は、メモ帳またはメモ帳++を使用することです。

  1. メモ帳またはメモ帳++で.csvを開きます。
  2. 内容をコンピュータのクリップボードにコピーします。
  3. ファイルから内容を削除します。
  4. ファイルのエンコーディングをutf8に変更します。
  5. クリップボードから内容を貼り付けます。
  6. ファイルを保存してください。
2
Jason Williams

ワークシートをUTF-8でエクスポートできる小さなPythonスクリプトを書きました。

最初のパラメータとしてExcelファイルを指定し、その後にエクスポートするシートを指定するだけです。シートを指定しないと、スクリプトはExcelファイルにあるすべてのワークシートをエクスポートします。

#!/usr/bin/env python

# export data sheets from xlsx to csv

from openpyxl import load_workbook
import csv
from os import sys

reload(sys)
sys.setdefaultencoding('utf-8')

def get_all_sheets(Excel_file):
    sheets = []
    workbook = load_workbook(Excel_file,use_iterators=True,data_only=True)
    all_worksheets = workbook.get_sheet_names()
    for worksheet_name in all_worksheets:
        sheets.append(worksheet_name)
    return sheets

def csv_from_Excel(excel_file, sheets):
    workbook = load_workbook(Excel_file,use_iterators=True,data_only=True)
    for worksheet_name in sheets:
        print("Export " + worksheet_name + " ...")

        try:
            worksheet = workbook.get_sheet_by_name(worksheet_name)
        except KeyError:
            print("Could not find " + worksheet_name)
            sys.exit(1)

        your_csv_file = open(''.join([worksheet_name,'.csv']), 'wb')
        wr = csv.writer(your_csv_file, quoting=csv.QUOTE_ALL)
        for row in worksheet.iter_rows():
            lrow = []
            for cell in row:
                lrow.append(cell.value)
            wr.writerow(lrow)
        print(" ... done")
    your_csv_file.close()

if not 2 <= len(sys.argv) <= 3:
    print("Call with " + sys.argv[0] + " <xlxs file> [comma separated list of sheets to export]")
    sys.exit(1)
else:
    sheets = []
    if len(sys.argv) == 3:
        sheets = list(sys.argv[2].split(','))
    else:
        sheets = get_all_sheets(sys.argv[1])
    assert(sheets != None and len(sheets) > 0)
    csv_from_Excel(sys.argv[1], sheets)
2
Julian

エンコード - > Ansiに変換はANSI/UNICODEでエンコードします。 Utf8はUnicodeのサブセットです。おそらくANSIでは正しくエンコードされますが、ここではUTF8、@ SequenceDigitaleについて話しています。

Csv(カンマ区切り)としてエクスポートしてから、そのcsvをNotepad ++(無料)で開き、[エンコード]> [UTF8に変換]などのより速い方法があります。ただし、ファイルごとにこれを実行する必要がある場合に限ります。頻繁に変更してエクスポートする必要がある場合は、LibreOfficeまたはGDocsソリューションが最善です。

1
Lucas

もう1つの解決策は、winwordでファイルを開き、txtとして保存してからExcelで再度開くと、ISAが動作することです。

1
Essam Altantawi

Microsoft Excelには、Unicodeエンコードを使用してスプレッドシートをエクスポートするオプションがあります。次のスクリーンショットを参照してください。

enter image description here

1
vladaman

保存ダイアログ>ツールボタン> Webオプション>エンコードタブ

1
Elia Weiss

"nevets1219"への2番目のオプションは、Notepad ++であなたのCSVファイルを開いて、ANSIに変換することです。

トップメニューから選択してください:エンコーディング - > Ansiに変換

同じ問題に遭遇し、この記事をグーグルしました。上記のどれも私のために働きませんでした。ついに私は自分のUnicodeの.xlsを.xmlに変換し([名前を付けて保存... XML Spreadsheet 2003]を選択)、正しい文字を生成しました。それから私はxmlを解析するためのコードを書き、私の使用のために内容を抽出しました。

1

メモ帳++で.csvを開いてください。あなたがあなたのエンコーディングが良いと思うなら(あなたは彼らがそうであるべきであるのですべての文字を見る)エンコーディングを押してください、そして次にANSIに変換してください - あなたの現在のエンコーディングが何であるか調べてください

1
Marius Gri

私は同じ問題を抱えていて this アドインに出くわします、そしてそれはそれが言及されているExcel 2007と2010の横のExcel 2013で完全にうまく働きます。

0
academic.user

私は自分のMac上でこのプロセスを自動化する必要がありました。私はもともとmpoweredが示唆しているようにcatdoc/xls2csvを使ってみましたが、xls2csvはドキュメントの元のエンコーディングを検出するのに苦労し、すべてのドキュメントが同じではなかったです。私がしたのは、デフォルトのWebページ出力エンコーディングをUTF-8に設定してから、そのファイルをAppleのAutomatorに渡し、Convert Format of Excel Filesアクションを適用してWeb Page (HTML)に変換することでした。それからPHPDOMDocument、そしてXPathを使って、私はドキュメントをクエリし、それらをCSVにフォーマットしました。

これはPHPスクリプト(process.php)です。

<?php
$pi = pathinfo($argv[1]);
$file = $pi['dirname'] . '/' . $pi['filename'] . '.csv';
$fp = fopen($file,'w+');
$doc = new DOMDocument;
$doc->loadHTMLFile($argv[1]);
$xpath = new DOMXPath($doc);
$table = [];
foreach($xpath->query('//tr') as $row){
    $_r = [];
    foreach($xpath->query('td',$row) as $col){
        $_r[] = trim($col->textContent);
    }
    fputcsv($fp,$_r);
}
fclose($fp);
?>

これは、HTMLドキュメントをcsvに変換するために使用したシェルコマンドです。

find . -name '*.htm' | xargs -I{} php ./process.php {}

これは本当にこれをやり直す方法ですが、私が見つけた最も信頼できる方法でした。

0
Kyle