【问题标题】:Converting multiple CSVs into xls or xlsx and applying a format to them将多个 CSV 转换为 xls 或 xlsx 并对它们应用格式
【发布时间】:2012-03-15 09:47:43
【问题描述】:

我有一个大的 Excel 文件,用于汇总跨多个客户端的问题跟踪,我需要根据客户端将其分成更小的文件。

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

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

  2. 自动调整列宽

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

到目前为止,我猜我可能可以使用 pyWin32pyExcelerator 来完成此操作,但考虑到我希望进行的更改有多么小,将其作为 VB 脚本或宏什么的,但我真的不知道那些工具。

【问题讨论】:

  • 如果您已经在 VBScript 中使用过 Excel,那么在 VBScript 中完成其余的工作将是轻而易举的事。但是,由于您显然没有,这是一个艰难的决定,这会更容易。我可以告诉你一件事:如果你要坚持使用 Python,请忘记 pyExcelerator。请改用 xlwt。

标签: python vba batch-file excel


【解决方案1】:

最简单的方法是使用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

【讨论】:

  • 请原谅我的无知,但您能详细说明如何运行它吗?我在目录中创建了一个新工作簿并将此代码放入宏中(我想/我希望?),但是当我尝试运行它时,我得到以下信息:“编译错误:未定义用户定义的类型。” 'fso AS FileSystemObject' 行被突出显示,所以我猜我缺少依赖项或需要加载库或其他东西。
  • 您需要添加参考。从Tools 菜单中选择References。向下滚动列表到Microsoft Scripting Runtime 勾选它并选择确定
  • 你是一个美丽的人,克里斯。看起来该脚本无法将文件重命名为具有“。”的“.xlsx”。文件名中的某处,但否则这完全有效。谢谢! PS:如果你能告诉我如何使标题行加粗和/或对该行应用突出显示颜色,那将是特别的。
  • @David 我添加了一些格式化代码。在 Excel 中查找如何执行此类操作的一种方法是在自己执行操作时使用宏记录器。这将告诉您要使用哪些属性,例如 .Interior
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-03-25
  • 2018-06-21
  • 2012-09-06
  • 2015-02-02
  • 1970-01-01
  • 1970-01-01
  • 2013-01-25
相关资源
最近更新 更多