Excel до CSV з кодуванням UTF8 [закрито]


607

У мене є файл Excel, який містить деякі іспанські символи (тильди тощо), які мені потрібно перетворити у файл CSV, щоб використовувати його як файл імпорту. Однак, коли я роблю Save As CSV, він маніпулює "спеціальними" іспанськими символами, які не є символами ASCII. Здається, це також робиться з лівої та правої лапок та довгих тире, які, як видається, надходять від оригінального користувача, який створює файл Excel в Mac.

Оскільки CSV - це лише текстовий файл, я впевнений, що він може працювати з кодуванням UTF8, тому я здогадуюсь, що це обмеження в Excel, але я шукаю спосіб перейти з Excel в CSV і зберегти символи, що не належать до ASCII неушкодженим.


15
Я бачив це питання ще до того, як я розмістив, але мова йде про те, що вже є CSV UTF8 та відкрити його в Excel, а не навпаки.
— Джефф Третінг

7
Відповіді нижче, здається, працюють, але вони просто обхідні шляхи. Хтось знає, як змусити Excel це робити?
— NielW

2
Я хотів скинути свої 2 центи: Після безлічі спроб і помилок, спроб використання функцій VBA і т. Д ... (я використовую Excel 97 з різних причин) ... просто збереження-як до "CSV (MSDOS)" "формат вирішив цю проблему для мене. У моєму випадку дані веб-семінару Citrix (GotoWebinar) закінчуються символами, щоб зламати деякий код Apex в нашому кінці - економія до "CSV (MSDOS)" вирішує мене (раніше) завантажуючи CSV-експорт у Notepad ++ і вставляючи його в UTF- 8 порожній файл та збереження. :-P :-)
— AMM

2
Це дуже дратує обмеження Excel. Я відкрив запит на функцію користувальницької служби щодо цього: excel.uservoice.com/forums/… , не соромтесь голосувати і
— втілювати

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

Відповіді:


405

Просте вирішення полягає у використанні електронної таблиці Google. Вставити (значення лише у тому випадку, якщо у вас є складні формули) або імпортуйте аркуш, а потім завантажте CSV. Я просто спробував кілька символів, і це працює досить добре.

ПРИМІТКА: Google Таблиці мають обмеження під час імпорту. Дивіться тут .

ПРИМІТКА. Будьте уважні до конфіденційних даних за допомогою Google Таблиць.

EDIT: Ще одна альтернатива - в основному вони використовують макрос VB або addin, щоб примусити зберегти як UTF8. Я не пробував жодного з цих рішень, але вони звучать розумно.


63
Можливо, Джоел Слоцький (колишній прем'єр-міністр Excel) міг би надіслати їм свою десятилітню посаду на "Абсолютний мінімум кожного розробника програмного забезпечення абсолютно, позитивно повинен знати про набори юнікоду та символів" ?
— Індолінг

8
Зі звичайним блокнотом Windows (використовуючи Save as, а потім вибравши utf-8 у варіанті кодування) працював для мене. Для мене це найкращий підхід, оскільки це повинні робити користувачі, які не мають прав адміністратора на своїх машинах, тому встановлювати додаткове програмне забезпечення не потрібно.
— Fer

9
OpenOffice JustWorks (tm) без клопоту - я думаю, його слід включити
— Rbjz

9
Уххх. У мене просто було тремтіння вниз по спині. Що робити, якщо файл Excel має 200 000 рядків? Або містять конфіденційні дані, які ви не хочете включати в таблицю Excel? Якщо потрібно, використовуйте Openoffice / Libreoffice.
— Себ

2
Що робити, якщо розмір файлу великий? Лист goolge має обмеження розміру близько 75М, якщо я правильно пам’ятаю. У мене файл
— 700М

133

Я знайшов, що програма OpenOffice для електронних таблиць, Calc, дуже добре обробляє дані CSV.

У діалоговому вікні "Зберегти як ..." натисніть "Параметри форматування", щоб отримати різні кодування для CSV. LibreOffice працює аналогічно AFAIK.

діалогове вікно збереження кальку


Я впевнений, що це працює, я просто не маю вже OpenOffice, щоб Google Документів було простіше в моїй ситуації. але дякую за пропозицію
— Джефф Третінг

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

3
Я можу підтвердити, що LibreOffice також працює: він пропонує варіанти кодування символів при експорті, яких, на жаль, не вистачає в Excel.
— Rupert Rawnsley

1
Це чудовий варіант для тих, хто працює з конфіденційними даними. Набір OpenOffice може бути портативною установкою для тих, хто має заблоковані машини.
— Натан

119
  1. Збережіть аркуш Excel як "Текст Unicode (.txt)". Хороша новина полягає в тому, що всі міжнародні персонажі знаходяться в UTF16 (зверніть увагу, а не на UTF8). Однак новий "* .txt" файл обмежений TAB, не обмежений комами, а тому не є справжнім CSV.

  2. (необов'язково) Якщо ви не можете використовувати файл для обмеження TAB для імпорту, використовуйте улюблений текстовий редактор та замініть символи 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 за допомогою даних ЗАВАНТАЖЕННЯ ". Все кодування було передано правильно.
— Кай Ноак

3
Дякую. Це має сенс. Чому МС досі відмовляється використовувати 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). Це не працює, якщо я використовую параметри CSV за замовчуванням або DOS - обидва вони замінюють наголошені символи випадковими символами. Випробувано для персонажів , включаючи é, è, â... Не знаю , якщо це реально UTF8 , але символи не спотворюються.
— user56reinstatemonica8

12
Швидке підтвердження - файли, створені цим методом в (Excel для Mac 2011) , не виробляють UTF-8 csvs, АЛЕ вони створюють CSV, що принаймні містять правильні символи, і тому можуть безболісно перетворюватися на UTF8 у текстовому редакторі , що є великим кроком вперед від смішного розгубленого мотлоху, який Excel викидає за замовчуванням.
— користувач56reinstatemonica8

Так, погоджено, це працювало і для мене (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 символів, накладене Notepad. Займає секунди і не використовує сторонне програмне забезпечення. Дякую!
— абсолютний

Ага, навіть коли я намагався використовувати Google Таблиці, я зіткнувся з тією ж проблемою. Тож, можливо, ця стратегія PowerShell спрацювала б. Тут була моя проблема. Для певних персонажів, таких як певні емоджі, вам потрібно скористатись CHARACTER SET utf8mb4описаним тут: stackoverflow.com/a/10959780/470749
— Ryan

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

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, який є кодуванням по одному балу на кожну точку. Це призводить до втрати інформації для символів, які не можуть вміститися в один байт.
— Flimm

Це працювало для мене, але я не можу зрозуміти, чому. Мій файл, згенерований javascript, завжди читається неправильно в excel (як інше кодування). Але коли я відкриваю в блокноті і зберігаю як utf-8, він працює чудово! Отже, схоже, є метадані з кодуванням. Як це працює? Якщо блокнот може зберігати файли CSV UTF-8, а Excel може їх читати, можливо, у моїй програмі генеруються правильні файли CSV UTF-8, що Excel може читати?
— felipeaf

Працювали для мене. У XSLX, перетвореному з Access. Діакритичні формати та формати дати, лише для LF та ISO, все в порядку. Ті чи інші не працювали з більш популярними рішеннями.
— RolfBly

21

Ще один, який я вважав корисним: " Numbers " дозволяє налаштувати кодування під час збереження у форматі CSV.


8
^ це програма в Mac OSX
— Sruit A.Suk

також будьте обережні з Numbers, оскільки він має обмеження в кількості рядків, і я перетворив такі дані, перш ніж не усвідомлювати, що він обрізав деякі з них. Excel / CSV має набагато більш високі межі.
— MrE

14

"nevets1219" має відношення до документів Google, однак, якщо ви просто "імпортуєте" файл, він часто не перетворює його в UTF-8.

Але якщо ви імпортуєте CSV в існуючу електронну таблицю Google, вона перетворюється на UTF-8.

Ось рецепт:

  • На головному екрані Документів (або Диска) натисніть кнопку "Створити" та виберіть "Електронна таблиця"
  • У меню "Файл" виберіть "Імпортувати"
  • Натисніть "Вибрати файл"
  • Виберіть «Замінити таблицю»
  • Виберіть того символу, який ви використовуєте як роздільник
  • Натисніть "Імпортувати"
  • У меню "Файл" виберіть "Завантажити як" -> CSV (поточний аркуш)

Отриманий файл буде в UTF-8


2
Проблема з цією відповіддю полягає в тому, як ви створили файл CSV в першу чергу. Якщо ви зробили це шляхом спрощення збереження у форматі CSV в Excel, файл CSV знаходитиметься в cp1252, що є кодуванням по одному байту на кожну точку. Це призведе до втрати інформації, коли мова йде про символи, які не можуть вміститися в одному байті.
— Флімм

Ну, це проблема з будь-якою з цих відповідей. І будь-яка відповідь про те, як перетворитись на UTF-8, не зможе дізнатися чи контролювати, яким було початкове кодування.
— RedYeti

1
Деякі з відповідей зробити розмови про те , як обійти цю проблему, наприклад, stackoverflow.com/a/15500052/247696
— Флімм

13

Використання Блокнота ++

Це дозволить виправити пошкоджений файл CSV, збережений Excel, і знову зберегти його у відповідному кодуванні.

  • Експорт CSV з Excel
  • Завантажте в Блокнот ++
  • Виправити кодування
  • Зберегти

Excel зберігає в CP-1252 / Windows-1252. Відкрийте файл CSV у Блокноті ++. Виберіть

Encoding > Character Sets > Western European > Windows-1252

Тоді

Encoding > Convert to UTF-8
File > Save

Спочатку скажіть Notepad ++ про кодування, а потім перетворите. Деякі з цих інших відповідей перетворюють, не встановлюючи спочатку належне кодування, ще більше маніпулюючи файлом. Вони б перетворити то , що має бути ’в 達. Якщо ваш персонаж не вписується в CP -1252 , то він вже був втрачений , коли він був збережений у форматі CSV. Використовуйте для цього іншу відповідь.


Я можу помилитися з цим, але ви не можете зберегти файл як ".csv" у "Блокноті ++", і ось про що йдеться.
— Даніель Маурер

1
Так, ти можеш. Ви лише зберігаєте текстовий файл і .csvце текстовий файл. Ця відповідь відкриє файл CSV, пошкоджений Excel, виправить його, а потім знову збереже його за допомогою належного кодування.
— Хлоя

Те, що ви спілкуєтесь, має далекосяжні наслідки. Використовуючи цей видатний метод, ми можемо досягти більш високої якості даних! Браво! (Вікторина: чому цей коментар настільки химерний?)
— тимаро

9

У програмі Excel 2016 і новіших версій (включаючи Office 365) існує опція CSV, присвячена формату UTF-8.

В Office 365 виконайте Зберегти як; де раніше, можливо, вибрали CSV ( розділений комою), тепер один із типів файлів, який ви можете зберегти, - це CSV UTF-8 (розділений комами) (* .csv)


1
Ви повинні надати кілька інструкцій щодо використання цієї опції.
— rovyko

1
@dexgecko впевнений: це називається кнопкою / меню "Зберегти". Є в даний час чотири типи експорту CSV в Excel 2016 на Windows: CSV зберігає як «ANSI» (більш-менш еквівалентної Latin1, але які можуть бути різними з незахідному установки ОС, я не впевнений), UTF-8 CSV зберігає як UTF-8 з BOM, CSV (DOS) зберігає як CP850 (знову ж таки, залежно від встановлення?), а CSV (Mac) зберігає як MacRoman.

Однак Excel зможе читати лише файли UTF-8 та ANSI CSV (Excel може використовувати BOM для вибору). Щоб імпортувати з іншого кодування, перейменуйте як .txt, відкрийте в Excel (у вас тоді довгий список кодувань на вибір), і оскільки він не буде інтерпретувати роздільник правильно, використовуйте кнопку "конвертувати", щоб розділити рядки. Цей трюк можна також використовувати під час імпорту CSV з іншої мови (наприклад, французькою мовою, поданий роздільник є крапкою з комою, оскільки кома вже використовується як десятковий роздільник).

1
@ Jean-ClaudeArbaut Дивно, я не бачу опції CSV UTF-8 у своєму Excel 2016.
— rovyko

1
@dexgecko Дивно, справді. Відповідно до цієї сторінки (французькою мовою, вибачте), функціональність була додана в листопаді 2016 року, у версії збірки 1610. Наразі у мене версія 1802. Однак я вважав, що лише Office 365 має такий розвиток, і я використовую Office Pro 2016 (не аромат 365). Можливо, спробуйте оновити свій Office.

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

Найпростіший спосіб: Не потрібно відкривати документи Office і Google

  1. Збережіть файл як "текстовий файл Unicode";
  2. тепер у вас є текстовий файл unicode
  3. відкрийте його за допомогою "блокнота" та "Зберегти як", вибравши "utf-8" або іншу кодову сторінку, яку ви хочете
  4. перейменуйте розширення файлу з "txt" на "csv". Це призведе до файлу csv з обмеженою вкладкою з обмеженими вкладками.
  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, яка - для мене все одно - зберігає її як CSV UTF-8.


3

Простий спосіб зробити це: завантажити відкритий офіс ( тут ), завантажити електронну таблицю та відкрити файл excel ( .xlsабо .xlsx). Потім просто збережіть його як текстовий файл CSV, і відкриється вікно з проханням зберегти поточний формат або зберегти як формат .ODF. виберіть "зберегти поточний формат" і у новому вікні виберіть опцію, яка найкраще працює для вас, відповідно до мови, на якій написаний ваш файл. Для іспанської мови виберіть Західну Європу ( 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" в Excel - це UTF-16, а не UTF-8, як про це йдеться у запитанні.
— Flimm

3

Я також зіткнувся з тією ж проблемою, але для цього є просте рішення.

  1. Відкрийте свій файл xlsx в Excel 2016 або новішої версії.
  2. У полі "Зберегти як" виберіть цей параметр: "(CSV UTF-8 (Розділена кома) *. Csv)"

Він прекрасно працює і створюється файл csv, який можна імпортувати в будь-яке програмне забезпечення. Я імпортував цей файл CSV у свою базу даних SQLITE, і він прекрасно працює з усіма символами unicode неушкодженими.


Цей варіант недоступний у моїй копії 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 ++, але в поточній версії ви можете просто вибрати Кодування> Перетворити на UTF-8. замінює кроки 2-5
— Felk

1

Другий варіант "nevets1219" - це відкрити свій файл CSV в Notepad ++ і зробити перехід на ANSI.

Виберіть у верхньому меню: Кодування -> Перетворити в Ansi


Поняття не маю, чому вас принизили. Блокнот ++ зробив це для мене. Неможливо зберегти мій файл у електронній таблиці Google, оскільки він є конфіденційним.
— Зейн

3
Проблема з цією відповіддю полягає в тому, як ви генеруєте файл CSV в першу чергу. Якщо ви просто збережете як CSV з Excel, кодуванням буде cp1252, що є кодуванням по одному балу на кожну точку, і тому втратить інформацію про символи, які не вписуються в це. Також, наприкінці, вам слід перетворитись на UTF-8, а не на Ansi, якщо ви хочете зробити те, про що запитували.
— Flimm

Це набагато простіша відповідь ІМО. Я використовую Excel 2016 і виявив його збереженням у кодуванні ANSI за замовчуванням, але отримав його в UTF-8, і це те, що я хотів.
— rovyko

1

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

Є більш швидкі способи, наприклад експорт у форматі csv (розділений комами), а потім, відкривши цей csv за допомогою Notepad ++ (безкоштовно), потім кодування> Перетворити на UTF8. Але лише в тому випадку, якщо вам доведеться зробити це один раз у файлі. Якщо вам потрібно міняти та експортувати якісно, ​​то найкраще - рішення LibreOffice або GDocs.


5
"Utf8 - це підмножина Unicode": це не має сенсу. UTF-8 - це кодування Unicode.
— jameshfisher

Я не впевнений, що зможу знайти цю опцію "Кодування -> Перетворити в Ansi".
— Flimm

Просто ANSI csv у Notepad ++ та зміна кодування файлу на utf8 призводить до перетворення оригінальних іспанських символів, що не мають права ascii, у рядки кодування, які не відповідають оригінальному тексту.
— Джейсон Вільямс

1

Microsoft Excel має можливість експорту електронних таблиць за допомогою кодування Unicode. Дивіться наступний знімок екрана.

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


14
"Текст Unicode" зберігається в UTF-16 LE (Little Endian), а не в UTF-8, як вимагає ОП.
— сокира.

Так, але це найкращий спосіб отримати підтримку Unicode для ваших x-розділених значень у Excel. У мене виникали всілякі проблеми, які намагаються змусити Excel грати в м'яч з UTF-8! Детальніше
— mcNux

1

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


що працювало для мене .. виникли проблеми з грецькими символами, коли експортували mysql db як csv та імпортували його в excel ..
— nikolas

1
Проблема в цьому полягає в тому, як ви генеруєте файл CSV в першу чергу. Якщо ви просто збережіть як файл CSV в Excel, він збереже його в cp1252, який є кодуванням один байт на коду, і тому втрачає інформацію.
— Flimm

1

інше рішення - відкрити файл за допомогою winword і зберегти його як txt, а потім знову відкрити його за допомогою excel, і він буде працювати ISA


1

Зберегти діалогове вікно> Кнопка інструментів> Веб-параметри> Вкладка кодування


Це не працює для мене. Те, як я це розумію, набуває чинності лише при збереженні у форматі веб (HTML тощо), а не при збереженні як CSV.
— jogojapan

Працює для мене - офіс 2007
— Елія Вайс

не працює в офісі 2010 року, вибираючи будь-який профіль CSV.
— Харт

0

У мене є та ж проблема, і я зіткнувся з цим доповненням, і воно прекрасно працює в excel 2013, крім excel 2007 та 2010, про які воно згадується.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.