Como converter em lote .csv para .xls / xlsx

11

Estou procurando uma maneira de converter rapidamente um diretório de arquivos .csv para o formato .xls ou .xlsx (seria bom se eu pudesse fazer um ou outro).

Existe uma maneira fácil de fazer isso ou preciso instalar um programa de terceiros?

mindless.panda
fonte
1
Não sei por que você precisaria fazê-lo. O CSV está bem aberto no Excel. qualquer pessoa que precise interagir pode abrir sem problemas.
Jody
2
Você está certo O Excel abre csv e xls / xlsx muito bem. Outros programas, no entanto, não. =)
mindless.panda
1
Então, em qual programa você está olhando para usar isso?
Kirk

Respostas:

21

Supondo que você goste e possua Python (por algum motivo), você pode usar este script que eu criei:

import os
import glob
import csv
import xlwt # from http://www.python-excel.org/

for csvfile in glob.glob(os.path.join('.', '*.csv')):
    wb = xlwt.Workbook()
    ws = wb.add_sheet('data')
    with open(csvfile, 'rb') as f:
        reader = csv.reader(f)
        for r, row in enumerate(reader):
            for c, val in enumerate(row):
                ws.write(r, c, val)
    wb.save(csvfile + '.xls')

Corrido no diretório com todos os arquivos CSV, ele irá convertê-los todos e colocar um ".xls" no final.

Para o Excel 2007+ (arquivos xlsx) com suporte para cerca de 1 Mrows:

import os
import glob
import csv
import openpyxl # from https://pythonhosted.org/openpyxl/ or PyPI (e.g. via pip)

for csvfile in glob.glob(os.path.join('.', '*.csv')):
    wb = openpyxl.Workbook()
    ws = wb.active
    with open(csvfile, 'rb') as f:
        reader = csv.reader(f)
        for r, row in enumerate(reader, start=1):
            for c, val in enumerate(row, start=1):
                ws.cell(row=r, column=c).value = val
    wb.save(csvfile + '.xlsx')
Nick T
fonte
2
Em um Macintosh, usei a versão xlsx acima. Eu tive que mudar "rb" para "rU" para contornar o erro "modo de nova linha universal" do Python. O uso de "start = 1" para "linhas no enumerar" e "val no enumerar" criou uma linha em branco acima e uma coluna em branco à esquerda dos dados reais. Alterei ambos para "start = 0", que iniciou os dados na célula A1 (canto superior esquerdo) da planilha (Excel 2011). Também mudei a última linha para "wb.save (os.path.splitext (csvfile) [0] + '.xlsx')" para remover a parte .csv do arquivo (por exemplo, nnnn.csv.xlsx para nnnn. xlsx).
Michael S Taylor
1

Aqui está um script perl que supostamente faz isso, mas parece muito trabalho fazer algo que já está incorporado no Excel.

Kirk
fonte
1

Ainda resta muito a dizer na sua pergunta.

Supondo que seus arquivos CVS estejam em uma estrutura de diretórios semelhante a

c:\randompath\CSV\
    a.csv
    b.csv
    c.csv
      :
      :
    z.csv

e você quer acabar com

c:\randompath\XLS\
    a.xls
    b.xls
    c.xls
      :
      :
    z.xls

Posso pensar em três rotas a seguir, dependendo da proporção entre o trabalho inicial e o trabalho de limpeza que você deseja fazer.

  1. Sem pré-codificação: use o Windows Explorer para navegar até os arquivos CSV, use o método que melhor funcione para selecionar os arquivos a serem convertidos (laço, ctrl + a, ctrl + clique, shift + clique) e clique com o botão direito do mouse em um dos arquivos selecionados e clique em Aberto. Isso abrirá todos os arquivos no Excel. Em seguida, para cada arquivo, você pode selecionar "Arquivo" e "Salvar como" e, finalmente, escolher o novo formato de arquivo no qual deseja que ele seja salvo.
  2. Um arquivo em lote simples: esse arquivo em lote pode usar curingas e / ou um para cada estrutura de loop para abrir cada um dos arquivos CSV para você e, em seguida, você pode processá-los manualmente como antes.
  3. Crie um programa VBA em uma planilha do Excel: o VBA pode abrir automaticamente cada arquivo CSV e salvá-lo em um formato Excel. Você pode até adicionar uma caixa de mensagem simples que oferece uma opção de xls ou xlsx à medida que cada arquivo é aberto.

Observe que eu não escrevi nenhum código para fazer essas coisas (ainda) estou apenas oferecendo idéias para um ponto de partida. Talvez se você pudesse dar mais detalhes sobre o que deseja, poderia obter explicações mais detalhadas sobre como lidar com a abordagem de mim ou de outro membro do fórum.

TedNewk
fonte
0

Para Windows? A versão da linha de comando do CoolUtils " Total CSV Converter " suporta muitos formatos de saída, incluindo JSON, Access, DBF, XML e SQL e custa apenas US $ 40. Ele pode recolocar subdiretórios, excluir arquivos CSV originais, combinar todos os arquivos em um documento e muito mais.

http://www.coolutils.com/TotalCSVConverter

CSVConverter.exe <source> <destination> <options>

O " Advanced CSV Converter " (US $ 40-200) é um EXE portátil que pode fazer isso rapidamente e sem que o Excel precise ser instalado.

http://www.dbf2002.com/csv-converter/commandline.html

"c:\Program Files\CSV Converter\csvcnv.exe" c:\base\*.csv c:\exports\ /TOXLSX /SRCHDR

O " Convert XLS " do SoftInterface pode usar o Excel (mas não é obrigatório) e é mais caro (mais de US $ 500), mas suporta mais formatos e tem mais opções.

http://www.softinterface.com/Convert-XLS/Convert-XLS.htm

"c:\Program Files (x86)\Softinterface, Inc\Convert XLS\ConvertXLS.exe" /V /S"c:\base\*.csv" /T"c:\exports\*.xlsx" /F6 /C51 /M2

" Gnumeric " é um programa de planilha de código aberto que pode executar uma conversão direta, mas foi descontinuado para Windows em agosto de 2014.

http://www.gnumeric.org/

ssconvert file.csv file.xlsx

Se você possui o Python instalado, " csv2odf " é uma opção de código aberto e usa uma abordagem de modelo para gerar arquivos ods, odt, html, xlsx ou docx.

http://sourceforge.net/projects/csv2odf/

csv2odf data.csv template.odt output.xlsx
user326177
fonte
0

Com o Nó 8+ e o bash:

npm install -g pguardiario/csv2xlsx

for file in *.csv; do csv2xlsx "$file"; done
pguardiario
fonte
-1

A maneira fácil: abra o arquivo csv no Microsoft Excel, converta texto em colunas (selecione as células / texto, clique em Menu - Dados - Texto em colunas) e defina sua opção para converter.

elaif
fonte