ExcelからCSVへのUTF8エンコーディング[終了]


607

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

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


15
投稿する前にその質問を見ましたが、それはすでにUTF8 CSVがあり、それをExcelで開くことに関するものです。
Jeff Treuting、

7
以下の答えはうまくいくようですが、それらは単に回避策です。誰もがExcelでこれを行う方法を知っていますか?
NielW 2014年

2
私は2セントを落としました:多くの試行錯誤の後、VBA関数などを使用しようとしました(さまざまな理由でExcel 97を使用しています)...単に「CSV(MSDOS)に保存」 "形式は私のためにこの問題を解決しました。私の場合、Citrix webinar(GotoWebinar)CSVデータは、最後に一部のApexコードを破壊する文字で終了します。「CSV(MSDOS)」に保存すると、CSVエクスポートをNotepad ++にロードしてUTF-に貼り付けることが(以前は)解決されます。 8空のファイルと再保存します。:-P :-)
AMM

2
これは非常に厄介なExcelの制限です。私はこれについてのuservoice機能リクエストを開きました:excel.uservoice.com/forums/…、自由に投票して実現させてください
Doron Yaacoby

7
Excelのユーザーボイスによると、Microsoftは.CSV先月のためのUTF-8での作業を開始しexcel.uservoice.com/forums/...
モロコ

回答:


405

簡単な回避策は、Googleスプレッドシートを使用することです。貼り付ける(複雑な数式がある場合のみ値)またはシートをインポートしてCSVをダウンロードします。私はいくつかの文字を試してみましたが、かなりうまくいきました。

注:Googleスプレッドシートにはインポート時の制限があります。こちらをご覧ください

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

編集:別の代替手段 -基本的に、VBマクロまたはアドインを使用して、UTF8として強制的に保存します。私はこれらの解決策のいずれも試していませんが、妥当なように思えます。


63
たぶん、Joel Slotsky(元ExcelのPM)は、絶対にすべてのソフトウェア開発者についての彼の10年前の投稿を彼らに送ることができます。
2013年

8
通常のWindowsのメモ帳では(名前を付けて保存を使用し、エンコードオプションでutf-8を選択して)うまくいきました。自分のマシンで管理者権限を持たないユーザーが実行する必要があるため、追加のソフトウェアをインストールする必要がないので、私にとってはこれが私にとって最良のアプローチです。
2013年

9
煩わしさのないOpenOffice JustWorks(tm)-含めるべきだと思います
Rbjz

9
ああ。震えただけだった。Excelファイルに200,000行ある場合はどうなりますか?または、Excelスプレッドシートに含めたくない機密データが含まれていますか?必要に応じて、Openoffice / Libreofficeを使用してください。
Seb

2
ファイルサイズが大きい場合はどうなりますか?私が正しく覚えているなら、Goolgeシートには75M前後のサイズ制限があります。ファイルが700Mある
News_is_Selection_Bias

133

OpenOfficeを見つけましたのスプレッドシートアプリケーションであるCalcは、CSVデータの処理に非常に優れている。

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

calc save dialog


私はこれがうまくいくと確信しています、私はOpenOfficeをまだ持っていないので、Google Docsは私の状況でより簡単でした。しかし、提案をありがとう
ジェフトロイティング

19
OpenOffice Calcには、「CSV」ファイル(フィールドセパレーター、エンコーディングなど)を開いて保存するときに、GoogleドキュメントとExcelの両方よりも優れたオプションがあります。また、Googleドキュメントは現在、スプレッドシートあたり40万セルの制限に悩まされていますが、OpenOffice Calcにはありません。
クリスチャンダベン2012

3
LibreOfficeも機能することを確認できます。Excelには残念ながら欠けている、エクスポート時の文字エンコーディングオプションが提供されています。
Rupert Rawnsley 2014年

1
これは、機密データを扱うユーザーにとって優れたオプションです。OpenOfficeスイートは、マシンがロックダウンされている人のためのポータブルインストールにすることができます。
Nathan

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

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

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

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

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


5
ついにうまくいった何か!上記のExcelオプションをExcel 2013で試したが成功しなかった。パースしたときに分割文字として\ tを使用するように切り替えたところ、完全に機能しました!
マティアスリンドバーグ

1
MySQLにインポートするには、XLSをCSVとしてエクスポートする必要があります。Excel 2003を使用して「Unicode Text(.txt)」の形式でエクスポートし、Notepad ++を使用してTABをに置き換え;、txtファイルをデフォルトの「ファイルの文字セット:utf-8」でphpmyadminにインポートしました。形式は「CSV」 LOAD DATAの使用」を参照してください。すべてのエンコーディングが正しく転送されました。
カイノアック2014年

3
ありがとうございました。意味あり。なぜMSが標準としてUTFを使用することを拒否するのか。
オスカーリムカ2015

4
@OskarLimka:「UTF」とは、UTF-8とUTF-16のどちらですか?マイクロソフトがUTF-16をかなり使用しているためです。
Flimm 2016年

7
「良い知らせは、すべての国際文字がUTF16である(UTF8ではないことに注意)ことです。」完全なナンセンス。UTF-8とUTF-16は、Unicodeコードポイントのセット全体をエンコードする2つの方法です。

43

私はこれが古い質問であることを知っていますが、OPと同じ問題に取り組んでいるときに偶然この質問に出くわしました。

提供されているソリューションのいずれも実行可能なオプションが見つからなかったので、Excelだけを使用してこれを行う方法があるかどうかを発見することにしました。

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

試してみて、うまくいくかどうか確認してください。幸運を。


3
私にとって、Excel for Mac 2011では、これは機能しますが、を選択しWindows comma separated (CSV)た場合のみです。デフォルトまたはDOS CSVオプションを使用すると機能しません。どちらのオプションも、アクセント付き文字をランダムなジャンク文字に置き換えます。含む文字を試験しéèâそれは本当のUTF8だけど文字が符号化されません場合は...知ってはいけません。
user56reinstatemonica8 2013

12
クイック確認- (2011 for MacのExcelなど)に、この方法で生成されたファイルはありません UTF8のCSVを生成し、しかし、彼らは少なくとも正しい文字を含めることができるのでできることをプロデュースCSVを行う痛みを伴わずに、テキストエディタでUTF8に変換します、これはExcelがデフォルトで吐き出す馬鹿げた破損したジャンクからの大きな一歩です。
user56reinstatemonica8 2013

はい、同意しました。これは私にとっても機能し(Excel Mac 2011)、それは本当により多くの投票に値します。
cbmanica 2013

1
これは私にはうまくいきませんでした(Excel 2007を使用)。私のファイルには2つの非ASCII文字が含まれており、そのうちの1つはこの方法で保存され、もう1つは保存されませんでした。
EM0

1
結果のCSVファイルは、質問されたUTF-8ではなく、UTF-16であることに注意してください。
Flimm 2016年

38

Unixではiconvコマンドを使用できます(Windowsではlibiconvとしても利用可能))。

コマンドラインでExcelの下にCSVとして保存した後、次のように入力します。

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

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

GoogleDocsにインポートできない(400.000セルの制限)郵便番号データベースのような大きなファイルに高速で優れた働きをします。


5
1250でエンコードできない文字がコンテンツに含まれている場合、これは役に立ちません。Excelで "Unicode .txt"としてエクスポートし、iconvを使用してUtf16から変換することをお勧めします。「\ t」から「、」に変換するためにa sedまたはor trを実行することもできます
Sebastian

5
Excelのデフォルトのエンコーディングは、CSVまたはMS-DOS CSVとして保存する場合はCP858、Windows CSVとして保存する場合はWindows 1252です(Excel for Mac 2011でテスト済み)。
クレイメーション2014

4
Excelが.csv形式で保存するときに、コードポイントあたり1バイトのエンコードでエンコードできないUnicodeコードポイントに関して情報を失うため、これは役に立たないことに完全に同意します。
Flimm 2016年

26

これは、サードパーティのソフトウェアがなくても、最新のWindowsマシンで実行できます。この方法は信頼性が高く、引用符で囲まれたコンマ、引用符で囲まれたタブ文字、CJK文字などを含むデータを処理します。

1. Excelから保存

Excelで、データをに保存します file.txt、タイプ使用してUnicode Text (*.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

2
この方法は、15,000レコードを超えるCSVファイルで完全に機能し、メモ帳によって課された1024文字の制限を超える行が含まれていました。数秒かかり、サードパーティのソフトウェアを使用しません。ありがとう!
絶対

ああ、Google Sheetsを使ってみても同じ問題が発生しました。したがって、おそらくこのPowerShell戦略が機能したでしょう。ここに私の問題がありました。こうした特定の絵文字などの特定の文字について、あなたは使用する必要がありCHARACTER SET utf8mb4、ここで説明したよう:stackoverflow.com/a/10959780/470749
ライアン

1
@Ryanこの問題はMySQLに固有のものです。その質問の問題のある文字を試したところ、ExcelとPowerShellの両方で問題なく動作しました。
Don Cruickshank 2018

24

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

  1. 情報があるExcelファイルを開きます(.xls、.xlsx)
  2. Excelで、ファイルタイプとして「CSV(カンマ区切り)(* .csv)」を選択し、そのタイプとして保存します。
  3. NOTEPAD([プログラム]、[スタート]メニューの[アクセサリ]にあります)で、保存した.csvファイルをメモ帳で開きます。
  4. 次に、[名前を付けて保存]を選択します。[名前を付けて保存]ボックスの下部に、[エンコード]というラベルの付いた選択ボックスがあります。UTF-8を選択します(ANSIを使用しないでください。使用するとアクセントがすべて失われます)。UTF-8を選択したら、ファイルを元のファイルとは少し異なるファイル名で保存します。

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

この回答はこのフォーラムから引用されています。


9
ステップ2のため、CSVとして保存するため、これは正しくありません。これに関する問題は、ExcelがCSVファイルをcp1252に保存することです。これは、コードポイントあたり1バイトのエンコーディングです。これにより、1バイトに収まらない文字の情報が失われます。
Flimm 2016年

うまくいきましたが、なぜかわかりません。JavaScriptで生成されたファイルがExcelで常に正しく読み取られません(別のエンコーディングとして)。しかし、メモ帳で開いてutf-8として保存すると、正常に動作します!だから、エンコーディングのメタデータがあるように見えます。使い方?メモ帳でUTF-8 CSVファイルを保存でき、Excelでそれらを読み取ることができる場合、プログラムで正しいUTF-8 CSVファイルを生成して、Excelで読み取ることができますか?
felipeaf

私のために働いた。Accessから変換されたXSLX。分音符号、LFのみ、ISO日付の形式はすべて問題ありません。どちらかがより一般的なソリューションでは機能しませんでした。
RolfBly 2017年

21

もう1つ便利だと思ったのは、 " Numbers "で、CSVとして保存するときにエンコード設定ができることです。


8
^これはMac OSXのアプリケーションです
Sruit A.Suk

また、Numbersには行数に制限があるため、Numbersにも注意してください。一部がトリミングされていることに気付かないうちに、このようにデータを変換しました。Excel / CSVには、はるかに高い制限があります。
MrE、

14

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

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

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

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

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


2
この回答の問題は、最初にCSVファイルをどのように生成したかです。ExcelでCSVとして簡単に保存することでそれを行った場合、CSVファイルはcp1252になります。これは、コードポイントごとに1バイトのエンコーディングです。1バイトに収まらない文字に関しては、これにより情報が失われます。
Flimm 2016年

まあ、それはこれらの答えのいずれかの問題です。また、元のエンコーディングが何であるかを認識または制御する方法がないため、UTF-8への変換方法に対する回答も含まれます。
RedYeti 2016年


13

Notepad ++の使用

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

  • ExcelからCSVをエクスポート
  • Notepad ++に読み込む
  • エンコーディングを修正
  • セーブ

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

Encoding > Character Sets > Western European > Windows-1252

その後

Encoding > Convert to UTF-8
File > Save

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


これは間違っているかもしれませんが、Notepad ++でファイルを「.csv」として保存することはできません。
Daniel Maurer

1
はい、できます。あなたはただテキストファイルを保存しているだけであり、そして.csvで、テキストファイルです。この回答は、Excelで破損したCSVファイルを開き、修正してから、適切なエンコードで再保存します。
クロエ

あなたが伝えていることは、広範囲に及ぶ影響をもたらします。この卓越した方法を採用することで、より高いデータ品質を実現できます!ブラボー!(クイズ:なぜこのコメントはそれほどおかしいのですか?)
thymaro

9

Excel 2016以降(Office 365を含む)には、UTF-8形式専用のCSVオプションがあります。

Office 365で、[名前を付けて保存]を実行します。以前はCSV(カンマ区切り)を選択していた場合、CSV UTF-8(カンマ区切り)(* .csv)として保存できるファイルタイプの1つになりました。


1
そのオプションの使用方法についていくつかの指示を提供する必要があります。
rovyko 2018年

1
@dexgecko確かに:「保存」ボタン/メニューと呼ばれます。エクセル2016の4つのCSVエクスポートの種類は、Windows上で今があります:CSVは、「ANSI」として保存されます(多かれ少なかれ同等のLatin1が、それは私はわからないんだけど、インストール非西洋のOSと異なる場合があります)、UTF-8 CSV BOMを含むUTF-8として保存し、CSV(DOS)はCP850として保存し(これも、インストールに依存しますか?)、CSV(Mac)はMacRomanとして保存します。

ただし、ExcelはUTF-8およびANSI CSVファイルのみを読み取ることができます(ExcelはBOMを使用して選択できます)。別のエンコーディングからインポートするには、名前を.txtに変更し、Excelから開きます(選択できるエンコーディングの長いリストがあります)。セパレータは正しく解釈されないため、[変換]ボタンを使用して行を分割します。このトリックは、別の言語規則からCSVをインポートするときにも使用できます(たとえば、フランス語では、フィールド区切り記号はセミコロンです。コンマはすでに小数点記号として使用されているためです)。

1
ジャンClaudeArbaut奇妙な@、私はエクセル2016でUTF-8のCSVオプションが表示されない
rovyko

1
@dexgeckoストレンジ、確かに。よると、このページ私は現在、1802年バージョンを持っている(フランス語で、申し訳ありません)、機能はビルドバージョン1610で、2016年11月に追加されました。ただし、Office 365だけがそのような進化を遂げたと思い、Office 365(365フレーバーではない)を使用しています。多分あなたのオフィスを更新してみてください。

8

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

catdocをインストールします。

apt-get install catdoc

変換を行います:

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

これは非常に高速です。

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

xls2csvまた、.xlsファイルでのみ機能し、ファイルでは機能しないことに注意してください.xlsx


または、別の出力エンコーディングを選択しても、1つの回答で全員の問題を解決することはできません:-)
mpowered

2
残念なことですが、この回答一部のユーザーに問題を引き起こすことは事実です。cp1252に収まる文字でのみこれを実行したことがあるという事実は幸運であり、答えにこのリスクに関する警告を提供せず、それは「問題なく動作した」と述べただけです。全員の問題を修正するように求められたのではなく、多くの人々が共有しているOPだけを修正しました。
Flimm

1
よろしければ、回答の投稿で問題を修正し、反対票を削除しました。
Flimm 2016年

7

Powershellの使用についてはどうでしょうか。

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

1
ASCII以外のスペイン語文字のテキストは、元のスペイン語文字からANSIで使用されるエンコード文字列に変更されます。したがって、テキストは元のテキストと同じにはなりません。
ジェイソンウィリアムズ

7

最も簡単な方法: Open Office とGoogleドキュメントは不要

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

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


2
タブ区切りファイルの場合は、.txt拡張子を使用する方がよい場合があります。csv、つまりカンマ区切りのファイルは混乱を招くだけです。
dof1985 2017

5

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


1
これは、Excel がクリップボードを介して選択範囲のTSVバージョンを提供するため機能します。SublimeTextの代わりにメモ帳を使用することもできますが、使用する場合はUTF-8エンコードで保存することを忘れないでください。
Don Cruickshank

3

Mac Excelでこの問題のVBAソリューションを見つけることができませんでした。UTF-8テキストを出力する方法がないように思われました。

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

解決策はここに記載されています:http : //talesoftech.blogspot.com/2011/05/excel-on-mac-goodbye-vba-hello.html


3

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


3

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


3
UTF-8がスペイン語の文字で機能しない理由はありません。
Flimm 2016年

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

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


3
これは、ファイルデータ内のタブをカンマに変換するために必要な手順が含まれていないため機能しません。
Matthew Rodatus

1
Excelの「Unicodeテキスト」は、質問で尋ねられたUTF-8ではなく、UTF-16です。
Flimm 2016年

3

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

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

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


このオプションは、Excel 2016のコピーでは使用できません。Office365バージョンを使用していますか?
Don Cruickshank、

2

同じ問題に遭遇し、この投稿をグーグルアウトしました。上記のどれも私にとってはうまくいきませんでした。最後に、Unicode .xlsを.xmlに変換し([名前を付けて保存... XMLスプレッドシート2003]を選択)、正しい文字を生成しました。次に、XMLを解析し、コンテンツを抽出して使用するためのコードを記述しました。


2

ワークシートを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)

実装を少し更新し、要旨を作成しましたgist.github.com/julianthome/2d8546e7bed869079ab0f409ae0faa87
Julian

2

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

ファイルを修正する1つのオプションは、メモ帳またはNotepad ++を使用することです。

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

NP ++の古いバージョンについては不明ですが、現在のバージョンでは、[エンコーディング]> [UTF-8に変換]を選択するだけで済みます。置き換えステップ2-5
Felk

1

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

トップメニューから選択します:エンコーディング-> Ansiに変換


なぜあなたが反対票を投じられたかはわかりません。Notepad ++は私のためにそれをしました。ファイルは機密情報であるため、Googleスプレッドシートに保存できません。
ゼーン2013年

3
この回答の問題は、最初にCSVファイルを生成する方法です。ExcelからCSVとして保存するだけの場合、エンコードはcp1252になります。これは、コードポイントごとに1バイトのエンコードであるため、それに適合しない文字の情報は失われます。また、最後に、質問が要求したことを実行したい場合は、AnsiではなくUTF-8に変換する必要があります。
Flimm 2016年

これは、はるかに簡単な答えのIMOです。私はExcel 2016を使用していて、デフォルトでANSIエンコーディングに保存できることを確認しましたが、UTF-8に変換しました。
rovyko 2018年

1

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

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


5
「utf8はUnicodeのサブセットです」:これは意味がありません。UTF-8はUnicodeのエンコーディングです。
jameshfisher 2014年

この「エンコーディング-> Ansiに変換」オプションが見つかるかどうかはわかりません。
Flimm 2016年

Notepad ++でANSI csvを実行し、ファイルのエンコードをutf8に変更すると、元のASCII以外のスペイン語文字が、元のテキストと一致しないエンコード文字列に変換されます。
Jason Williams

1

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

ここに画像の説明を入力してください


14
"Unicode Text"は、OPから要求されたUTF-8ではなく、UTF-16 LE(リトルエンディアン)で保存します。
斧。

はい。ただし、Excelでx区切り値のUnicodeサポートを取得するための最良の方法です。ExcelでUTF-8を使用してボールをプレイしようとすると、さまざまな問題が発生しました。続きを読む
mcNux 2013

1

.csvをnotepad ++で正常に開きます。エンコーディングが適切である場合(すべての文字が適切に表示されている場合)、encodingを押してからANSIに変換します-現在のエンコーディングを確認します


.. ..私のためにギリシャ文字を持っていた問題ときCSVとしてexportedmysqlデシベルを働いていたし、Excelにそれを輸入している
ニコラス

1
これの問題は、最初にCSVファイルを生成する方法です。ExcelでCSVファイルとして保存するだけの場合、cp1252に保存されます。これは、コードポイントごとに1バイトのエンコーディングであるため、情報が失われます。
Flimm 2016年


1

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


これは私にはうまくいきません。私が理解している方法では、CSVとして保存するときではなく、Web形式(HTMLなど)として保存するときにのみ有効です。
jogojapan 2015

Works for me-
Office

Office 2010でCSVプロファイルを選択していない。
ハート

0

私は同じ問題を抱えており、このアドインに出くわします。それは、言及されているExcel 2007と2010に加えて、Excel 2013でも完全に正常に動作します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.