2012-02-24 110 views
0

我有一個很大的excel文件,用於彙總跨多個客戶端的問題的跟蹤,我需要根據客戶端將它分成較小的文件。將多個CSV轉換爲xls或xlsx並將格式應用到它們

這裏就是我這麼遠:我已經建立了一個的Python腳本劃分的文件到相應的客戶特定文件和正確標題行適用於所有的人,但它產生的CSV這是醜陋。我的老闆要應用一些格式,所以我需要做的是(對目錄中的所有的CSV):

  1. 轉換每個文件從CSV爲.xls(或.xlsx),以便將舉辦格式

  2. 自動調整列寬

  3. 使第一行大膽(也許是顏色應用於行)

到目前爲止我猜我可能可以做這與pyWin32pyExcelerator,但考慮如何最小的改變,我期望做它可能會更容易做到這一點作爲一個VB腳本或宏或什麼的,但我真的不知道這些工具。

+1

如果你用Excel VBScript中已經工作過,那麼這將是一個沒有腦子做休息VBScript中。但是,由於你顯然沒有,這是一個艱難的電話會更容易。有一件事我可以告訴你:如果你要堅持使用Python,請忘記pyExcelerator。改用xlwt。 – 2012-02-24 23:31:31

回答

4

最簡單的方法是使用VBA

這裏有一個快速宏循環CSV開放的文件夾thriugh,申請自動調整,並保存爲.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 

編輯:

其他格式添加到代碼

+1

+1做得很好。或者使用DIR,因此不需要綁定。 – 2012-02-25 03:05:45

+0

請原諒我的無知,但你能否詳細說明如何運行?我在目錄中創建了一個新的工作簿,並將此代碼放入宏中(我認爲/我希望?),但是當我嘗試運行它時,出現以下錯誤:「編譯錯誤:用戶定義的類型未定義。」 'fso AS FileSystemObject'這一行突出顯示,所以我猜測我錯過了一個依賴或者需要加載一個庫或其他東西。 – 2012-02-27 15:04:26

+0

您需要添加參考。從'Tools'菜單中選擇'References'。向下滾動列表到'Microsoft Scripting Runtime'選中它並選擇確定 – 2012-02-27 18:55:25