Як пакетне перетворення .csv в .xls / xlsx


11

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

Чи є простий спосіб це зробити чи мені потрібно встановити сторонні програми?


1
Не впевнений, для чого вам це потрібно зробити. csv відкритий колодязь у відмінній формі. той, хто потребує взаємодії, може просто відкритись без проблем.
Джоді

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).
Michael S Taylor

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, будь-який метод працює найкраще, щоб вибрати файли для конвертації (lasso, ctrl + a, ctrl + click, shift + click), а потім клацніть правою кнопкою миші один із вибраних файлів та натисніть на Відчинено. Це відкриє всі файли в Excel. Потім для кожного файлу ви можете вибрати "Файл" і "Зберегти як" і, нарешті, вибрати новий формат файлу, в який ви хочете його зберегти.
  2. Простий пакетний файл: Цей пакетний файл може використовувати підказки та / або а для кожної структури циклу, щоб відкрити для вас кожен CSV-файл, а потім ви могли вручну обробити їх, як раніше.
  3. Створіть програму VBA у таблиці Excel: VBA може автоматично відкривати кожен файл CSV та зберігати його у форматі Excel. Ви навіть можете додати просте поле повідомлень, яке пропонує вибір xls або xlsx під час відкриття кожного файлу.

Зауважте, що я не написав жодного коду, щоб зробити ці речі (я все ще пропоную ідеї для відправної точки). Можливо, якщо ви могли б дати докладнішу інформацію про те, що ви хочете, ви могли б отримати більш детальні пояснення, як поводитися з підходом від мене чи іншого члена форуму.


0

Для Windows? Версія командного рядка CoolUtils " Total CSV Converter " підтримує безліч вихідних форматів, включаючи JSON, Access, DBF, XML і SQL і становить лише $ 40. Він може повторювати підкаталоги, видаляти вихідні файли CSV, поєднувати всі файли в одному документі тощо.

http://www.coolutils.com/TotalCSVConverter

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

" Розширений конвертер CSV " ($ 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

0

З Node 8+ та bash:

npm install -g pguardiario/csv2xlsx

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

-1

Простий спосіб: відкрийте файл csv з Microsoft Excel, конвертуйте текст у стовпці (виберіть клітинки / текст, натисніть Меню - Дані - Текст у стовпці) та встановіть опцію для конвертування.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.