Toplu dönüştürme XLS XLSX


12

Yalnızca XLS dosyalarını dışa aktarabilen eski bir uygulama ile çalışmak zorundayım ve sadece XLSX dosyalarını okuyabilen EPPlus kütüphanesini kullanarak .Net'te programlar yazıyorum.

Toplu dönüştürme XLS XLSX için en kolay yolu nedir?

Yanıtlar:


6

Office Migration Planning Manager'a bakın.

Araç seti ayrıca ikili dosyadan OpenXML formatlarına toplu belge dönüşümleri sağlayan Office Dosya Dönüştürücüsü'nü (OFC) içerir. ( Technet )

Technet'e Genel Bakış

İndirme: {link

Microsoft Office Compatibility Pack for Word, Excel, and PowerPoint File FormatsOFC'nin çalışması için de ihtiyacınız olduğunu unutmayın .
Her iki araç da artık desteklenmiyor gibi görünüyor.


1
Ben de dahil olmak üzere oldukça az insan, xls dosyalarını fark edilebilir bir sebep olmadan dönüştüremeyen bu araçla ilgili sorun yaşıyor gibi görünüyor.
John

3

Bir klasör içindeki dosyaları xls'den xlsx'e dönüştürmek için makro işlemeyi öneririm. Bu kod, dosyaların hepsinin bir klasörde bulunduğunu ve tüm xls dosyalarının dönüştürülmesi gerektiğini varsayar, ancak tek tek dosyaları seçmek isterseniz bu kod güncellenebilir.

Bu kodun bir Excel 2007 veya üstü çalışma kitabından çalıştırılması gerekir.

Option Explicit

' Convert all xls files in selected folder to xlsx

Public Sub convertXLStoXLSX()

    Dim FSO As Scripting.FileSystemObject
    Dim strConversionPath As String
    Dim fFile As File
    Dim fFolder As Folder
    Dim wkbConvert As Workbook

    ' Open dialog and select folder
    With Application.FileDialog(msoFileDialogFolderPicker)
        .AllowMultiSelect = False
        .Show
        On Error Resume Next ' Prevent debug mode if user cancels selection
        strConversionPath = .SelectedItems(1)
        On Error GoTo 0      ' Re-enable default error handling
    End With

    Set FSO = New Scripting.FileSystemObject

    ' Check if the folder exists
    If FSO.FolderExists(strConversionPath) Then
        Set fFolder = FSO.GetFolder(strConversionPath)

        ' Disable confirmation dialogs (to prevent "unsaved changes" dialog popping up)
        ' and screen updates (to speed up conversion)
        Application.DisplayAlerts = False
        Application.ScreenUpdating = False

        ' Loop through files, find the .xls files
        For Each fFile In fFolder.Files
            If LCase$(Right(fFile.Name, 4)) = ".xls" Then
                ' Open temporary workbook
                Set wkbConvert = Workbooks.Open(fFile.Path)
                ' Save as OpenXML workbook - if your .xls files contain macros
                ' then change to FileFormat:=xlOpenXMLWorkbookMacroEnabled
                wkbConvert.SaveAs FSO.BuildPath(fFile.ParentFolder, _
                                    Left(fFile.Name, Len(fFile.Name) - 4)) & ".xlsx", _
                                  FileFormat:=xlOpenXMLWorkbook
                wkbConvert.Close SaveChanges:=False
                ' Delete original file
                fFile.Delete Force:=True
            End If
        Next fFile

        ' Re-enable confirmation dialogs and screen updates
        Application.DisplayAlerts = True
        Application.ScreenUpdating = True

    End If

End Sub

Not: Dönüştürmekte olduğunuz dosyalar makro içeriyorsa FileFormat:=xlOpenXMLWorkbook, okumak için güncellemeniz gerekir FileFormat:=xlOpenXMLWorkbookMacroEnabled. Veya dönüştürülen dosyalarda makro koduna ihtiyacınız yoksa, onu yalnız bırakabilirsiniz ve xlsx biçimine dönüştürdüğünde makroları kaldıracaktır.


.CSV'yi .XLSX'e dönüştürmek istersem ne olur?
Boris_yo

1

Bu yüzden .xls dosyalarını .xlsx'e sessiz bir şekilde dönüştürmek için basit bir VBScript yazdım.

./convert-xls-xlsx.vbs {.xls dosyaları içeren klasörün yolu}

convert-xls-xlsx.vbs:

    Set args = WScript.Arguments
    strPath = değişkenler (0)
    strPath = CreateObject ("Scripting.FileSystemObject"). GetAbsolutePathName (strPath)
    Set objExcel = CreateObject ("Excel.Application")
    objExcel.Visible = Yanlış
    objExcel.DisplayAlerts = Yanlış
    Set objFso = CreateObject ("Scripting.FileSystemObject")
    Set objFolder = objFso.GetFolder (strPath)
    ObjFile In Her objFile içinDosyaları
        fileName = objFile.Path
        (ObjFso.GetExtensionName (objFile.Path) = "xls") ise
            Set objWorkbook = objExcel.Workbooks.Open (dosyaAdı)
            saveFileName = Değiştir (dosyaAdı, ". xls", ". xlsx")
            objWorkbook.SaveAs saveFileName, 51
            objWorkbook.Close ()
            objExcel.Application.DisplayAlerts = Doğru
        End If
    Sonraki
    MsgBox "Dönüştürme tamamlandı"

NOT: Klasör yolunda boşluk olup olmadığına bakın, yolunuz arasında boşluk varsa yolu tırnak içine alın.


Herhangi bir makro hakkında bilmek istemediğim için DisplayAlerts = False olarak değiştirdim, sadece onları silin, bu yüzden bu şeyleri ilk etapta dönüştürüyorum. Sonra beni rahatsız etmesini istemiyordu gibi nihai MsgBox kaldırıldı.
BeowulfNode42

@ BeowulfNode42 serin, ama ben sadece çalışma kitapları bozuk çünkü DisplayAlerts tuttu düşünüyorum. Ama sonra tekrar tam olarak hatırlamıyorum.
revosftw

0
Sub SaveAllAsXLSX ()
Dim strFilename As String
Dim strDocName As String
Dim strPath As String
Çalışma Kitabı Olarak Dim wbk
FileDialog Olarak Dim fDialog
Tamsayı Olarak Dim intPos
Dim strPassword As String
Dim strWritePassword As Dize
Dim varA As String
Dim varB As String
Dim colFiles Yeni Koleksiyon Olarak
Varyant Olarak Dim vDosyası
Set fDialog = Application.FileDialog (msoFileDialogFolderPicker)
FDialog ile
    .Title = "Klasörü seçin ve Tamam'ı tıklayın"
    .AllowMultiSelect = Doğru
    .InitialView = msoFileDialogViewList
    Göster. -1 ise
        MsgBox "Kullanıcı Tarafından İptal Edildi", "Klasör İçeriğini Listele"
        Alt Çık
    End If
    strPath = fDialog.SelectedItems.Item (1)
    Sağ ise (strPath, 1) "\" Sonra strPath = strPath + "\"
İle bitmek
Sola (strPath, 1) = Chr (34) Sonra
    strPath = Orta (strPath, 2, Len (strPath) - 2)
End If
Set obj = CreateObject ("Scripting.FileSystemObject")
RecursiveDir colFiles, strPath, "* .xls", Doğru
Her vFile In colFiles için
        Debug.Print vFile
    strFilename = vFile
    varA = Sağ (strFilename, 3)
    Eğer (varA = "xls" veya varA = "XLSX") ise
     Set wbk = Workbooks.Open (Dosya adı: = strFilename)
       Eğer wbk.HasVBProject sonra
              wbk.SaveAs Dosya adı: = strFilename & "m", FileFormat: = xlOpenXMLWorkbookMacroEnabled
            Başka
               wbk.SaveAs Dosya adı: = strFilename & "x", FileFormat: = xlOpenXMLWorkbook
            End If
            wbk.Close SaveChanges: = Yanlış
           obj.DeleteFile (strFilename)
    End If
Sonraki vFile

End Sub
Ortak İşlev Özyinelemeli Dir (colFiles As Collection, _
                             strFolder As String, _
                             strFileSpec As String, _
                             bIncludeSubfolders: Boolean)

    Dim strTemp As String
    Dim colFolders Yeni Koleksiyon Olarak
    Varyant Olarak Dim vFolderName

    'StrFolder ile strFileSpec ile colFiles arasındaki dosyaları ekle
    strFolder = TrailingSlash (strFolder)
    strTemp = Dir (strFolder & strFileSpec)
    Do While strTemp vbNullString
        colFiles.Add strFolder & strTemp
        strTemp = Yön
    döngü

    Eğer bIncludeSubfolders ise
        'ColFolders öğesini strFolder alt dizinlerinin listesiyle doldur
        strTemp = Dir (strFolder, vbDirectory)
        Do While strTemp vbNullString
            Eğer (strTemp ".") Ve (strTemp "..") Sonra
                Eğer (GetAttr (strFolder & strTemp) Ve vbDirectory) 0 Sonra
                    colFolders.Add strTemp
                End If
            End If
            strTemp = Yön
        döngü

        'ColFolders içindeki her alt klasör için RecursiveDir'i çağırın
        ColFolders içindeki her vFolderName için
            RecursiveDir'i çağırın (colFiles, strFolder & vFolderName, strFileSpec, True)
        Sonraki vFolderName
    End If

Bitiş Fonksiyonu
Genel İşlev TrailingSlash (strFolder As String) Dize Olarak
    Len (strFolder)> 0 ise
        Sağ ise (strFolder, 1) = "\" Sonra
            TrailingSlash = strFolder
        Başka
            TrailingSlash = strFolder & "\"
        End If
    End If
Bitiş Fonksiyonu


8
Sadece bir grup kodu yapıştırmak yerine, ne yaptığını, nasıl kullanılacağını ve (varsa) sınırlamaların neler olduğunu biraz açıklayabilir misiniz? Bu, gelecekteki ziyaretçiler için daha yararlı olacaktır.
slhck

0

MsOffice yüklüyse, bu araç hızlı bir düzeltme için indirilmeye değer olabilir.

http://www.softinterface.com/Convert-XLS/Features/Convert-XLS-To-XLSX.htm

Dönüştürülen xls dosyalarını görmek için bir klasör seçtiğinizde, MS Office kullanan dönüştürme aracı seçeneğini kendi dönüştürücüsüne değil, dönüştürmeye işaretlediğinizden emin olun.

Kendi dönüştürücülerini kullanırsanız, hücrelerdeki renkleri kaybedersiniz ve tek sayfa çıkıyor gibi görünür. Dönüştürücü olarak iyi çalışıyor gibi MsOffice kullanırsanız. Hızlı bir düzeltme için iyi bir araç.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.