it-swarm.dev

Excel para CSV com codificação UTF8

Eu tenho um arquivo do Excel que tem alguns caracteres espanhóis (tils, etc.) que eu preciso para converter em um arquivo CSV para usar como um arquivo de importação. No entanto, quando faço Save As CSV, ele manipula os caracteres espanhóis "especiais" que não são ASCII caracteres. Ele também parece fazer isso com aspas à esquerda e à direita e longos traços que parecem estar vindo do usuário original, criando o arquivo do Excel no Mac.

Como o CSV é apenas um arquivo de texto, tenho certeza de que ele pode manipular uma codificação UTF8, por isso acredito que seja uma limitação do Excel, mas estou procurando uma maneira de obter do Excel para CSV e manter os caracteres não ASCII intacto.

561
Jeff Treuting

Uma solução simples é usar o Google Spreadsheet. Cole (valores somente se você tiver fórmulas complexas) ou importe a planilha e faça o download do CSV. Eu tentei alguns personagens e funciona muito bem.

OBSERVAÇÃO: o Planilhas Google tem limitações ao importar. Veja aqui .

OBSERVAÇÃO: tenha cuidado com dados confidenciais no Planilhas Google.

EDIT: Outra alternativa - basicamente eles usam VB macro ou addins para forçar o salvamento como UTF8. Eu não tentei nenhuma dessas soluções, mas elas parecem razoáveis.

384
nevets1219

Eu encontrei o aplicativo de planilha do OpenOffice , Calc, é muito bom em lidar com dados CSV.

Na caixa de diálogo "Salvar como ...", clique em "Opções de formatação" para obter diferentes codificações para CSV. LibreOffice funciona da mesma maneira AFAIK.

 calc save dialog

122
aendrew
  1. Salve a planilha do Excel como "Texto Unicode (.txt)". A boa notícia é que todos os personagens internacionais estão em UTF16 (note, não em UTF8). No entanto, o novo arquivo "* .txt" é delimitado por tabulação, não delimitado por vírgula e, portanto, não é um verdadeiro CSV.

  2. (opcional) A menos que você possa usar um arquivo delimitado por TAB para importação, use seu editor de texto favorito e substitua os caracteres TAB por vírgulas ",".

  3. Importe seu arquivo * .txt no aplicativo de destino. Certifique-se de que ele aceita o formato UTF16.

Se o UTF-16 tiver sido implementado corretamente com suporte a pontos de código não-BMP, você poderá converter um arquivo UTF-16 em UTF-8 sem perder informações. Deixo para você encontrar o seu método favorito de fazer isso.

Eu uso este procedimento para importar dados do Excel para o Moodle.

105
elomage

Eu sei que esta é uma pergunta antiga, mas aconteceu de eu chegar a essa questão enquanto luto com as mesmas questões que o OP.

Não tendo encontrado nenhuma das soluções oferecidas uma opção viável, resolvi descobrir se há uma maneira de fazer isso apenas usando o Excel.

Felizmente, descobri que o problema de caracteres perdidos só acontece (no meu caso) ao salvar do formato xlsx no formato csv. Eu tentei salvar o arquivo xlsx em xls primeiro, depois em csv. Na verdade funcionou.

Por favor, experimente e veja se funciona para você. Boa sorte.

41
Eric

Você pode usar iconv comando em Unix (também disponível no Windows como libiconv ).

Depois de salvar como CSV no Excel na linha de comando, coloque:

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

(lembre-se de substituir o cp1250 pela sua codificação).

Funciona rápido e ótimo para arquivos grandes como banco de dados de códigos postais, que não podem ser importados para o GoogleDocs (limite de 400.000 células).

35
pmilewski

A única "maneira fácil" de fazer isso é a seguinte. Primeiro, perceba que existe uma diferença entre o que é exibido e o que é mantido oculto no arquivo .csv do Excel.

(1) Abrir um arquivo do Excel onde você tem a informação (.xls, .xlsx)

(2) No Excel, escolha "CSV (Comma Delimited) (* .csv) como o tipo de arquivo e salve como esse tipo.

(3) No NOTEPAD (encontrado em "Programas" e, em seguida, Acessórios no menu Iniciar), abra o arquivo .csv salvo no bloco de notas

(4) Em seguida, escolha -> Salvar como ... e na parte inferior da caixa "salvar como", há uma caixa de seleção rotulada como "Codificação". Selecione UTF-8 (NÃO use ANSI ou você perderá todos os acentos, etc.). Depois de selecionar UTF-8, salve o arquivo em um nome de arquivo ligeiramente diferente do original.

Este arquivo está em UTF-8 e retém todos os caracteres e acentos e pode ser importado, por exemplo, para o MySQL e outros programas de banco de dados.

Esta resposta é tirada de este fórum .

24
Nick

Outro que achei útil: " Numbers " permite configurações de codificação ao salvar como CSV.

22
leander

Você pode fazer isso em uma máquina Windows moderna sem software de terceiros. Esse método é confiável e lida com dados que incluem vírgulas, caracteres de tabulação, caracteres CJK, etc.

1. Salvar do Excel

No Excel, salve os dados em file.txt usando o tipo Unicode Text (*.txt).

2. Inicie o PowerShell

Execute powershell no menu Iniciar.

3. Carregar o arquivo no PowerShell

$data = Import-Csv C:\path\to\file.txt -Delimiter "`t" -Encoding BigEndianUnicode

4. Salve os dados como CSV

$data | Export-Csv file.csv -Encoding UTF8 -NoTypeInformation
22
Don Cruickshank

"nevets1219" está certo sobre o Google docs, no entanto, se você simplesmente "importa" o arquivo, ele não o converte em UTF-8.

Mas se você importar o CSV para uma planilha do Google existente, ele será convertido em UTF-8.

Aqui está uma receita:

  • Na tela principal do Google Docs (ou Drive), clique no botão "Criar" e escolha "Planilha".
  • No menu "Arquivo", escolha "Importar"
  • Clique em "Choose File"
  • Escolha "Substituir planilha"
  • Escolha o personagem que você está usando como Separador
  • Clique em "Importar"
  • No menu "Arquivo", escolha "Baixar como" -> CSV (planilha atual)

O arquivo resultante estará em UTF-8

14
RedYeti

Usando o Notepad ++

Isso consertará o arquivo CSV corrompido salvo pelo Excel e o salvará novamente na codificação correta.

  • Exportar CSV do Excel
  • Carregar no Notepad ++
  • Corrigir codificação
  • Salve 

Excel salva no CP-1252/Windows-1252. Abra o arquivo CSV no Notepad ++. Selecione

Encoding > Character Sets > Western European > Windows-1252

Então

Encoding > Convert to UTF-8
File > Save

Primeiro diga ao Notepad ++ a codificação, então convert. Algumas dessas outras respostas estão sendo convertidas sem definir a codificação correta primeiro, tornando o arquivo ainda mais complexo. Eles transformariam o que deveria ser em . Se o seu personagem não se encaixa no CP-1252, ele já foi perdido quando foi salvo como CSV. Use outra resposta para isso.

8
Chloe

Para aqueles que procuram uma solução totalmente programática (ou pelo menos do lado do servidor), tive grande sucesso usando a ferramenta xls2csv do catdoc.

Instalar o catdoc:

apt-get install catdoc

Faça a conversão:

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

Isso está brilhando rápido.

Observe que é importante incluir o sinalizador -d utf-8, caso contrário ele codificará a saída na codificação cp1252 padrão e você corre o risco de perder informações.

Note que xls2csv também só funciona com arquivos .xls, ele não funciona com .xlsx arquivos.

8
mpowered

Que tal usar o Powershell?.

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

maneira mais fácil: não há necessidade Open Office e google docs

  1. Salve seu arquivo como "arquivo de texto Unicode";
  2. agora você tem um arquivo de texto unicode
  3. abri-lo com o "bloco de notas" e "Salvar como" com a seleção de "utf-8" ou outra página de código que você deseja
  4. renomeie a extensão de arquivo de "txt" para "csv". Isso resultará em um arquivo csv UTF-8 delimitado por tabulação.
  5. Se você quiser um arquivo delimitado por comma -, abra o arquivo csv que acabou de renomear e substitua todas as guias por vírgulas. Para fazer isso no bloco de notas no Win 10, basta selecionar um campo de guia e clique em Ctrl+H. Na janela que é aberta, digite uma vírgula , no campo "Substituir por" e clique em "Substituir tudo". Salve seu arquivo. O resultado será um arquivo csv UTF-8 delimitado por vírgulas.

Não abri-lo com o MS-Office mesmo assim !!! Agora você tem um arquivo CSV delimitado por tabulações. Ou, uma delimitada por vírgula se você aplicou a etapa número 5.

6
Solivan

Por mais engraçado que pareça, a maneira mais fácil que encontrei de salvar minha planilha de 180 MB em um arquivo UTF8 CSV foi selecionar as células no Excel, copiá-las e colar o conteúdo da área de transferência no SublimeText.

5
oscaroscar

No Excel 2016, temos uma opção de exportação de CSV dedicada ao formato UTF-8.

4
Nolmë Informatique
  1. Salvar arquivo xls (arquivo Excel) como texto Unicode => arquivo será salvo em formato de texto (.txt)

  2. Altere o formato de .txt para .csv (renomeie o arquivo de XYX.txt para XYX.csv

3
Mena

Não consegui encontrar uma solução VBA para esse problema no Mac Excel. Simplesmente parecia não haver saída para o texto UTF-8.

Então eu finalmente tive que desistir do VBA, aprender o AppleScript. Não foi tão ruim quanto eu pensava.

A solução é descrita aqui: http://talesoftech.blogspot.com/2011/05/Excel-on-mac-goodbye-vba-hello.html

3
anroy

Eu também me deparei com o mesmo problema, mas há uma solução fácil para isso.

  1. Abra seu arquivo xlsx no Excel 2016 ou superior.
  2. Em "Salvar como", escolha esta opção: "(CSV UTF-8 (Delimitado por vírgula) *. Csv)"

Funciona perfeitamente e é gerado um arquivo csv que pode ser importado em qualquer software. Eu importei este arquivo csv no meu banco de dados SQLITE e ele funciona perfeitamente com todos os caracteres unicode intactos.

3
Krish

Maneira fácil de fazer isso: baixe o Open Office ( aqui ), carregue a planilha e abra o arquivo do Excel (.xls ou .xlsx). Em seguida, basta salvá-lo como um arquivo CSV de texto e uma janela é aberta para manter o formato atual ou salvar como um formato .ODF. selecione "manter o formato atual" e, na nova janela, selecione a opção que funciona melhor para você, de acordo com o idioma em que seu arquivo foi gravado. Para o idioma espanhol, selecione Western Europe (Windows-1252/ WinLatin 1) e o arquivo funciona bem. Se você selecionar Unicode (UTF-8), não funcionará com os caracteres espanhóis.

3
Yessus

Assumindo um ambiente Windows, salve e trabalhe com o arquivo como de costume no Excel, mas depois abra o arquivo do Excel salvo no Gnome Gnumeric (livre). Salve a planilha do Gnome Gnumeric como CSV que, para mim, salva-a como CSV UTF-8.

3
spring_chicken

O Excel normalmente salva um arquivo csv como codificação ANSI em vez de utf8.

Uma opção para corrigir o arquivo é usar o Notepad ou o Notepad ++:

  1. Abra o .csv com o bloco de notas ou o Notepad ++.
  2. Copie o conteúdo para a área de transferência do seu computador.
  3. Exclua o conteúdo do arquivo.
  4. Altere a codificação do arquivo para utf8.
  5. Cole o conteúdo da área de transferência.
  6. Salve o arquivo.
2
Jason Williams

Eu escrevi um pequeno script Python que pode exportar planilhas em UTF-8.

Você só precisa fornecer o arquivo do Excel como primeiro parâmetro seguido pelas planilhas que deseja exportar. Se você não fornecer as planilhas, o script exportará todas as planilhas que estão presentes no arquivo do 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
Julian

Codificação -> Converter para Ansi irá codificá-lo em ANSI/UNICODE. Utf8 é um subconjunto do Unicode. Talvez em ANSI será codificado corretamente, mas aqui estamos falando de UTF8, @SequenceDigitale.

Existem maneiras mais rápidas, como exportar como csv (delimitado por vírgulas) e, em seguida, abrir esse csv com o Notepad ++ (livre) e, em seguida, Encoding> Convert to UTF8. Mas somente se você tiver que fazer isso uma vez por arquivo. Se você precisa mudar e exportar com frequência, então o melhor é a solução LibreOffice ou GDocs.

1
Lucas

outra solução é abrir o arquivo pelo winword e salvá-lo como txt e depois reabri-lo pelo Excel e ele irá funcionar o ISA

1
Essam Altantawi

O Microsoft Excel tem uma opção para exportar planilha usando codificação Unicode. Veja a captura de tela a seguir.

enter image description here

1
vladaman

Salvar Diálogo> Botão Ferramentas> Opções da Web> Guia Codificação

1
Elia Weiss

Uma segunda opção para "nevets1219" é abrir seu arquivo CSV no Notepad ++ e fazer uma conversão para ANSI.

Escolha no menu superior: Codificação -> Converter para Ansi

1
SequenceDigitale.com

Veio o mesmo problema e folheou este post. Nenhum dos acima trabalhou para mim. Por fim, converti meus .xls Unicode em .xml (escolha Salvar como ... XML Spreadsheet 2003) e produzi o caractere correto. Então escrevi código para analisar o xml e extraí o conteúdo para meu uso.

1
Silent Sojourner

abra bem o arquivo .csv com o notepad ++. Se você ver que sua codificação é boa (você vê todos os caracteres como deveriam), pressione a codificação, então converta para ANSI else - descubra qual é a sua codificação atual

1
Marius Gri

Eu tenho o mesmo problema e me deparo com this add, e funciona perfeitamente bem no Excel 2013 ao lado do Excel 2007 e 2010, para o qual é mencionado.

0
academic.user

Eu precisava automatizar esse processo no meu Mac. Eu originalmente tentei usar catdoc/xls2csv como sugerido por mpowered, mas xls2csv teve problemas para detectar a codificação original do documento e nem todos os documentos eram os mesmos. O que acabei fazendo foi configurar a codificação de saída da página padrão como UTF-8 e depois fornecer os arquivos para o Automator da Apple, aplicando a ação Convert Format of Excel Files para converter em Web Page (HTML). Em seguida, usando PHP, DOMDocument e XPath, consultei os documentos e os enviei para CSV.

Este é o script PHP (process.php):

<?php
$pi = pathinfo($argv[1]);
$file = $pi['dirname'] . '/' . $pi['filename'] . '.csv';
$fp = fopen($file,'w+');
$doc = new DOMDocument;
$doc->loadHTMLFile($argv[1]);
$xpath = new DOMXPath($doc);
$table = [];
foreach($xpath->query('//tr') as $row){
    $_r = [];
    foreach($xpath->query('td',$row) as $col){
        $_r[] = trim($col->textContent);
    }
    fputcsv($fp,$_r);
}
fclose($fp);
?>

E este é o comando Shell que usei para converter os documentos HTML para csv:

find . -name '*.htm' | xargs -I{} php ./process.php {}

Esta é uma maneira muito, realmente indireta de fazer isso, mas foi o método mais confiável que eu encontrei.

0
Kyle