Преобразование нескольких CSV-файлов в xls или xlsx и применение к ним формата - PullRequest
1 голос
/ 25 февраля 2012

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

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

  1. преобразовать каждый файл из CSV в .xls (или .xlsx), чтобыон будет содержать форматирование

  2. Ширина столбца с автоподгонкой

  3. Сделать первую строку жирным шрифтом (и, возможно, применить цвет к строке)

До сих пор я предполагаю, что, вероятно, я могу сделать это либо с pyWin32 , либо с pyExcelerator , но учитывая минимальные изменения, которые я ищуЧтобы сделать это может быть проще сделать это как сценарий VB или макрос или что-то, но я на самом деле не знаю этих инструментов.

1 Ответ

5 голосов
/ 25 февраля 2012

Простейшим способом было бы использовать VBA

Вот быстрый макрос для циклического прохождения через папку csv open, применения автозаполнения и сохранения как .xlsx

Примечание:

  1. Используется раннее связывание, поэтому требуется ссылка на среду выполнения сценариев.При желании может быть легко изменен на позднюю привязку.
  2. Для ясности я пропустил обработку ошибок и различные оптимизации скорости.Будет ли он достаточно безопасным или быстрым, будет зависеть от вашего предполагаемого использования, количества и размера файлов.

Sub FormatCSVs()
    Dim fso As FileSystemObject
    Dim pth As String
    Dim fl As File
    Dim wb As Workbook

    Set fso = New FileSystemObject
    pth = "C:\Test" ' <-- replace with your path, or add a folder selection dialog
    For Each fl In fso.GetFolder(pth).Files
       If StrComp(fso.GetExtensionName(fl.Path), "csv", vbTextCompare) = 0 Then
            Set wb = Workbooks.Open(fl.Path)
            With wb.Sheets(1)
                .UsedRange.EntireColumn.AutoFit
                .Rows(1).Font.Bold = True
                .Rows(1).Interior.ColorIndex = 3
            End With
            wb.SaveAs pth & "\" & fso.GetBaseName(fl.Path), xlOpenXMLWorkbook
               ' or use xlExcel8 for .xls
            wb.Close
        End If
    Next

    Set fl = Nothing
    Set fso = Nothing
End Sub

РЕДАКТИРОВАТЬ:

дополнительное кодирование добавлено в код

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...