Excel в CSV с кодировкой UTF8 - PullRequest
567 голосов
/ 19 ноября 2010

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

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

Ответы [ 36 ]

2 голосов
/ 07 июля 2016

Я написал небольшой скрипт на 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)
2 голосов
/ 28 ноября 2017

Excel обычно сохраняет CSV-файл как кодировку ANSI вместо utf8.

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

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

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

1 голос
/ 16 марта 2015

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

1 голос
/ 07 июня 2012

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

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

1 голос
/ 10 июля 2012

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

enter image description here

1 голос
/ 02 ноября 2012

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

1 голос
/ 16 февраля 2011

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

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

1 голос
/ 18 сентября 2012

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

0 голосов
/ 21 октября 2014

(на Mac :) Из Excel сохраните как файл CSV.Откройте файл CSV в TextWrangler (это бесплатно) и используйте «сохранить как».В диалоговом окне сохранения выберите Unicode (UTF-8).Готово

(Полагаю, вы можете сделать это и с TextEdit - если вы играете с настройками открытия и сохранения. Попробуйте открыть файлы: авто, сохранить файлы: UTF-8)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...