1. 程式人生 > >Excel檔案減肥修復終極辦法----解決Excel檔案開啟慢的問題

Excel檔案減肥修復終極辦法----解決Excel檔案開啟慢的問題

iamlaosong文

Excel檔案在使用過程中由於各種原因會變得越來越大,有的檔案甚至存在一些問題,導致檔案大,開啟慢,實在讓人頭疼。網上有很多辦法,無非是刪除內容、刪除物件等等,但這些辦法有時難以湊效,如一些隱含的東西或者變異(變壞)的東西是無法刪除的,比如建立一個數據透視表,後來又刪除了,那麼這個透視表雖然刪除了,這個物件還是存在的(用VBA程式碼重新整理透視表不會報錯)。還有一些已經損壞的Excel檔案,雖然不大,但開啟特別慢,我曾碰到這樣的檔案,開啟很慢,開啟後,選單中的單元格樣式處顯示的都是?(說明檔案有問題),檔案的內容也無法複製貼上(編輯欄複製貼上還是可以的),如下圖:


對這樣的檔案如何處理呢?

下面介紹一個終極辦法,這個辦法的中心思想就是儲存檔案的有效內容,對於單個工作表檔案,當然可以儲存為文字或者CSV格式的檔案,但多個工作表的話,如果一個個儲存就太麻煩了,而且不能儲存工作表內容的格式。下面的辦法不僅可以儲存多個工作表檔案,而且能夠儘可能的儲存原來的工作表的格式。方法如下:

1、開啟檔案,刪除所有不需要的內容和物件(可以按F5定位)。

2、將文另存為網頁格式,最好使用單個檔案網頁,一個檔案嘛,處理比較簡單,儲存後關閉Excel。


3、用Excel重新開啟這個網頁檔案,開啟後可以看到原來的工作表內容,只是新的Excel檔案沒有網格顯示。

4、在選項中加上網格顯示(見後面),再另存為Excel檔案,至此檔案減肥完畢。

經過這樣處理的Excel檔案將保留其有效內容,其它無關的一概刪去(包括一些已經損壞的東西),檔案會大大減小。

多個工作表同時加網格線的方法是(2007版):選中所有工作表(按Ctrl鍵或者Shift鍵選擇),開啟Excel選項,選擇高階中的“顯示網格線”勾上,如下圖:


最後說一下注意事項:

1、因為單元格寬度導致的一些日期、數字無法正常顯示的(一般顯示為#)要調整寬度讓其顯示出來,如選擇自動調整列寬。文字過長顯示不全,沒有關係,可以不調整。

2、如Excel檔案含有VBA程式碼,轉換後的檔案不再包含程式碼,不過可以在轉換後再插入模組,將程式碼複製過來既可,因為原檔案中包含的按鈕新檔案依然存在,按鈕指定的巨集也沒變。

==============================================

上述過程也可以通過VBA編寫巨集來實現(點選開啟下載連結),介面和程式碼如下:


Sub trans_file()
    
    Dim cnn, rst, cmd As Object
    Dim datFile, datWebFile, datFullName, datFullWebFile As String

    On Error GoTo Err
    thisfile = ThisWorkbook.name   '本檔案的名字,這樣賦值就可以隨便改名了
    Worksheets("系統引數").Select
    If Cells(3, 2) = "Y" Or Cells(5, 2) = "y" Then                              '匯出出庫檔案
        Application.ScreenUpdating = True
    Else
        Application.ScreenUpdating = False
    End If
    
    
    'If MsgBox("開始生成清分資料......", vbOKCancel, "iamlaosong") = vbCancel Then Exit Sub
    lineno = [B65536].End(xlUp).Row           '行數,檔案數量
    
    For unit_num = 5 To lineno                 '檔案迴圈
    
        datFile = Cells(unit_num, 2)                              '檔名稱
        datWebFile = Left(datFile, InStr(datFile, ".")) & "mht"
        datFullName = ThisWorkbook.Path & "\" & datFile
        datFullWebFile = ThisWorkbook.Path & "\" & datWebFile
        If Dir(datFullName, vbNormal) <> vbNullString Then
            Workbooks.Open Filename:=datFullName        '開啟檔案
            Cells.Select
            Selection.Columns.AutoFit                   '調整列寬,防止因列寬導致日期、數值顯示為#號的問題
            ActiveWorkbook.SaveAs Filename:=datWebFile, FileFormat:=xlWebArchive
            ActiveWindow.Close
            Workbooks.Open Filename:=datFullWebFile
            
            For i = 1 To Worksheets.Count
                Worksheets(i).Select
                ActiveWindow.DisplayGridlines = True
                colno = [IV2].End(xlToLeft).Column
                For j = 1 To colno
                    colName = Chr(j + 64)
                    'Debug.Print IsNumeric(Range(colName & "2"))
                    'Debug.Print Len(Range(colName & "2"))
                    If IsNumeric(Range(colName & "2")) And Len(Range(colName & "2")) >= 12 Then       '科學計數法轉換成文字
                        Columns(colName & ":" & colName).Select
                        Selection.NumberFormatLocal = "000000"
                    End If
                Next j
            Next i
            Worksheets(1).Select
            datFile = "new" & Left(datFile, InStr(datFile, ".")) & "xls"
            ActiveWorkbook.SaveAs Filename:=datFile, FileFormat:=xlNormal     'xls=xlNormal,xlsx=xlOpenXMLWorkbook
            ActiveWindow.Close
        Else
            MsgBox "資料檔案不存在!", vbOKOnly, "iamlaosong"
            Exit Sub
        End If
        
        'ActiveWorkbook.Save
        'ActiveWindow.Close
        Windows(thisfile).Activate
        Worksheets("系統引數").Select
        Cells(unit_num, 3) = "成功"
        'Application.StatusBar = "已完成:100.00%"

    Next unit_num
    MsgBox "處理完畢!", vbOKOnly, "iamlaosong"
    Exit Sub
Err:
    MsgBox "錯誤#" & Str(Err.Number) & Err.Description & "-位置: " & datFile, vbOKOnly + vbExclamation, "iamlaosong"
End Sub