将多个CSV转换为xls或xlsx并将格式应用于它们

时间:2012-02-24 23:04:52

标签: python excel vba batch-file excel-vba

我有一个大型excel文件,用于聚合多个客户端的问题跟踪,我需要根据客户端将其划分为较小的文件。

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

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

  2. 自动调整列宽

  3. 将第一行加粗(并可能将颜色应用于行)

  4. 到目前为止,我猜我可以使用pyWin32pyExcelerator执行此操作,但考虑到我要做的更改的最小化,可能更容易做到这一点VB脚本或宏或什么的,但我真的不知道那些工具。

1 个答案:

答案 0 :(得分:4)

最简单的方法是使用VBA

这是一个快速宏来循环播放csv打开的文件夹,应用自动调整并保存为.xlsx

注意:

  1. 它利用早期绑定,因此需要引用Scripting Runtime。如果您愿意,可以很容易地改为后期绑定。
  2. 为了清楚起见,我省略了错误处理和各种速度优化。它是否足够安全或足够快将取决于您的预期用途以及文件的数量和大小。

  3. 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
    

    编辑:

    为代码添加了额外的格式