Как конвертировать .csv в .xls / xlsx


11

Я ищу способ быстро преобразовать каталог файлов .csv в формат .xls или .xlsx (было бы неплохо, если бы я мог сделать или / или).

Есть ли простой способ сделать это или мне нужно установить стороннюю программу?


1
Не уверен, зачем тебе это нужно. CSV хорошо открыт в Excel. любой, кому нужно взаимодействовать, может просто открыться без проблем.
Джоди

2
Вы правы Excel открывает CSV и XLS / XLSX просто отлично. Другие программы, однако, нет. =)
mindless.panda

1
Так в какой программе вы собираетесь использовать это?
Кирк

Ответы:


21

Предполагая, что вам нравится и у вас есть Python (по какой-то причине), вы можете использовать этот скрипт, который я написал:

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

Запустив в каталог все файлы CSV, он преобразует их все и добавит «.xls» в конец.

Для Excel 2007+ (файлы xlsx) с поддержкой до 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
На Macintosh я использовал версию xlsx выше. Мне пришлось изменить «rb» на «rU», чтобы обойти ошибку «универсального режима новой строки» из Python. Использование «start = 1» для «строк в перечислении» и «val в перечислении» создало пустую строку выше и пустой столбец слева от фактических данных. Я изменил оба значения на «start = 0», что позволило начать данные в ячейке A1 (вверху слева) электронной таблицы (Excel 2011). Я также изменил последнюю строку на «wb.save (os.path.splitext (csvfile) [0] + '.xlsx')», чтобы удалить часть файла .csv (например, nnnn.csv.xlsx в nnnn. XLSX).
Майкл С Тейлор

1

Вот сценарий Perl, который предположительно делает это, но кажется, что нужно сделать много работы для того, что уже встроено в Excel.


1

В вашем вопросе многое осталось недосказанным.

Предполагая, что ваши файлы CVS находятся в структуре каталогов, аналогичной

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

и вы хотите в конечном итоге

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

Я могу подумать о трех маршрутах, которые нужно выбрать, в зависимости от соотношения предварительной работы и работы по уборке, которую вы готовы выполнить.

  1. Без предварительного кодирования: используйте проводник Windows, чтобы перейти к файлам CSV, используйте любой метод, который лучше всего подходит для выбора файлов для преобразования (лассо, Ctrl + A, Ctrl + щелчок, Shift + щелчок), затем щелкните правой кнопкой мыши один из выбранных файлов и нажмите на Открыто. Это откроет все файлы в Excel. Затем для каждого файла вы можете выбрать «Файл» и «Сохранить как» и, наконец, выбрать новый формат файла, который вы хотите сохранить.
  2. Простой пакетный файл: этот пакетный файл может использовать подстановочные знаки и / или a для каждой структуры цикла, чтобы открыть каждый из файлов CSV для вас, а затем вы можете вручную обработать их, как и раньше.
  3. Создайте программу VBA в таблице Excel: VBA может автоматически открывать каждый файл CSV и затем сохранять его в формате Excel. Вы можете даже добавить простое окно сообщения, которое предлагает выбор либо xls, либо xlsx при открытии каждого файла.

Обратите внимание, что я не написал никакого кода для этих вещей (пока), я просто предлагаю идеи для отправной точки. Возможно, если бы вы могли дать более подробную информацию о том, что вы хотите, вы могли бы получить более подробные объяснения о том, как обращаться с подходом от меня или другого участника форума.


0

Для винды? Версия командной строки « Total CSV Converter » CoolUtils поддерживает множество форматов вывода, включая JSON, Access, DBF, XML и SQL, и стоит всего 40 долларов. Он может создавать подкаталоги, удалять оригинальные файлы CSV, объединять все файлы в один документ и многое другое.

http://www.coolutils.com/TotalCSVConverter

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

« Advanced CSV Converter » ($ 40-200) - это переносимый EXE-файл, который может сделать это быстро и без необходимости установки Excel.

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

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

« Преобразование XLS » SoftInterface может использовать Excel (но не обязательно) и стоит дороже ($ 500 +), но поддерживает больше форматов и имеет больше возможностей.

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 » - это программа для работы с электронными таблицами с открытым исходным кодом, которая может выполнять прямое преобразование, но она была прекращена для Windows в августе 2014 года.

http://www.gnumeric.org/

ssconvert file.csv file.xlsx

Если у вас установлен Python, « csv2odf » является опцией с открытым исходным кодом и использует шаблонный подход для генерации файлов ods, odt, html, xlsx или docx.

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

csv2odf data.csv template.odt output.xlsx


-1

Простой способ: откройте CSV-файл из Microsoft Excel, преобразуйте текст в столбцы (выберите ячейки / текст, нажмите Меню - Данные - Текст в столбцы) и выберите вариант преобразования.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.