Toplu iş .csv dosyasını .xls / xlsx'e dönüştürme


11

Hızlı bir şekilde .csv dosyalarının bir dizinini .xls veya .xlsx biçimine dönüştürmenin bir yolunu arıyorum (/ veya yapabilirsem iyi olurdu).

Bunu yapmanın kolay bir yolu var mı yoksa bir üçüncü taraf programı yüklemem gerekiyor mu?


1
Neden bunu yapmanız gerektiğinden emin değilim. csv excel'de açık. Etkileşime ihtiyacı olan herkes sorun olmadan açılabilir.
Jody

2
Haklısın Excel csv ve xls / xlsx'i açar. Diğer programlar ise böyle değildir. =)
mindless.panda

1
Peki bunu hangi programda kullanmak istiyorsunuz?
Kirk

Yanıtlar:


21

Python'u beğendiğinizi ve (bazı nedenlerden dolayı) varsayarsak, çırptığım bu komut dosyasını kullanabilirsiniz:

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

Tüm CSV dosyaları ile dizinde koştu, hepsini dönüştürecek ve sonuna bir ".xls" tokatlayacaktır.

Yaklaşık 1 Ortamı destekleyen Excel 2007+ (xlsx dosyaları) için:

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
Macintosh'ta yukarıdaki xlsx sürümünü kullandım. Python "evrensel-newline modu" hatası almak için "rb" "rU" değiştirmek zorunda kaldı. "Numaralandırmadaki satırlar" ve "numaralandırmadaki val" için "start = 1" kullanmak, gerçek verilerin üstünde boş bir satır ve solda boş bir sütun oluşturdu. Her ikisini de e-tablonun A1 hücresinde (sol üst) verileri başlatan "start = 0" olarak değiştirdim (Excel 2011). Ayrıca dosyanın .csv bölümünü kaldırmak için son satırı "wb.save (os.path.splitext (csvfile) [0] + '.xlsx')" olarak değiştirdim (örn. Nnnn.csv.xlsx - nnnn). xlsx).
Michael S Taylor

1

İşte sözde perl betiği, ancak zaten Excel'de yerleşik bir şey yapmak için çok iş gibi görünüyor.


1

Sorunuzda söylenmeyen çok şey var.

CVS dosyalarınızın benzer bir dizin yapısında olduğu varsayılarak

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

ve sonuç olarak

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

Önceden çalışmanın, yapmak istediğiniz temizlik işine oranına bağlı olarak üç yol düşünebilirim.

  1. Ön Kodlama Yok: CSV dosyalarına gitmek için Windows Gezgini'ni kullanarak dönüştürülecek dosyaları seçmek için en iyi yöntemi kullanın (lasso, ctrl + a, ctrl + tıklayın, shift + tıklayın) ve ardından seçilen dosyalardan birine sağ tıklayın ve tıklayın Açık. Bu, Excel'deki tüm dosyaları açacaktır. Daha sonra her dosya için "Dosya" ve "Farklı kaydet" i seçebilir ve son olarak kaydedilmesini istediğiniz yeni dosya biçimini seçebilirsiniz.
  2. Basit Toplu İş Dosyası: Bu toplu iş dosyası, her bir döngü yapısı için her bir CSV dosyasını sizin için açmak üzere joker karakterler ve / veya a kullanabilir ve bunları daha önce olduğu gibi elle işleyebilirsiniz.
  3. Excel Elektronik Tablosu içinde bir VBA programı oluşturma: VBA her bir CSV dosyasını otomatik olarak açabilir ve daha sonra bir Excel formatına kaydedebilir. Her dosya açılırken xls veya xlsx seçenekleri sunan basit bir mesaj kutusu bile ekleyebilirsiniz.

Bu şeyleri yapmak için herhangi bir kod yazmadım (henüz) sadece bir başlangıç ​​noktası için fikirler sunuyoruz. İstediğiniz hakkında daha fazla ayrıntı verebilirseniz, benden veya başka bir forum üyesinden yaklaşımı nasıl ele alacağınız hakkında daha ayrıntılı açıklamalar alabilirsiniz.


0

Pencereler için? CoolUtils " Total CSV Converter " komut satırı sürümü JSON, Access, DBF, XML ve SQL dahil olmak üzere birçok çıkış formatını destekler ve sadece 40 $ 'dır. Alt dizinleri geri alabilir, orijinal CSV dosyalarını silebilir, tüm dosyaları tek bir belgede birleştirebilir ve daha fazlasını yapabilir.

http://www.coolutils.com/TotalCSVConverter

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

" Advanced CSV Converter " (40-200 $) hızlı ve Excel'in yüklenmesi gerekmeden yapabilen taşınabilir bir EXE.

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

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

SoftInterface'in "XLS'yi Dönüştür " Excel'i kullanabilir (ancak zorunlu değildir) ve daha pahalıdır (500 $ +), ancak daha fazla formatı destekler ve daha fazla seçeneğe sahiptir.

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 ", doğrudan dönüşüm gerçekleştirebilen açık kaynaklı bir elektronik tablo programıdır, ancak Ağustos 2014'te Windows için kullanımdan kaldırılmıştır.

http://www.gnumeric.org/

ssconvert file.csv file.xlsx

Python yüklüyse, " csv2odf " açık kaynaklı bir seçenektir ve ods, odt, html, xlsx veya docx dosyaları oluşturmak için şablonlu bir yaklaşım kullanır.

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

csv2odf data.csv template.odt output.xlsx

0

Düğüm 8+ ve bash ile:

npm install -g pguardiario/csv2xlsx

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

-1

Kolay yol: csv dosyanızı Microsoft Excel'den açın, metni sütunlara dönüştürün (hücreleri / metni seçin, Menü - Veri - Metni Sütunlara Dönüştür'ü tıklatın) dönüştürme seçeneğini ayarlayın.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.