Cách chuyển đổi hàng loạt .csv sang .xls / xlsx


11

Tôi đang tìm cách chuyển đổi nhanh chóng một thư mục các tệp .csv sang định dạng .xls hoặc .xlsx (sẽ rất tuyệt nếu tôi có thể làm / hoặc).

Có cách nào dễ dàng để làm điều này hay tôi cần cài đặt chương trình của bên thứ ba?


1
Không chắc chắn tại sao bạn sẽ cần phải làm như vậy. csv đang mở tốt trong excel. Bất cứ ai cần tương tác chỉ có thể mở mà không có vấn đề.
Jody

2
Bạn đúng Excel mở csv và xls / xlsx tốt. Các chương trình khác, tuy nhiên, không. =)
mindless.panda

1
Vì vậy, chương trình bạn đang tìm kiếm để sử dụng này trong?
Kirk

Câu trả lời:


21

Giả sử bạn thích và có Python (vì một số lý do), bạn có thể sử dụng tập lệnh này mà tôi đã đánh dấu:

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

Chạy trong thư mục với tất cả các tệp CSV, nó sẽ chuyển đổi tất cả chúng và đưa một ".xls" vào cuối.

Đối với Excel 2007+ (tệp xlsx) hỗ trợ tối đa khoảng 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
Trên máy Macintosh, tôi đã sử dụng phiên bản xlsx ở trên. Tôi đã phải thay đổi "rb" thành "rU" để khắc phục lỗi "chế độ phổ cập mới" từ Python. Sử dụng "start = 1" cho "hàng trong liệt kê" và "val trong liệt kê" đã tạo ra một hàng trống ở trên và một cột trống bên trái của dữ liệu thực tế. Tôi đã thay đổi cả hai thành "start = 0", bắt đầu dữ liệu trong ô A1 (phía trên bên trái) của bảng tính (Excel 2011). Tôi cũng đã thay đổi dòng cuối cùng thành "wb.save (os.path.splitext (csvfile) [0] + '.xlsx')" để xóa phần .csv của tệp (ví dụ: nnnn.csv.xlsx thành nnnn. xlsx).
Michael S Taylor

1

Đây là một tập lệnh perl được cho là làm điều đó, nhưng có vẻ như rất nhiều công việc để làm một cái gì đó đã được tích hợp sẵn trong Excel.


1

Có rất nhiều điều chưa được trả lời trong câu hỏi của bạn.

Giả sử rằng các tệp CVS của bạn nằm trong cấu trúc thư mục tương tự như

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

và bạn muốn kết thúc với

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

Tôi có thể nghĩ ra ba con đường để đi tùy thuộc vào tỷ lệ công việc trả trước cho công việc dọn dẹp mà bạn sẵn sàng làm.

  1. Không mã hóa: Sử dụng Windows Explorer để điều hướng đến các tệp CSV, sử dụng bất kỳ phương pháp nào hoạt động tốt nhất để chọn các tệp sẽ được chuyển đổi (lasso, ctrl + a, ctrl + nhấp, shift + nhấp) sau đó nhấp chuột phải vào một trong các tệp đã chọn và nhấp vào Mở. Điều này sẽ mở tất cả các tệp trong Excel. Sau đó, đối với mỗi tệp, bạn có thể chọn "Tệp" và "Lưu dưới dạng" và cuối cùng chọn định dạng tệp mới mà bạn muốn lưu.
  2. Tệp hàng loạt đơn giản: Tệp bó đó có thể sử dụng thẻ hoang dã và / hoặc cho mỗi cấu trúc vòng lặp để mở từng tệp CSV cho bạn và sau đó bạn có thể xử lý chúng theo cách thủ công như trước.
  3. Tạo chương trình VBA trong Bảng tính Excel: VBA có thể tự động mở từng tệp CSV và sau đó lưu nó vào định dạng Excel. Bạn thậm chí có thể thêm một hộp thông báo đơn giản cung cấp lựa chọn xls hoặc xlsx khi mỗi tệp được mở.

Lưu ý rằng tôi chưa viết bất kỳ mã nào để thực hiện những điều này (chưa) Tôi chỉ đưa ra ý tưởng cho một điểm khởi đầu. Có lẽ nếu bạn có thể cung cấp thêm chi tiết về những gì bạn muốn, bạn có thể nhận được những lời giải thích chi tiết hơn về cách xử lý cách tiếp cận từ tôi hoặc một thành viên diễn đàn khác.


0

Cho cửa sổ? Phiên bản dòng lệnh " Total CSV Converter " của CoolUtils hỗ trợ nhiều định dạng đầu ra bao gồm JSON, Access, DBF, XML & SQL và chỉ có $ 40. Nó có thể lặp lại các thư mục con, xóa các tệp CSV gốc, kết hợp tất cả các tệp vào một tài liệu và hơn thế nữa.

http://www.coolutils.com/TotalCSVConverter

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

" Bộ chuyển đổi CSV nâng cao " ($ 40-200) là một EXE di động có thể thực hiện nhanh chóng và không cần cài đặt Excel.

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

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

" Convert XLS " của SoftInterface có thể sử dụng Excel (nhưng không bắt buộc) và đắt hơn ($ 500 +), nhưng hỗ trợ nhiều định dạng hơn và có nhiều tùy chọn hơn.

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 " là một chương trình bảng tính nguồn mở có thể thực hiện chuyển đổi trực tiếp, nhưng nó đã bị ngừng cho Windows vào tháng 8 năm 2014.

http://www.gnumeric.org/

ssconvert file.csv file.xlsx

Nếu bạn đã cài đặt Python, " csv2odf " là một tùy chọn nguồn mở và sử dụng cách tiếp cận templated để tạo các tệp ods, odt, html, xlsx hoặc docx.

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

csv2odf data.csv template.odt output.xlsx

0

Với nút 8+ và bash:

npm install -g pguardiario/csv2xlsx

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

-1

Cách dễ dàng: mở tệp csv của bạn từ Microsoft Excel, chuyển đổi văn bản thành cột (chọn ô / văn bản, nhấp vào Menu - Dữ liệu - Văn bản thành Cột) đặt tùy chọn của bạn để chuyển đổi.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.