Excel в CSV с кодировкой UTF8 [закрыто]


607

У меня есть файл Excel, в котором есть некоторые испанские символы (тильды и т. Д.), Которые мне нужно преобразовать в файл CSV для использования в качестве файла импорта. Однако, когда я делаю Save As CSV, он искажает «специальные» испанские символы, которые не являются символами ASCII. Похоже, что это также происходит с левыми и правыми кавычками и длинными черточками, которые, похоже, исходят от первоначального пользователя, создающего файл Excel в Mac.

Поскольку CSV - это просто текстовый файл, я уверен, что он может обрабатывать кодировку UTF8, поэтому я предполагаю, что это ограничение Excel, но я ищу способ перейти из Excel в CSV и сохранить символы не ASCII неповрежденными.


15
Я видел этот вопрос до того, как опубликовал, но речь идет о том, чтобы уже иметь UTF8 CSV и открыть его в Excel, а не наоборот.
Джефф Трейтинг

7
Ответы ниже, кажется, работают, но они просто обходные пути. Кто-нибудь знает, как заставить Excel делать это?
NielW

2
Я хотел отбросить свои 2 цента: после большого количества проб и ошибок, попыток использовать функции VBA и т. Д. (Я использую Excel 97 по разным причинам) ... просто «Сохранить как» в CSV (MSDOS) Формат решил эту проблему для меня. В моем случае данные CSV на веб-семинаре Citrix (GotoWebinar) заканчиваются символами, которые ломают некоторый код Apex с нашей стороны - сохранение в «CSV (MSDOS)» разрешает мне (ранее) загружать экспорт CSV в Notepad ++ и вставлять его в UTF- 8 пустых файлов и сохранение. :-P :-)
AMM

2
Это очень раздражающее ограничение Excel. Я открыл запрос на функцию uservoice по этому поводу: excel.uservoice.com/forums/… , не стесняйтесь голосовать и сделайте это
Дорон Яакоби,

7
согласно пользовательскому голосу Excel, Microsoft начала работу над UTF-8 для .csv в прошлом месяце. excel.uservoice.com/forums/…
moloko

Ответы:


405

Простой обходной путь - использовать Google Spreadsheet. Вставьте (значения только при наличии сложных формул) или импортируйте лист, затем загрузите CSV. Я только что попробовал несколько символов, и это работает довольно хорошо.

ПРИМЕЧАНИЕ. Google Sheets имеет ограничения при импорте. Смотри здесь .

ПРИМЕЧАНИЕ. Будьте осторожны с конфиденциальными данными в Google Sheets.

РЕДАКТИРОВАТЬ: Другая альтернатива - в основном они используют макрос VB или надстройки, чтобы принудительно сохранить как UTF8. Я не пробовал ни одно из этих решений, но они звучат разумно.


63
Возможно, Джоэл Слотски (бывший премьер-министр Excel) мог бы отправить им свой десятилетний пост на тему «Абсолютный минимум каждого разработчика программного обеспечения, который абсолютно, положительно должен знать о Unicode и наборах символов» ?
Indolering

8
С обычным блокнотом Windows (используя save as, а затем выбрав utf-8 в опции кодирования) у меня работало. Для меня это лучший подход, так как это должны делать пользователи, не имеющие прав администратора на своих машинах, поэтому установка дополнительного программного обеспечения не требуется.
Fer

9
OpenOffice JustWorks (tm) без хлопот - я думаю, что это должно быть включено
Rbjz

9
Уххй. У меня только что была дрожь по спине. Что если в вашем файле Excel 200 000 строк? Или содержит конфиденциальные данные, которые вы не хотите включать в таблицу Excel? Используйте Openoffice / Libreoffice, если вам нужно.
Себ

2
Что делать, если размер файла большой? Размер листа Goolge составляет около 75 м, если я правильно помню. У меня есть файл
700M

133

Я нашел OpenOffice что приложение для работы с электронными таблицами , Calc, действительно хорошо обрабатывает данные CSV.

В диалоговом окне «Сохранить как ...» нажмите «Параметры формата», чтобы получить различные кодировки для CSV. LibreOffice работает так же, как AFAIK.

диалог сохранения калькуляции


Я уверен, что это работает, у меня просто нет OpenOffice, так что Google Docs был проще в моей ситуации. но спасибо за предложение
Джефф Трейтинг

19
OpenOffice Calc имеет больше и лучшие параметры при открытии и сохранении файлов "CSV" (разделители полей, кодировка и т. Д.), Чем в Google Docs и Excel. Кроме того, Google Docs в настоящее время имеет ограничение в 400 000 ячеек на электронную таблицу, чего нет в OpenOffice Calc.
Кристиан Давен

3
Я могу подтвердить, что LibreOffice также работает: он предлагает опции кодировки символов при экспорте, которых, к сожалению, нет в Excel.
Руперт Роунсли,

1
Это отличный вариант для тех, кто работает с конфиденциальными данными. Пакет OpenOffice может быть портативной установкой для тех, у кого заблокированы машины.
Натан

119
  1. Сохраните лист Excel как «Текст Unicode (.txt)». Хорошей новостью является то, что все международные символы находятся в UTF16 (обратите внимание, не в UTF8). Однако новый файл "* .txt" разделен символом TAB, не разделен запятыми и, следовательно, не является истинным CSV.

  2. (необязательно) Если вы не можете использовать файл TAB с разделителями для импорта, используйте ваш любимый текстовый редактор и заменяйте символы табуляции запятыми ",".

  3. Импортируйте ваш * .txt файл в целевое приложение. Убедитесь, что он может принять формат UTF16.

Если UTF-16 был правильно реализован с поддержкой кодовых точек, отличных от BMP, вы можете преобразовать файл UTF-16 в UTF-8 без потери информации. Я оставляю это вам, чтобы найти ваш любимый способ сделать это.

Я использую эту процедуру для импорта данных из Excel в Moodle.


5
Наконец то, что сработало! Пробовал вышеупомянутые параметры Excel на Excel 2013 безуспешно. Я просто переключился на использование \ t в качестве разделенного символа, когда анализировал его, и он работал отлично!
Маттиас Линдберг

1
Необходимо экспортировать XLS как CSV для импорта в MySQL. Используя Excel 2003, я экспортировал в формате «Unicode Text (.txt)», затем использовал Notepad ++ для замены TAB ;, затем импортировал txt-файл в phpmyadmin со стандартным «Набор символов файла: utf-8», Формат «CSV». используя LOAD DATA ". Вся кодировка была передана правильно.
Кай Ноак

3
Спасибо. Это имеет смысл. Почему MS до сих пор отказывается использовать UTF в качестве стандарта, бьет меня.
Оскар Лимка

4
@ OskarLimka: Когда вы говорите «UTF», вы имеете в виду UTF-8 или UTF-16? Потому что Microsoft использует UTF-16 совсем немного.
Flimm

7
«Хорошей новостью является то, что все международные символы находятся в UTF16 (заметьте, не в UTF8)». : полная ерунда . UTF-8 и UTF-16 - это два способа кодирования всего набора кодовых точек Unicode.

43

Я знаю, что это старый вопрос, но я столкнулся с этим вопросом, борясь с теми же проблемами, что и ОП.

Не найдя ни одного из предложенных решений приемлемым вариантом, я решил выяснить, есть ли способ сделать это, просто используя Excel.

К счастью, я обнаружил, что проблема потерянных символов возникает (в моем случае) только при сохранении из формата xlsx в формат csv. Я попытался сохранить файл xlsx сначала в xls, затем в csv. Это действительно сработало.

Пожалуйста, попробуйте и посмотрите, работает ли он для вас. Удачи.


3
Для меня в Excel для Mac 2011 это работает, но только если я выберу Windows comma separated (CSV). Это не работает, если я использую параметры по умолчанию или DOS CSV - оба они заменяют акцентированные символы случайными символами барахла. Испытано для персонажей , включая é, è, â... Не знаю , если это реально UTF8 , но символы не искажаются.
user56reinstatemonica8

12
Быстрое подтверждение - файлы, созданные с помощью этого метода в (Excel для Mac 2011) , не выдают CSV -файлы UTF-8, НО , они действительно генерируют CSV -файлы, которые по крайней мере содержат правильные символы и поэтому могут быть безболезненно преобразованы в UTF8 в текстовом редакторе. Это большой шаг вперед по сравнению с нелепым изуродованным мусором, который Excel выкладывает по умолчанию.
user56reinstatemonica8

Да, согласился, это сработало и для меня (Excel Mac 2011), и это действительно заслуживает большего количества голосов.
cbmanica

1
Это не совсем работает для меня (с помощью Excel 2007). В моем файле было 2 не-ASCII символа, и один из них был сохранен в порядке, а другой нет.
EM0

1
Обратите внимание, что полученный CSV-файл будет в UTF-16, а не в UTF-8, как задан вопрос.
Flimm

38

Вы можете использовать команду iconv под Unix (также доступна в Windows как libiconv ).

После сохранения в формате CSV под Excel в командной строке введите:

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

(не забудьте заменить cp1250 вашей кодировкой).

Работает быстро и отлично подходит для больших файлов, таких как база данных почтовых индексов, которые нельзя импортировать в GoogleDocs (ограничение 400 000 ячеек).


5
Это бесполезно, если ваш контент содержит символы, которые не могут быть закодированы в 1250, лучшим способом было бы экспортировать как «Unicode .txt» в Excel и использовать iconv для преобразования из Utf16. Возможно также сделать sedили trперевести с '\ t' на ','
Себастьян

5
Кодировка по умолчанию в Excel выглядит как CP858 при сохранении в формате CSV или MS-DOS CSV и Windows 1252 при сохранении в формате Windows CSV (как проверено в Excel для Mac 2011).
глина

4
Я полностью согласен с тем, что это бесполезно, поскольку, когда Excel сохраняет в формате .csv, он теряет информацию, когда дело доходит до кодовых точек Unicode, которые не могут быть закодированы в кодировке по одной байте на кодовую точку.
Flimm

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
Этот метод отлично работал для файла CSV с более чем 15 000 записей со строками, превышающими ограничение в 1024 символа, наложенное Блокнотом. Занимает секунды и не использует стороннее программное обеспечение. Спасибо!
абсолютное

Ах, даже когда я пытался использовать Google Sheets, я столкнулся с той же проблемой. Так что, возможно, эта стратегия PowerShell сработала бы. Здесь была моя проблема. Для определенных персонажей, таких как определенные смайлики, вам нужно использовать, CHARACTER SET utf8mb4как описано здесь: stackoverflow.com/a/10959780/470749
Райан

1
@Ryan Эта проблема характерна для MySQL. Я только что попробовал проблемный символ в этом вопросе, и он отлично работал как в Excel, так и в PowerShell.
Дон Круикшанк

24

Единственный «легкий» способ сделать это заключается в следующем. Во-первых, поймите, что есть разница между тем, что отображается, и тем, что скрыто в файле .csv Excel.

  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, который представляет собой кодирование по одной байте на кодовую точку. Это приводит к потере информации для символов, которые не помещаются в один байт.
Flimm

Это сработало для меня, но я не могу понять, почему. Мой файл, сгенерированный javascript, всегда неправильно читается в Excel (как другая кодировка). Но когда я открываю в блокноте и сохраняю как utf-8, он работает отлично! Итак, похоже, что есть метаданные с кодировкой. Как это работает? Если блокнот может сохранять файлы CSV в формате UTF-8, а Excel может их читать, возможно ли в моей программе генерировать правильные файлы CSV в формате UTF-8, которые может читать Excel?
felipeaf

Работал на меня. В XSLX конвертируется из Access. Форматы Diacritics и LF-only и ISO-date все в порядке. Тот или иной не работал с более популярными решениями.
RolfBly

21

Еще один, который я нашел полезным: « Числа » позволяют настройки кодирования при сохранении в формате CSV.


8
^ это приложение в Mac OSX
Sruit A.Suk

Также будьте осторожны с Numbers, так как они имеют ограничение на количество строк, и я преобразовал данные, как это, прежде чем не осознавать, что некоторые из них обрезаны. Excel / CSV имеет гораздо более высокие ограничения.
MrE

14

«nevets1219» подходит для Google docs, однако, если вы просто «импортируете» файл, он часто не конвертирует его в UTF-8.

Но если вы импортируете CSV в существующую электронную таблицу Google, она конвертируется в UTF-8.

Вот рецепт:

  • На главном экране документов (или диска) нажмите кнопку «Создать» и выберите «Электронная таблица»
  • В меню «Файл» выберите «Импорт»
  • Нажмите «Выбрать файл»
  • Выберите «Заменить электронную таблицу»
  • Выберите любой символ, который вы используете в качестве разделителя
  • Нажмите «Импорт»
  • В меню «Файл» выберите «Загрузить как» -> CSV (текущий лист)

Полученный файл будет в UTF-8


2
Проблема с этим ответом заключается в том, как вы сгенерировали файл CSV. Если вы сделали это путем упрощения сохранения в формате CSV в Excel, файл CSV будет находиться в формате cp1252, который представляет собой кодирование по одной байте на кодовую точку. Это приведет к потере информации, когда речь идет о символах, которые не помещаются в один байт.
Flimm

Ну, это проблема с любым из этих ответов. И будет с любым ответом на то, как преобразовать в UTF-8, так как нет никакого способа узнать или контролировать то, что было оригинальной кодировкой.
RedYeti

1
В некоторых ответах рассказывается о том, как обойти эту проблему, например, stackoverflow.com/a/15500052/247696
Flimm

13

Использование Notepad ++

Это исправит поврежденный файл CSV, сохраненный в Excel, и повторно сохранит его в правильной кодировке.

  • Экспорт CSV из Excel
  • Загрузить в Notepad ++
  • Исправить кодировку
  • Сохранить

Excel сохраняет в CP-1252 / Windows-1252. Откройте файл CSV в Notepad ++. Выбрать

Encoding > Character Sets > Western European > Windows-1252

затем

Encoding > Convert to UTF-8
File > Save

Сначала скажите Notepad ++ кодировку, затем конвертируйте. Некоторые из этих других ответов конвертируются без предварительной установки правильной кодировки, еще больше искажая файл. Они превратят то, что должно быть в . Если ваш персонаж не вписывается в CP-1252, то он уже был потерян, когда был сохранен как CSV. Используйте другой ответ для этого.


Я могу ошибаться, но вы не можете сохранить файл как «.csv» в Notepad ++, и вот о чем идет речь.
Даниэль Маурер,

1
Да, ты можешь. Вы только сохраняете текстовый файл, а .csvтекстовый файл. Этот ответ откроет файл CSV, поврежденный Excel, исправит его, а затем снова сохранит его с правильной кодировкой.
Хлоя

То, что вы общаетесь, имеет далеко идущие последствия. Используя этот выдающийся метод, мы можем достичь более высокого качества данных! Браво! (Тест: почему этот комментарий такой забавный?)
тимаро

9

В Excel 2016 и более поздних версиях (включая Office 365) есть опция CSV, предназначенная для формата UTF-8.

В Office 365 сделайте Сохранить как; где раньше можно было выбрать CSV (с разделителями-запятыми), теперь один из типов файлов, который вы можете сохранить, как CSV UTF-8 (с разделителями-запятыми) (* .csv)


1
Вы должны предоставить некоторые инструкции о том, как использовать эту опцию.
Ровико

1
@dexgecko уверен: он называется кнопкой / меню «Сохранить». В настоящее время в Windows 2016 имеется четыре типа экспорта CSV в Windows: CSV сохраняет как «ANSI» (более или менее эквивалентный Latin1, но это может отличаться при установке ОС не из западных систем, я не уверен), UTF-8 CSV сохраняет как UTF-8 с BOM, CSV (DOS) сохраняет как CP850 (опять же, это зависит от установки?), а CSV (Mac) сохраняет как MacRoman.

Однако Excel сможет читать только файлы CSV UTF-8 и ANSI (Excel может использовать спецификацию для выбора). Чтобы импортировать из другой кодировки, переименуйте в .txt, откройте из Excel (тогда у вас есть длинный список кодировок на выбор), и, поскольку он не будет правильно интерпретировать разделитель, используйте кнопку «конвертировать», чтобы разбить строки. Вы также можете использовать эту хитрость при импорте CSV из другого языкового соглашения (например, во французском языке, разделенный полем разделитель - точка с запятой, поскольку запятая уже используется в качестве десятичного разделителя).

1
@ Jean-ClaudeArbaut Странно, я не вижу опцию UTF-8 CSV в моем Excel 2016.
Rovyko

1
@dexgecko Странно, действительно. Согласно этой странице (на французском языке, извините), функциональность была добавлена ​​в ноябре 2016 года в версии сборки 1610. В настоящее время у меня версия 1802. Тем не менее, я думал, что только Office 365 имеет такие эволюции, и я использую Office Pro 2016 (не 365 вариант). Может быть, попытаться обновить ваш офис.

8

Для тех, кто ищет полностью программное (или, по крайней мере, серверное) решение, я добился большого успеха, используя инструмент xls2csv от catdoc.

Установите catdoc:

apt-get install catdoc

Сделать преобразование:

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

Это чертовски быстро.

Обратите внимание, что важно включить -d utf-8флаг, иначе он будет кодировать выходные данные по умолчаниюcp1252 кодировке , и вы рискуете потерять информацию.

Обратите внимание, что xls2csvтакже работает только с.xls файлами, он не работает с.xlsx файлами.


Или выберите другую выходную кодировку, не можете решить все проблемы одним ответом :-)
mpowered

2
Я знаю , что это печально, но тот факт, что этот ответ будет вызывать проблемы для некоторых пользователей. Тот факт, что вы когда-либо запускали это только с символами, которые вписываются в cp1252, просто удачен, вы не предупредили об этом риске в ответе, вы просто сказали, что он «работает без помех». Вас не просили решать проблемы всех, только ОП, которые разделяют многие люди.
Flimm

1
Вот и я, я исправил проблему в ответном посте и удалил понижающий голос.
Flimm

7

Как насчет использования Powershell.

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

1
Текст не испанских испанских символов будет изменен с исходного испанского символа на кодированную строку, используемую ANSI. Таким образом, текст не будет таким же, как оригинал.
Джейсон Уильямс

7

Самый простой способ: не нужно Открыть офис и Google Docs

  1. Сохраните ваш файл как «текстовый файл Unicode»;
  2. теперь у вас есть текстовый файл Unicode
  3. откройте его с помощью «блокнота» и «Сохранить как», выбрав «utf-8» или другую кодовую страницу, которую вы хотите
  4. переименуйте расширение файла из "txt" в "csv". Это приведет к CSV-файлу с разделителями табуляции UTF-8.
  5. Если вам нужен файл с запятыми , откройте csvтолько что переименованный файл и замените все вкладки запятыми. Чтобы сделать это в Блокноте на Win 10, просто выберите одно поле вкладки и нажмите Ctrl+H. В открывшемся окне введите запятую ,в поле «Заменить» и нажмите «Заменить все». Сохраните ваш файл. Результатом будет CSV-файл UTF-8 с разделителями-запятыми.

В любом случае, не открывайте его в MS-Office !!! Теперь у вас есть CSV-файл с разделителями табуляции. Или запятую, если вы применили шаг № 5.


2
Для файла с разделителями табуляции может быть лучше использовать .txtрасширение. csvфайлы, разделенные запятыми, просто сбивают с толку.
dof1985

5

Как ни странно, самый простой способ сохранить электронную таблицу размером 180 МБ в CSV-файле UTF8 - выбрать ячейки в Excel, скопировать их и вставить содержимое буфера обмена в SublimeText.


1
Это работает, потому что Excel предоставляет версию выбора TSV через буфер обмена. Вы можете одинаково хорошо использовать Блокнот вместо SublimeText, но не забудьте сохранить с кодировкой UTF-8, если вы это сделаете!
Дон Круикшанк,

3

Мне не удалось найти решение VBA для этой проблемы в Mac Excel. Казалось, просто нет способа вывести текст 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

Простой способ сделать это: скачать Open Office ( здесь ), загрузить электронную таблицу и открыть файл Excel ( .xlsили .xlsx). Затем просто сохраните его как текстовый CSV-файл, и откроется окно с просьбой сохранить текущий формат или сохранить в формате .ODF. выберите «сохранить текущий формат» и в новом окне выберите вариант, который лучше работает для вас, в зависимости от языка, на котором был написан ваш файл. Для испанского языка выберите Western Europe ( Windows-1252/ WinLatin 1), и файл работает просто отлично. Если вы выберете Unicode ( UTF-8), он не будет работать с испанскими символами.


3
Нет причин, по которым UTF-8 не будет работать с испанскими символами.
Flimm

3
  1. Сохранить файл xls (файл Excel) как текст Unicode => файл будет сохранен в текстовом формате (.txt)

  2. Измените формат с .txt на .csv (переименуйте файл из XYX.txt в XYX.csv


3
Это не работает, потому что ваши инструкции не включают необходимый шаг преобразования вкладок в запятые в данных файла.
Мэтью Родатус

1
«Unicode text» в Excel - это UTF-16, а не UTF-8, как было указано в вопросе.
Flimm

3

Я тоже сталкивался с той же проблемой, но для этого есть простое решение.

  1. Откройте файл xlsx в Excel 2016 или более поздней версии.
  2. В «Сохранить как» выберите эту опцию: «(CSV UTF-8 (с разделителями-запятыми) *. Csv)»

Он отлично работает и генерируется CSV-файл, который можно импортировать в любое программное обеспечение. Я импортировал этот CSV-файл в свою базу данных SQLITE, и он отлично работает со всеми неповрежденными символами Юникода.


Эта опция недоступна в моей копии Excel 2016. Используете ли вы версию Office 365?
Дон Круикшанк

2

Наткнулся на ту же проблему и погуглил этот пост. Ничто из вышеперечисленного не помогло мне. Наконец я преобразовал свой Unicode .xls в .xml (выберите «Сохранить как ... XML Spreadsheet 2003»), и он вывел правильный символ. Затем я написал код для разбора xml и извлек содержимое для моего использования.


2

Я написал небольшой скрипт на Python, который может экспортировать листы в UTF-8.

Вам просто нужно указать файл 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 в кодировке ANSI вместо utf8.

Один из вариантов исправления файла - использовать Блокнот или Блокнот ++:

  1. Откройте .csv с помощью Блокнота или Блокнота ++.
  2. Скопируйте содержимое в буфер обмена вашего компьютера.
  3. Удалить содержимое из файла.
  4. Измените кодировку файла на utf8.
  5. Вставьте содержимое обратно из буфера обмена.
  6. Сохраните файл.

Не уверен насчет старых версий NP ++, но в текущей версии вы можете просто выбрать Encoding> Convert to UTF-8. заменяет шаги 2-5
Felk

1

Второй вариант «nevets1219» - открыть файл CSV в Notepad ++ и выполнить преобразование в ANSI.

Выберите в верхнем меню: Кодировка -> Конвертировать в Анси


Понятия не имею, почему вы были отвергнуты. Notepad ++ сделал это для меня. Не удается сохранить мой файл в электронной таблице Google, так как он конфиденциальный.
Зейн

3
Проблема с этим ответом заключается в том, как вы генерируете файл CSV. Если вы просто сохраните файл в формате CSV из Excel, кодировка будет cp1252, то есть кодирование по одному байту на кодовую точку, и, следовательно, будет потеряна информация для символов, которые не вписываются в нее. Кроме того, в конце вы должны конвертировать в UTF-8, а не в Ansi, если вы хотите сделать то, что задал вопрос.
Flimm

Это гораздо проще ответить ИМО. Я использую Excel 2016 и нашел его по умолчанию в кодировке ANSI, но получил его в UTF-8, что я и хотел.
Ровико

1

Кодировка -> Преобразовать в Ansi закодирует его в ANSI / UNICODE. Utf8 является подмножеством Unicode. Возможно, в ANSI будет закодирован правильно, но здесь речь идет о UTF8, @SequenceDigitale.

Существуют более быстрые способы, такие как экспорт как csv (с разделителями-запятыми), а затем открытие этого csv с помощью Notepad ++ (бесплатно), затем Encoding> Convert to UTF8. Но только если вы должны сделать это один раз для каждого файла. Если вам нужно часто менять и экспортировать, то лучшее решение - LibreOffice или GDocs.


5
«Utf8 - это подмножество Unicode»: это не имеет смысла. UTF-8 - это кодировка Unicode.
jameshfisher

Я не уверен, что могу найти эту опцию "Кодировка -> Преобразовать в Анси".
Flimm

Просто ANSI csv в Notepad ++ и изменение кодировки файла на utf8 приводит к тому, что исходные не-ascii испанские символы преобразуются в строки кодирования, которые не соответствуют исходному тексту.
Джейсон Уильямс

1

Microsoft Excel имеет возможность экспортировать электронную таблицу с использованием кодировки Unicode. Смотрите следующий скриншот.

введите описание изображения здесь


14
«Текст Unicode» сохраняется в UTF-16 LE (Little Endian), а не в UTF-8, как было задано OP.
топор.

Да, но это лучший способ получить поддержку Unicode для ваших значений x-отделенных в Excel. У меня были разные проблемы, когда я пытался заставить Excel играть в мяч с UTF-8! Читать дальше
mcNux

1

открыть .csv нормально с блокнотом ++. если вы видите, что ваша кодировка хороша (вы видите все символы такими, какими они должны быть), нажмите кодировку, затем конвертируйте в ANSI, иначе - узнайте, какая у вас текущая кодировка


это сработало для меня .. были проблемы с греческими символами, когда exportedmysql db как csv и импортировал его в Excel ..
nikolas

1
Проблема заключается в том, как вы генерируете файл CSV. Если вы просто сохраните файл в формате CSV в Excel, он сохранит его в формате cp1252, который является кодированием по одной байте на кодовую точку, и поэтому теряет информацию.
Flimm

1

другое решение - открыть файл с помощью winword и сохранить его как txt, а затем снова открыть его с помощью Excel, и он будет работать ISA


1

Диалог сохранения> Кнопка «Инструменты»> «Параметры сети»> вкладка «Кодировка»


Это не работает для меня. Насколько я понимаю, это действует только при сохранении в веб-формате (HTML и т. Д.), А не при сохранении в формате CSV.
Джогоджапан

У меня работает - офис 2007
Элия ​​Вайс

не работает в офисе 2010, выбирая любой профиль CSV.
Харт

0

У меня та же проблема, и я столкнулся с этой надстройкой, и она отлично работает в Excel 2013 и Excel 2007 и 2010, для которых она упоминается.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.