Batch mengkonversi XLS ke XLSX

11

Saya harus bekerja dengan aplikasi lama yang hanya dapat mengekspor file XLS dan saya menulis program di .Net menggunakan perpustakaan EPPlus yang hanya mampu membaca file XLSX.

Apa cara termudah untuk mengonversi batch dari XLS ke XLSX?

Asal
sumber

Jawaban:

6

Lihat Manajer Perencanaan Migrasi Kantor.

Toolkit ini juga berisi Office File Converter (OFC), yang memungkinkan konversi dokumen massal dari format biner ke OpenXML. ( Technet )

Sekilas tentang Technet

Unduh Tautan

ChrisN
sumber
1
Tampaknya beberapa orang, termasuk saya, memiliki masalah dengan alat ini gagal mengonversi file xls mereka tanpa alasan yang jelas.
John
2

Saya akan merekomendasikan menggunakan makro untuk memproses file dalam folder untuk mengonversinya dari xls ke xlsx. Kode ini mengasumsikan bahwa semua file berada dalam satu folder dan semua file xls perlu dikonversi, tetapi jika Anda ingin memilih file individual, kode ini dapat diperbarui.

Kode ini harus dijalankan dari buku kerja Excel 2007 atau Excel 2010.

Option Explicit

' Convert all xls files in selected folder to xlsx

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
        strConversionPath = .SelectedItems(1)
    End With

    Set FSO = New Scripting.FileSystemObject

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

        ' Loop through files, find the .xls files
        For Each fFile In fFolder.Files
            If Right(fFile.Name, 4) = ".xls" Or Right(fFile.Name, 4) = ".XLS" Then
                Application.DisplayAlerts = False
                Set wkbConvert = Workbooks.Open(fFile.Path)
                ' Save as XML workbook - if file contains macros change FileFormat:=52
                wkbConvert.SaveAs FSO.BuildPath(fFile.ParentFolder, Left(fFile.Name, Len(fFile.Name) - 4)) & ".xlsx", FileFormat:=51
                wkbConvert.Close SaveChanges:=False
                ' Delete original file
                fFile.Delete Force:=True
                Application.DisplayAlerts = True
            End If
        Next fFile

    End If

End Sub

Jika file yang Anda konversi mengandung makro maka Anda perlu memperbarui 'FileFormat: = 51' untuk membaca 'FileFormat: = 52'. Atau jika Anda tidak perlu membuat kode makro dalam file yang dikonversi, Anda bisa membiarkannya sendiri dan itu akan menghapus makro ketika mengubahnya menjadi format xlsx.

Nick Perkins
sumber
Bagaimana jika saya ingin mengonversi .CSV ke .XLSX?
Boris_yo
0
Sub SaveAllAsXLSX ()
Dim strFilename As String
Dim strDocName As String
Dim strPath As String
Dim wbk Sebagai Workbook
Dim fDialog Sebagai FileDialog
Dim intPos As Integer
Dim strPassword As String
Dim strWritePassword As String
Dim varA As String
Dim varB As String
Dim colFiles As Collection Baru
Dim vFile As Variant
Set fDialog = Application.FileDialog (msoFileDialogFolderPicker)
Dengan fDialog
    .Title = "Pilih folder dan klik OK"
    .AllowMultiSelect = Benar
    .InitialView = msoFileDialogViewList
    Jika .Show -1 Lalu
        MsgBox "Dibatalkan Oleh Pengguna",, "Daftar Isi Folder"
        Keluar Sub
    Berakhir jika
    strPath = fDialog.SelectedItems.Item (1)
    Jika Benar (strPath, 1) "\" Lalu strPath = strPath + "\"
Berakhir dengan
If Left (strPath, 1) = Chr (34) Kemudian
    strPath = Pertengahan (strPath, 2, Len (strPath) - 2)
Berakhir jika
Set obj = CreateObject ("Scripting.FileSystemObject")
FileFile RecursiveDir, strPath, "* .xls", Benar
Untuk Setiap vFile Di colFiles
        Debug.Print vFile
    strFilename = vFile
    varA = Kanan (strFilename, 3)
    Jika (varA = "xls" Atau varA = "XLSX") Kemudian
     Set wbk = Workbooks.Open (Nama file: = strFilename)
       Jika wbk.HasVBProject Kemudian
              wbk.SaveAs Nama file: = strFilename & "m", FileFormat: = xlOpenXMLWorkbookMacroEnabled
            Lain
               wbk.SaveAs Nama file: = strFilename & "x", FileFormat: = xlOpenXMLWorkbook
            Berakhir jika
            wbk.Tutup SaveChanges: = Salah
           obj.DeleteFile (strFilename)
    Berakhir jika
VFile selanjutnya

End Sub
Fungsi Publik RecursiveDir (colFiles As Collection, _
                             strFolder As String, _
                             strFileSpec As String, _
                             bIncludeSubfolder Sebagai Boolean)

    Dim strTemp As String
    Dim colFolders As Collection Baru
    Dim vFolderName As Variant

    'Tambahkan file dalam strFolder yang sesuai strFileSpec ke colFiles
    strFolder = TrailingSlash (strFolder)
    strTemp = Dir (strFolder & strFileSpec)
    Do While strTemp vbNullString
        colFiles.Tambahkan strFolder & strTemp
        strTemp = Dir
    Loop

    Jika bIncludeSubfolders Then
        'Isi colFolder dengan daftar subdirektori dari strFolder
        strTemp = Dir (strFolder, vbDirectory)
        Do While strTemp vbNullString
            If (strTemp ".") Dan (strTemp "..") Kemudian
                If (GetAttr (strFolder & strTemp) Dan vbDirectory) 0 Lalu
                    colFolders.Tambahkan strTemp
                Berakhir jika
            Berakhir jika
            strTemp = Dir
        Loop

        'Panggil RecursiveDir untuk setiap subfolder di colFolder
        Untuk Setiap vFolderName Dalam colFolder
            Panggil RecursiveDir (colFiles, strFolder & vFolderName, strFileSpec, True)
        VFolderName Selanjutnya
    Berakhir jika

Fungsi Akhir
Fungsi Publik TrailingSlash (strFolder As String) Sebagai String
    If Len (strFolder)> 0 Then
        If Right (strFolder, 1) = "\" Lalu
            TrailingSlash = strFolder
        Lain
            TrailingSlash = strFolder & "\"
        Berakhir jika
    Berakhir jika
Fungsi Akhir

pratap
sumber
8
Alih-alih hanya menempelkan banyak kode, bisakah Anda juga menjelaskan sedikit apa yang dilakukannya, bagaimana menggunakannya, dan apa batasannya (jika ada)? Itu akan lebih bermanfaat bagi pengunjung masa depan.
slhck
0

Jika Anda telah menginstal MsOffice, maka alat ini mungkin layak diunduh untuk perbaikan cepat.

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

Ketika Anda memilih folder untuk melihat file xls dikonversi, pastikan Anda mencentang opsi alat konversi yang menggunakan MS Office untuk konversi, bukan konverter mereka sendiri.

Jika Anda menggunakan konverter mereka sendiri, Anda akan kehilangan warna di sel dan satu lembar tampaknya keluar. Jika Anda menggunakan MsOffice sebagai konverter tampaknya berfungsi dengan baik. Alat yang bagus untuk perbaikan cepat.

99Sono
sumber
0

Jadi saya menulis VBScript sederhana untuk mengonversi file .xls ke .xlsx dengan diam.

./convert-xls-xlsx.vbs {path ke folder yang berisi file .xls}

convert-xls-xlsx.vbs:

    Setel args = WScript.Arguments
    strPath = args (0)
    strPath = CreateObject ("Scripting.FileSystemObject"). GetAbsolutePathName (strPath)
    Setel objExcel = CreateObject ("Excel.Application")
    objExcel.Visible = Salah
    objExcel.DisplayAlerts = Salah
    Set objFso = CreateObject ("Scripting.FileSystemObject")
    Setel objFolder = objFso.GetFolder (strPath)
    Untuk Setiap objFile Di objFolder.Files
        fileName = objFile.Path
        If (objFso.GetExtensionName (objFile.Path) = "xls") Kemudian
            Setel objWorkbook = objExcel.Workbooks.Open (fileName)
            saveFileName = Ganti (fileName, ". xls", ". xlsx")
            objWorkbook.SaveAs saveFileName, 51
            objWorkbook.Close ()
            objExcel.Application.DisplayAlerts = Benar
        Berakhir jika
    Lanjut
    MsgBox "Selesai konversi"

CATATAN: Cari spasi di path folder, jika path Anda memiliki spasi di antaranya, masukkan path dalam tanda kutip.

revosftw
sumber