Excel para CSV com codificação UTF8 [fechado]

607

Eu tenho um arquivo do Excel que possui alguns caracteres em espanhol (til etc.) que preciso converter em um arquivo CSV para usar como arquivo de importação. No entanto, quando eu Salvar como CSV, ele manipula os caracteres espanhóis "especiais" que não são caracteres ASCII. Também parece fazer isso com as aspas esquerda e direita e traços longos que parecem vir do usuário original que criou o arquivo do Excel no Mac.

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

Jeff Treuting
fonte
15
Eu vi essa pergunta antes de postar, mas trata-se de já ter um CSV UTF8 e abri-lo no Excel e não o contrário.
Jeff Treuting
7
As respostas abaixo parecem funcionar, mas são apenas soluções alternativas. Alguém sabe como fazer o Excel fazer isso?
NielW 27/01
2
Eu queria largar meus 2 centavos: Depois de muitas tentativas e erros, tentativas de usar funções VBA, etc ... (estou usando o Excel 97 por vários motivos) ... simplesmente Salvando como "CSV (MSDOS) "o formato resolveu esse problema para mim. No meu caso, os dados CSV do webinar da Citrix (GotoWebinar) terminam com caracteres para quebrar algum código do Apex em nosso final - salvar em "CSV (MSDOS)" me resolve (anteriormente) carregar a exportação de CSV no Notepad ++ e colá-la em um UTF- 8 arquivo em branco e salvando novamente. :-P :-)
AMM
2
Essa é uma limitação muito irritante do Excel. Abri um pedido de recurso uservoice sobre isso: excel.uservoice.com/forums/... , sinta-se livre para votar e fazer acontecer
Doron Yaacoby
7
de acordo com o uservoice Excel, Microsoft começou a trabalhar em UTF-8 para .csv últimos mês excel.uservoice.com/forums/...
moloko

Respostas:

405

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

NOTA: O Planilhas Google tem limitações ao importar. Veja aqui .

NOTA: Tenha cuidado com dados confidenciais com o Planilhas Google.

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

nevets1219
fonte
63
Talvez Joel Slotsky (ex-PM do Excel) possa enviar a eles seu post de uma década no The Absolute Minimum Todo desenvolvedor de software deve saber absolutamente, positivamente, positivamente sobre Unicode e conjuntos de caracteres ?
Indolering
8
Com o bloco de notas normal do Windows (usando salvar como e, em seguida, escolhendo utf-8 na opção de codificação) funcionou para mim. Para mim, essa é a melhor abordagem, pois isso deve ser feito por usuários que não têm direitos de administrador em suas máquinas; portanto, a instalação de software adicional não é necessária.
Fer
9
OpenOffice JustWorks (tm) sem problemas - Eu acho que deveria ser incluído
Rbjz
9
Uhhh Eu apenas senti um arrepio nas minhas costas. E se o seu arquivo excel tiver 200.000 linhas? Ou contém dados confidenciais que você não deseja incluir em um spreadsheat do Excel? Use o Openoffice / Libreoffice, se necessário.
Seb
2
E se o tamanho do arquivo for grande? As folhas Goolge têm um limite de tamanho em torno de 75M, se bem me lembro. Eu tenho um arquivo é 700M
News_is_Selection_Bias
133

Eu descobri que o aplicativo de planilha do OpenOffice , Calc, é realmente bom em lidar com dados CSV.

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

calc save dialog

aendrew
fonte
Tenho certeza de que isso funciona, simplesmente não tenho o OpenOffice, então o Google Docs ficou mais fácil na minha situação. mas obrigado pela sugestão
Jeff Treuting
19
O OpenOffice Calc tem mais e melhores opções ao abrir e salvar arquivos "CSV" (separadores de campos, codificação etc.) do que o Google Docs e o Excel. Além disso, o Google Docs atualmente sofre de um limite de 400.000 células por planilha, o que o OpenOffice Calc não.
Christian Davén 20/09/12
3
Posso confirmar que o LibreOffice também funciona: oferece opções de codificação de caracteres na exportação que infelizmente não existem no Excel.
Rupert Rawnsley
1
Essa é uma ótima opção para quem trabalha com dados confidenciais. O pacote OpenOffice pode ser uma instalação portátil para aqueles com máquinas bloqueadas.
8197 Nathan
119
  1. Salve a planilha do Excel como "Texto Unicode (.txt)". A boa notícia é que todos os caracteres internacionais estão em UTF16 (observe, não em UTF8). No entanto, o novo arquivo "* .txt" é delimitado por TAB, não 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. Verifique se ele aceita o formato UTF16.

Se o UTF-16 tiver sido implementado corretamente com suporte para 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 fazê-lo.

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

elomage
fonte
5
Finalmente algo que funcionou! Tentei as opções acima do Excel no Excel 2013 sem sucesso. Acabei de usar \ t como caractere dividido quando o analisei e funcionou perfeitamente!
Mattias Lindberg
1
Necessário exportar um XLS como CSV para importar no MySQL. No Excel 2003, exportei no formato "Unicode Text (.txt)", usei o Notepad ++ para substituir a TAB e ;, em seguida, importei o arquivo txt para o phpmyadmin com o padrão "Conjunto de caracteres do arquivo: utf-8", Format "CSV usando LOAD DATA ". Toda a codificação foi transferida corretamente.
Kai Noack 26/05
3
Obrigado. Isso faz sentido. Por que a Microsoft ainda se recusa a usar a UTF como padrão me bate.
Oskar Limka
4
@OskarLimka: Quando você diz "UTF", você quer dizer UTF-8 ou UTF-16? Porque a Microsoft usa UTF-16 bastante.
Flimm
7
"A boa notícia é que todos os caracteres internacionais estão em UTF16 (observe, não em UTF8)." : absurdo completo . UTF-8 e UTF-16 são duas maneiras de codificar todo o conjunto de pontos de código Unicode.
43

Sei que essa é uma pergunta antiga, mas me deparei com essa questão enquanto lutava com os mesmos problemas do OP.

Não tendo encontrado nenhuma das soluções oferecidas como uma opção viável, propus-me a descobrir se existe uma maneira de fazer isso usando o Excel.

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

Experimente e veja se funciona para você. Boa sorte.

Eric
fonte
3
Para mim, no Excel para Mac 2011, isso funciona, mas apenas se eu escolher Windows comma separated (CSV). Não funciona se eu usar as opções padrão ou DOS CSV - ambas substituem os caracteres acentuados por caracteres indesejados aleatórios. Testado para caracteres, incluindo é, è, â... Não sei se é real UTF8 mas os personagens não são mutilado.
user56reinstatemonica8
12
Confirmação rápida - os arquivos produzidos com este método no (Excel para Mac 2011) não produzem csvs UTF-8, MAS , eles produzem CSVs que contêm pelo menos os caracteres corretos e, portanto, podem ser convertidos sem problemas para UTF8 em um editor de texto , que é um grande passo em frente ao lixo ridículo e mutilado que o Excel lança por padrão.
user56reinstatemonica8
Sim, concordou, isso funcionou para mim também (Excel Mac 2011) e realmente merece mais votos.
Cbmanica
1
Isso não funcionou muito bem para mim (usando o Excel 2007). Eu tinha 2 caracteres não ASCII no meu arquivo e um deles foi salvo OK dessa maneira, o outro não.
EM
1
Observe que o arquivo CSV resultante estará em UTF-16, não em UTF-8, conforme a pergunta.
Flimm
38

Você pode usar o comando iconv no 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 excelente para arquivos grandes, como o banco de dados de códigos postais, que não podem ser importados para o GoogleDocs (limite de 400.000 células).

pmilewski
fonte
5
Isso é inútil se seu conteúdo contiver caracteres que não podem ser codificados em 1250, a melhor maneira seria exportar como "Unicode .txt" no Excel e usar iconv para converter do Utf16. Talvez também faça um sedou trpara traduzir de '\ t' para ','
Sebastian
5
A codificação padrão do Excel parece ser CP858 ao salvar como CSV ou MS-DOS CSV e Windows 1252 ao salvar como Windows CSV (conforme testado no Excel para Mac 2011).
Claymation
4
Concordo plenamente que isso é inútil, pois quando o Excel salva no formato .csv, ele perde informações quando se trata de pontos de código Unicode que não podem ser codificados em uma codificação de um byte por ponto de código.
Flimm
26

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

1. Salve do Excel

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

2. Inicie o PowerShell

Execute powershellno menu Iniciar.

3. Carregue 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
Don Cruickshank
fonte
2
Esse método funcionou perfeitamente para um arquivo CSV com mais de 15.000 registros, com linhas acima do limite de 1024 caracteres imposto pelo bloco de notas. Leva alguns segundos e não usa software de terceiros. Obrigado!
absoluta
Ah, mesmo quando tentei usar o Planilhas Google, tive o mesmo problema. Talvez essa estratégia do PowerShell funcionasse. Aqui estava o meu problema. Para certos caracteres, como certos emojis, você precisa usar CHARACTER SET utf8mb4como descrito aqui: stackoverflow.com/a/10959780/470749
Ryan
1
@ Ryan Essa questão é específica do MySQL. Eu apenas tentei o caractere problemático nessa pergunta e funcionou bem no Excel e no PowerShell.
18114 Don Crickshank
24

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

  1. Abra um arquivo do Excel em que você tem as informações (.xls, .xlsx)
  2. No Excel, escolha "CSV (delimitado por vírgulas) (* .csv) como o tipo de arquivo e salve como esse tipo.
  3. No NOTEPAD (encontrado em "Programas" e depois em 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ê perde todos os detalhes, etc.). Após selecionar UTF-8, salve o arquivo em um nome ligeiramente diferente do original.

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

Esta resposta é retirada deste fórum .

usuario
fonte
9
Isso está incorreto, devido à etapa 2, salvando como CSV. O problema é que o Excel salva o arquivo CSV no cp1252, que é uma codificação de um byte por ponto de código. Isso leva à perda de informações para os caracteres que não cabem em um byte.
Flimm
Funcionou para mim, mas não consigo entender o porquê. Meu arquivo gerado por javascript é sempre lido incorretamente no Excel (como uma codificação diferente). Mas quando abro no bloco de notas e salvo como utf-8, ele funciona bem! Portanto, parece que existem metadados com a codificação. Como funciona? Se o bloco de notas puder salvar arquivos UTF-8 CSV e o Excel puder lê-los, é possível no meu programa gerar arquivos CST UTF-8 corretos, que o Excel pode ler?
Felipeaf 29/08/16
Trabalhou para mim. Em um XSLX convertido do Access. Os formatos diacríticos e somente LF e data ISO estão OK. Um ou outro não funcionou com soluções mais populares.
RolfBly
21

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

leander
fonte
8
^ é uma aplicação no Mac OSX
Sruit A.Suk
Também tenha cuidado com o Numbers, pois ele tem limitação no número de linhas, e eu converti dados como este antes de não perceber que ele havia cortado alguns deles. O Excel / CSV tem limites muito mais altos.
MrE
14

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

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

Aqui está uma receita:

  • Na tela principal do Documentos (ou Google Drive), clique no botão "Criar" e escolha "Planilha"
  • No menu "Arquivo", escolha "Importar"
  • Clique em "Escolher arquivo"
  • Escolha "Substituir planilha"
  • Escolha o caractere que você está usando como separador
  • Clique em "Importar"
  • No menu "Arquivo", escolha "Fazer o download como" -> CSV (planilha atual)

O arquivo resultante estará em UTF-8

RedYeti
fonte
2
O problema com esta resposta é como você gerou o arquivo CSV em primeiro lugar. Se você fez isso simplificando o salvamento como CSV no Excel, o arquivo CSV estará no cp1252, que é uma codificação de um byte por ponto de código. Isso levará à perda de informações quando se trata de caracteres que não cabem em um byte.
Flimm
Bem, isso é um problema com qualquer uma dessas respostas. E haverá qualquer resposta sobre como converter para UTF-8, pois não há como saber ou controlar qual era a codificação original.
precisa saber é o seguinte
1
Algumas das respostas falam sobre como contornar esse problema, por exemplo, stackoverflow.com/a/15500052/247696
Flimm
13

Usando o Notepad ++

Isso irá corrigir o arquivo CSV corrompido salvo pelo Excel e salvá-lo novamente na codificação adequada.

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

O 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 informe ao Notepad ++ a codificação e depois converta. Algumas dessas outras respostas são convertidas sem antes definir a codificação adequada, destruindo ainda mais o arquivo. Eles iria transformar o que deveria ser em . Se seu personagem não se encaixa no CP-1252, ele já estava perdido quando foi salvo como CSV. Use outra resposta para isso.

Chloe
fonte
Talvez eu entenda isso errado, mas você não pode salvar o arquivo como um ".csv" no Notepad ++ e é disso que se trata.
Daniel Maurer
1
Sim você pode. Você está apenas salvando um arquivo de texto e este .csvé um arquivo de texto. Esta resposta abrirá o arquivo CSV corrompido pelo Excel, corrija-o e salve-o novamente com a codificação adequada.
Chloe
O que você está comunicando tem consequências de longo alcance. Empregando esse método eminente, podemos obter uma qualidade de dados mais alta! Bravo! (Quiz: por que esse comentário é tão
intrigante
9

No Excel 2016 e posteriores (incluindo o Office 365), há uma opção CSV dedicada ao formato UTF-8.

No Office 365, salve como; onde anteriormente se pode ter escolhido CSV (delimitado por vírgulas), agora um dos tipos de arquivo que você pode salvar é CSV UTF-8 (delimitado por vírgulas) (* .csv)

Nolmë Informatique
fonte
1
Você deve fornecer algumas instruções sobre como usar essa opção.
Rovyko 15/03/19
1
@ Dexgecko com certeza: é chamado de botão / menu "Salvar". Agora, existem quatro tipos de exportação de CSV no Excel 2016 no Windows: o CSV salva como "ANSI" (Latin1 mais ou menos equivalente, mas que pode ser diferente com uma instalação de sistema operacional não ocidental, não tenho certeza), UTF-8 CSV salva como UTF-8 com BOM, CSV (DOS) salva como CP850 (mais uma vez, depende mais da instalação?) e CSV (Mac) salva como MacRoman.
No entanto, o Excel poderá ler apenas arquivos UTF-8 e ANSI CSV (o Excel pode usar a BOM para escolher). Para importar de outra codificação, renomeie como .txt, abra no Excel (você tem uma longa lista de codificações para escolher) e, como ele não interpretará o separador corretamente, use o botão "converter" para dividir as linhas. Você também pode usar esse truque ao importar um CSV de uma convenção de idioma diferente (em francês, por exemplo, o separador arquivado é um ponto e vírgula, pois a vírgula já é usada como separador decimal).
1
@ Jean-ClaudeArbaut Estranho, não vejo uma opção CSV UTF-8 no meu Excel 2016.
rovyko
1
@dexgecko Estranho, de fato. De acordo com esta página (em francês, desculpe), a funcionalidade foi adicionada em novembro de 2016, na versão 1610. Atualmente, tenho a versão 1802. No entanto, pensei que apenas o Office 365 tivesse esse tipo de evolução e estou usando o Office Pro 2016 (não o sabor do 365). Talvez tente atualizar seu Office.
8

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.

Instale o catdoc:

apt-get install catdoc

Faça a conversão:

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

Isso é incrivelmente rápido.

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

Observe que xls2csvtambém funciona apenas com .xlsarquivos, não funciona com .xlsxarquivos.

mpowered
fonte
Ou escolher uma codificação de saída diferente, não pode resolver os problemas de todos com uma única resposta :-)
mpowered
2
Eu sei que é lamentável, mas o fato é que esta resposta vai causar problemas para alguns usuários. O fato de você apenas executar isso com caracteres que se encaixam no cp1252 é apenas uma sorte, você não forneceu nenhum aviso sobre esse risco na resposta, apenas disse que ele "funcionou sem problemas". Você não foi solicitado a resolver os problemas de todos, apenas os OP, que muitas pessoas compartilham.
Flimm
1
Lá vai você, eu corrigi o problema na resposta e removi o voto negativo.
Flimm
7

Que tal usar o Powershell.

Get-Content 'C:\my.csv' | Out-File 'C:\my_utf8.csv' -Encoding UTF8
Michael Schau
fonte
1
O texto dos caracteres em espanhol não-ascii será alterado do caractere original em espanhol para a string de codificação usada pelo ANSI. Portanto, o texto não será o mesmo que o original.
Jason Williams
7

Maneira mais fácil: não é necessário abrir o Office e o google docs

  1. Salve seu arquivo como "arquivo de texto Unicode";
  2. agora você tem um arquivo de texto unicode
  3. abra-o com "bloco de notas" e "Salvar como" selecionando "utf-8" ou outra página de código que você deseja
  4. renomeie a extensão do arquivo de "txt" para "csv". Isso resultará em um arquivo csv UTF-8 delimitado por tabulação.
  5. Se você deseja um arquivo delimitado por vírgula , abra o csvarquivo que você 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 clicar em Ctrl+H. Na janela que se abre, 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írgula.

Não abra com o MS-Office de qualquer maneira !!! Agora você tem um arquivo CSV delimitado por tabulação. Ou um delimitado por vírgula, se você aplicou a etapa número 5.

Solivan
fonte
2
Para um arquivo delimitado por tabulação, pode ser melhor usar uma .txtextensão. csv, ou seja, arquivos separados por vírgula, é apenas confuso.
dof1985
5

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

oscaroscar
fonte
1
Isso funciona porque o Excel fornece uma versão TSV da seleção através da área de transferência. Você também pode usar o Bloco de notas em vez do SublimeText, mas lembre-se de salvar com a codificação UTF-8, se precisar!
Don Cruickshank
3

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

Por fim, desisti do VBA, mordi a bala e aprendi 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

anroy
fonte
3

Supondo um ambiente Windows, salve e trabalhe com o arquivo normalmente no Excel, mas abra o arquivo salvo no Gnome Gnumeric (gratuito). Salve a planilha do Gnome Gnumeric como CSV, que - para mim de qualquer maneira - a salva como UTF-8 CSV.

spring_chicken
fonte
3

Maneira fácil de fazer isso: baixe o escritório aberto ( aqui ), carregue a planilha e abra o arquivo do excel ( .xlsou .xlsx). Em seguida, salve-o como um arquivo CSV de texto e uma janela será aberta, solicitando a manutenção do formato atual ou o formato .ODF. selecione "manter o formato atual" e, na nova janela, selecione a opção que melhor funciona para você, de acordo com o idioma em que seu arquivo foi gravado. Para o idioma espanhol, selecione Europa Ocidental ( Windows-1252/ WinLatin 1) e o arquivo funciona perfeitamente. Se você selecionar Unicode ( UTF-8), ele não funcionará com os caracteres em espanhol.

Yessus
fonte
3
Não há razão para que o UTF-8 não funcione com caracteres em espanhol.
Flimm
3
  1. Salvar arquivo xls (arquivo do Excel) como texto Unicode => o arquivo será salvo no formato de texto (.txt)

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

Mena
fonte
3
Isso não funciona porque suas instruções não incluem a etapa necessária da conversão de guias em vírgulas nos dados do arquivo.
Matthew Rodatus
1
O "texto Unicode" do Excel é UTF-16, não UTF-8, conforme solicitado na pergunta.
Flimm
3

Eu também me deparei com o mesmo problema, mas existe 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. Importei esse arquivo csv no meu banco de dados SQLITE e ele funciona perfeitamente com todos os caracteres unicode intactos.

Krish
fonte
Esta opção não está disponível na minha cópia do Excel 2016. Você está usando a versão do Office 365?
18118 Don Crickshank
2

Me deparei com o mesmo problema e pesquisei este post no Google. Nenhuma das opções acima funcionou para mim. Por fim, converti meu Unicode .xls para .xml (escolha Salvar como ... XML Spreadsheet 2003) e produzi o caractere correto. Depois, escrevi o código para analisar o xml e extraí o conteúdo para meu uso.

Silent Sojourner
fonte
2

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

Você apenas precisa fornecer o arquivo do Excel como primeiro parâmetro, seguido pelas folhas que deseja exportar. Se você não fornecer as planilhas, o script exportará todas as planilhas 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)
Julian
fonte
Atualizei um pouco a implementação e criei um gist gist.github.com/julianthome/2d8546e7bed869079ab0f409ae0faa87
Julian
2

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

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

  1. Abra o .csv com o bloco de notas ou o bloco de notas ++.
  2. Copie o conteúdo para a área de transferência do computador.
  3. Exclua o conteúdo do arquivo.
  4. Mude a codificação do arquivo para utf8.
  5. Cole o conteúdo de volta da área de transferência.
  6. Salve o arquivo.
Jason Williams
fonte
Não tenho certeza sobre as versões antigas do NP ++, mas na versão atual você pode apenas selecionar Codificação> Converter em UTF-8. substitui os passos 2-5
Felk
1

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

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

SequenceDigitale.com
fonte
Não faço ideia por que você foi derrotado. O Notepad ++ fez isso por mim. Não é possível armazenar meu arquivo na planilha do Google, pois é confidencial.
Zane
3
O problema com esta resposta é como você gera o arquivo CSV em primeiro lugar. Se você simplesmente salvar como CSV no Excel, a codificação será cp1252, que é uma codificação de um byte por ponto de código e, portanto, perderá informações dos caracteres que não se encaixam nela. Além disso, no final, você deve converter para UTF-8, e não para Ansi, se desejar fazer o que a pergunta pediu.
Flimm
Esta é de longe a resposta mais fácil da IMO. Estou usando o Excel 2016 e o ​​encontrei salvo na codificação ANSI por padrão, mas o coloquei no UTF-8, que é o que eu queria.
Rovyko 15/03/19
1

Codificação -> Convert to Ansi codificará em ANSI / UNICODE. Utf8 é um subconjunto de Unicode. Talvez em ANSI seja codificado corretamente, mas aqui estamos falando sobre UTF8, @SequenceDigitale.

Existem maneiras mais rápidas, como exportar como csv (delimitado por vírgulas) e, em seguida, abrir esse csv com o Notepad ++ (gratuito) e depois em Codificação> Converter em UTF8. Mas somente se você precisar fazer isso uma vez por arquivo. Se você precisar alterar e exportar com frequência, o melhor é a solução LibreOffice ou GDocs.

Lucas
fonte
5
"Utf8 é um subconjunto de Unicode": isso não faz sentido. UTF-8 é uma codificação de Unicode.
jameshfisher
Não tenho certeza de encontrar a opção "Codificação -> Converter em ANSI".
Flimm
Simplesmente um csv ANSI no Notepad ++ e alterar a codificação do arquivo para utf8 faz com que os caracteres espanhóis não-ascii originais sejam convertidos em seqüências de caracteres de codificação que não correspondem ao texto original.
Jason Williams
1

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

insira a descrição da imagem aqui

vladaman
fonte
14
O "Texto Unicode" salva no UTF-16 LE (Little Endian), não no UTF-8, conforme solicitado pelo OP.
machado.
Sim, mas é a melhor maneira de obter suporte Unicode para seus valores separados por x no Excel. Eu tive todos os tipos de problemas tentando fazer o Excel jogar bola com o UTF-8! Leia mais
mcNux
1

abra .csv bem com o bloco de notas ++. se a codificação for boa (você vê todos os caracteres como deveriam), pressione a codificação e depois converta para ANSI - descubra qual é a codificação atual

Marius Gri
fonte
que funcionou para mim .. tinha problema com caracteres gregos quando db exportedmysql como CSV e importadas para excel ..
Nikolas
1
O problema disso é como você gera o arquivo CSV em primeiro lugar. Se você simplesmente salvar como arquivo CSV no Excel, ele será salvo no cp1252, que é uma codificação de um byte por ponto de código e, portanto, perderá informações.
Flimm
1

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

Essam Altantawi
fonte
1

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

Elia Weiss
fonte
Isso não funciona para mim. Pelo que entendi, ele só tem efeito ao salvar como formato da Web (HTML etc.), não ao salvar como CSV.
jogojapan
Works for me - office 2007
Elia Weiss
não está trabalhando no office 2010 escolhendo qualquer perfil CSV.
Hart
0

Eu tenho o mesmo problema e me deparei com esse complemento, e ele funciona perfeitamente no Excel 2013, ao lado do Excel 2007 e 2010, para o qual é mencionado.

academic.user
fonte