Come convertire in batch .csv in .xls / xlsx


11

Sto cercando un modo per convertire rapidamente una directory di file .csv nel formato .xls o .xlsx (sarebbe bello se potessi fare uno o / o).

C'è un modo semplice per farlo o devo installare un programma di terze parti?


1
Non sono sicuro del motivo per cui dovresti farlo. CSV è aperto bene in Excel. chiunque abbia bisogno di interagire potrebbe semplicemente aprirsi senza problemi.
Jody,

2
Hai ragione Excel apre CSV e xls / xlsx bene. Altri programmi, tuttavia, non lo fanno. =)
mindless.panda

1
Quindi in quale programma stai cercando di usarlo?
Kirk,

Risposte:


21

Supponendo che ti piaccia e abbia Python (per qualche motivo), potresti usare questo script che ho creato:

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')

Ha funzionato nella directory con tutti i file CSV, li convertirà tutti e schiaffeggerà un ".xls" alla fine.

Per Excel 2007+ (file xlsx) che supportano fino a circa 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')

2
Su un Macintosh, ho usato la versione xlsx sopra. Ho dovuto cambiare "rb" in "rU" per aggirare l'errore "modalità newline universale" di Python. L'uso di "start = 1" per "righe in enumerate" e "val in enumerate" ha creato una riga vuota sopra e una colonna vuota a sinistra dei dati effettivi. Ho cambiato entrambi in "start = 0", che ha avviato i dati nella cella A1 (in alto a sinistra) del foglio di calcolo (Excel 2011). Ho anche cambiato l'ultima riga in "wb.save (os.path.splitext (csvfile) [0] + '.xlsx')" per rimuovere la parte .csv del file (ad esempio, nnnn.csv.xlsx in nnnn. xlsx).
Michael S Taylor,

1

Ecco uno script perl che presumibilmente lo fa, ma sembra un sacco di lavoro per fare qualcosa che è già incorporato in Excel.


1

C'è molto da dire sulla tua domanda.

Supponendo che i file CVS si trovino in una struttura di directory simile a

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

e vuoi finire con

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

Posso pensare a tre percorsi da percorrere a seconda del rapporto tra lavoro iniziale e lavoro di pulizia che sei disposto a fare.

  1. Nessuna precodifica: utilizzare Esplora risorse per navigare ai file CSV, utilizzare il metodo più adatto per selezionare i file da convertire (lasso, ctrl + a, ctrl + clic, maiusc + clic), quindi fare clic con il tasto destro su uno dei file selezionati e fare clic su Aperto. Questo aprirà tutti i file in Excel. Quindi per ogni file è possibile selezionare "File" e "Salva con nome" e infine scegliere il nuovo formato di file in cui si desidera salvarlo.
  2. Un file batch semplice: quel file batch potrebbe usare caratteri jolly e / o un per ogni struttura di loop per aprire ciascuno dei file CSV per te e quindi potresti elaborarli manualmente come prima.
  3. Crea un programma VBA in un foglio di calcolo Excel: VBA potrebbe aprire automaticamente ogni file CSV e quindi salvarlo in un formato Excel. È anche possibile aggiungere una semplice finestra di messaggio che offre una scelta di xls o xlsx quando viene aperto ciascun file.

Nota che non ho ancora scritto alcun codice per fare queste cose (sto solo offrendo idee per un punto di partenza). Forse se potessi fornire maggiori dettagli su ciò che desideri, potresti ottenere spiegazioni più dettagliate su come gestire l'approccio da parte mia o di un altro membro del forum.


0

Per Windows? La versione della riga di comando " Total CSV Converter " di CoolUtils supporta molti formati di output tra cui JSON, Access, DBF, XML e SQL ed è a soli $ 40. Può ricorrere a sottodirectory, eliminare file CSV originali, combinare tutti i file in un documento e altro.

http://www.coolutils.com/TotalCSVConverter

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

" Advanced CSV Converter " ($ 40-200) è un EXE portatile che può farlo rapidamente e senza che Excel debba essere installato.

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

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

" Convert XLS " di SoftInterface può utilizzare Excel (ma non è necessario) ed è più costoso ($ 500 +), ma supporta più formati e ha più opzioni.

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 " è un programma per fogli di calcolo open source che può eseguire una conversione diretta, ma è stato sospeso per Windows nell'agosto 2014.

http://www.gnumeric.org/

ssconvert file.csv file.xlsx

Se hai installato Python, " csv2odf " è un'opzione open source e utilizza un approccio basato su modelli per generare file ods, odt, html, xlsx o docx.

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

csv2odf data.csv template.odt output.xlsx

0

Con Nodo 8+ e bash:

npm install -g pguardiario/csv2xlsx

for file in *.csv; do csv2xlsx "$file"; done

-1

Il modo più semplice: apri il tuo file csv da Microsoft Excel, converti il ​​testo in colonne (seleziona le celle / testo, fai clic su Menu - Dati - Testo in colonne) imposta l'opzione per la conversione.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.