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.