Cara mengonversi batch .csv ke .xls / xlsx

11

Saya mencari cara untuk dengan cepat mengkonversi direktori file .csv ke format .xls atau .xlsx (akan lebih baik jika saya bisa melakukan salah satu dari ini).

Apakah ada cara mudah untuk melakukan ini atau saya perlu menginstal program pihak ketiga?

mindless.panda
sumber
1
Tidak yakin mengapa Anda harus melakukannya. csv terbuka dengan baik di excel. siapa pun yang perlu berinteraksi bisa membuka tanpa masalah.
Jody
2
Anda benar, Excel membuka csv dan xls / xlsx dengan baik. Namun, program lain tidak. =)
mindless.panda
1
Jadi program apa yang Anda cari untuk menggunakan ini?
Kirk

Jawaban:

21

Dengan asumsi Anda suka dan memiliki Python (karena alasan tertentu), Anda dapat menggunakan skrip ini yang saya buat:

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

Berlari di direktori dengan semua file CSV, itu akan mengkonversi semuanya dan menampar ".xls" di ujungnya.

Untuk Excel 2007+ (file xlsx) mendukung hingga sekitar 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
sumber
2
Pada Macintosh, saya menggunakan versi xlsx di atas. Saya harus mengubah "rb" menjadi "rU" untuk menghindari kesalahan "mode universal-baris baru" dari Python. Menggunakan "start = 1" untuk "rows in enumerate" dan "val in enumerate" membuat baris kosong di atas dan kolom kosong di sebelah kiri data aktual. Saya mengubah keduanya menjadi "mulai = 0", yang memulai data dalam sel A1 (kiri atas) dari spreadsheet (Excel 2011). Saya juga mengubah baris terakhir menjadi "wb.save (os.path.splitext (csvfile) [0] + '.xlsx')" untuk menghapus bagian .csv dari file (misalnya, nnnn.csv.xlsx menjadi nnnn. xlsx).
Michael S Taylor
1

Berikut adalah skrip perl yang seharusnya melakukannya, tetapi sepertinya banyak pekerjaan untuk melakukan sesuatu yang sudah dibangun ke dalam Excel.

Gereja
sumber
1

Ada banyak hal yang belum terungkap dalam pertanyaan Anda.

Dengan asumsi bahwa file CVS Anda berada dalam struktur direktori yang mirip dengan

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

dan Anda ingin berakhir dengan

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

Saya bisa memikirkan tiga rute untuk pergi tergantung pada rasio pekerjaan dimuka untuk membersihkan pekerjaan yang Anda bersedia lakukan.

  1. Tanpa Pengkodean: Gunakan Windows Explorer untuk menavigasi ke file CSV menggunakan metode apa pun yang bekerja paling baik untuk memilih file yang akan dikonversi (laso, ctrl + a, ctrl + klik, shift + klik) lalu klik kanan salah satu file yang dipilih dan klik pada Buka. Ini akan membuka semua file di Excel. Kemudian untuk setiap file Anda dapat memilih "File" dan "Save as" dan akhirnya memilih format file baru yang Anda inginkan.
  2. File Batch Sederhana: File batch itu dapat menggunakan kartu liar dan / atau untuk setiap struktur loop untuk membuka masing-masing file CSV untuk Anda dan kemudian Anda bisa memprosesnya secara manual seperti sebelumnya.
  3. Buat program VBA dalam Excel Spreadsheet: VBA bisa secara otomatis membuka setiap file CSV dan menyimpannya ke format Excel. Anda bahkan dapat menambahkan kotak pesan sederhana yang menawarkan pilihan xls atau xlsx saat setiap file dibuka.

Perhatikan bahwa saya belum menulis kode apa pun untuk melakukan hal-hal ini (namun) saya hanya menawarkan ide untuk titik awal. Mungkin jika Anda bisa memberikan rincian lebih lanjut tentang apa yang Anda inginkan, Anda bisa mendapatkan penjelasan lebih rinci tentang cara menangani pendekatan dari saya atau anggota forum lain.

TedNewk
sumber
0

Untuk Windows? Versi baris perintah CoolUtils " Total CSV Converter " mendukung banyak format output termasuk JSON, Access, DBF, XML & SQL dan hanya $ 40. Itu dapat kambuh sub-direktori, menghapus file CSV asli, menggabungkan semua file ke satu dokumen, dan banyak lagi.

http://www.coolutils.com/TotalCSVConverter

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

" Advanced CSV Converter " ($ 40-200) adalah EXE portabel yang dapat melakukannya dengan cepat dan tanpa Excel harus diinstal.

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

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

SoftInterface " Convert XLS " dapat menggunakan Excel (tetapi tidak diperlukan) dan lebih mahal ($ 500 +), tetapi mendukung lebih banyak format dan memiliki lebih banyak opsi.

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 " adalah program spreadsheet sumber terbuka yang dapat melakukan konversi langsung, tetapi dihentikan untuk Windows pada Agustus 2014.

http://www.gnumeric.org/

ssconvert file.csv file.xlsx

Jika Anda menginstal Python, " csv2odf " adalah opsi sumber terbuka dan menggunakan pendekatan templated untuk menghasilkan file ods, odt, html, xlsx, atau docx.

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

csv2odf data.csv template.odt output.xlsx
pengguna326177
sumber
0

Dengan Node 8+ dan bash:

npm install -g pguardiario/csv2xlsx

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

Cara Mudah: buka file csv Anda dari Microsoft Excel, konversi teks ke kolom (pilih sel / teks, klik Menu - Data - Teks ke Kolom) setel opsi Anda untuk mengonversi.

Elaif
sumber