将多个CSV转换为xls或xlsx并对其应用格式

Dav*_*arx 1 python excel vba batch-file excel-vba

我有一个很大的excel文件,该文件用于汇总对多个客户端的问题的跟踪,我需要根据客户端将其分成较小的文件。

到目前为止,这是我得到的:我构建了一个python脚本,将该文件分为适当的客户端特定文件,并将正确的标头行应用于所有这些文件,但它会生成难看的CSV。我的老板想应用一些格式,所以我需要做的是(对于目录中的所有CSV):

  1. 将每个文件从CSV转换为.xls(或.xlsx),以便保存格式

  2. 自动调整列宽

  3. 将第一行设为粗体(并可能在行中应用颜色)

到目前为止,我猜测我可能可以使用pyWin32pyExcelerator做到这一点,但是考虑到我要进行的最小更改是将其作为VB脚本或宏之类的方法可能会更容易,但是我没有真的不知道那些工具。

chr*_*sen 5

最简单的方法是使用 VBA

这是一个快速的宏,用于循环打开csv的文件夹,应用自动调整并另存为 .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
Run Code Online (Sandbox Code Playgroud)

编辑:

添加到代码的其他格式