Batch แปลง XLS เป็น XLSX


12

ฉันต้องทำงานกับแอปพลิเคชันเก่าที่สามารถส่งออกไฟล์ XLS เท่านั้นและฉันเขียนโปรแกรมใน. Net โดยใช้ไลบรารี EPPlus ที่สามารถอ่านไฟล์ XLSX ได้เท่านั้น

วิธีที่ง่ายที่สุดในการแปลงชุดจาก XLS เป็น XLSX คืออะไร?

คำตอบ:


6

ตรวจสอบผู้จัดการการวางแผนโยกย้าย Office

ชุดเครื่องมือนี้ยังมี Office File Converter (OFC) ซึ่งเปิดใช้งานการแปลงเอกสารจำนวนมากจากรูปแบบไบนารีเป็น OpenXML ( Technet )

ภาพรวมเกี่ยวกับ Technet

ลิ้งค์ดาวน์โหลด

โปรดทราบว่าคุณจะต้องMicrosoft Office Compatibility Pack for Word, Excel, and PowerPoint File Formatsใช้ OFC ในการทำงานด้วย
เครื่องมือทั้งสองดูเหมือนจะไม่ได้รับการสนับสนุนอีกต่อไป


1
ปรากฏว่ามีคนไม่กี่คนที่รวมถึงฉันมีปัญหากับเครื่องมือนี้ไม่สามารถแปลงไฟล์ xls ได้โดยไม่มีเหตุผลที่สังเกตเห็นได้
John

3

ฉันขอแนะนำให้ใช้แมโครเพื่อประมวลผลไฟล์ภายในโฟลเดอร์เพื่อแปลงไฟล์จาก xls เป็น xlsx รหัสนี้อนุมานว่าไฟล์ทั้งหมดอยู่ภายในโฟลเดอร์เดียวและไฟล์ xls ทั้งหมดจะต้องถูกแปลง แต่ถ้าคุณต้องการเลือกไฟล์แต่ละไฟล์รหัสนี้สามารถอัปเดตได้

รหัสนี้จะต้องเรียกใช้จาก Excel 2007 หรือสูงกว่าสมุดงาน

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

หมายเหตุ:ถ้าไฟล์ที่คุณกำลังแปลงประกอบด้วยแมโครแล้วคุณจะต้องอัปเดตในการอ่านFileFormat:=xlOpenXMLWorkbook FileFormat:=xlOpenXMLWorkbookMacroEnabledหรือถ้าคุณไม่ต้องการรหัสแมโครในไฟล์ที่แปลงคุณสามารถปล่อยให้มันอยู่คนเดียวและมันจะลบมาโครเมื่อมันแปลงเป็นรูปแบบ xlsx


ถ้าฉันต้องการแปลง. CSV เป็น. XLSX
Boris_yo

1

ดังนั้นฉันจึงเขียน VBScript แบบง่าย ๆ เพื่อแปลงไฟล์. xls เป็น. xlsx แบบเงียบ ๆ

./convert-xls-xlsx.vbs {พา ธ ไปยังโฟลเดอร์ที่มีไฟล์. xls}

convert-xls-xlsx.vbs:

    ตั้ง args = WScript.Arguments
    strPath = args (0)
    strPath = CreateObject ("Scripting.FileSystemObject") GetAbsolutePathName (strPath)
    ตั้งค่า objExcel = CreateObject ("Excel.Application")
    objExcel.Visible = เท็จ
    objExcel.DisplayAlerts = False
    ตั้งค่า objFso = CreateObject ("Scripting.FileSystemObject")
    ตั้งค่า objFolder = objFso.GetFolder (strPath)
    สำหรับแต่ละ objFile ใน objFolder.Files
        fileName = objFile.Path
        ถ้า (objFso.GetExtensionName (objFile.Path) = "xls") จากนั้น
            ตั้งค่า objWorkbook = objExcel.Workbooks.Open (ชื่อไฟล์)
            saveFileName = แทนที่ (fileName, ". xls", ". xlsx")
            objWorkbook.SaveAs saveFileName, 51
            objWorkbook.Close ()
            objExcel.Application.DisplayAlerts = True
        สิ้นสุดถ้า
    ต่อไป
    MsgBox "การแปลงเสร็จสิ้น"

หมายเหตุ: ระวังช่องว่างในเส้นทางโฟลเดอร์หากเส้นทางของคุณมีช่องว่างคั่นกลางให้ใส่เส้นทางด้วยเครื่องหมายคำพูด


ฉันเปลี่ยน DisplayAlerts เป็น = False เนื่องจากฉันไม่ต้องการรู้เกี่ยวกับมาโครใด ๆ เพียงแค่ลบออกนั่นเป็นสาเหตุที่ฉันเปลี่ยนสิ่งเหล่านี้ตั้งแต่แรก จากนั้นลบ MsgBox สุดท้ายออกเนื่องจากฉันไม่ต้องการให้ดักฟังฉัน
BeowulfNode42

@ BeowulfNode42 เจ๋ง แต่ฉันคิดว่าฉันเก็บ DisplayAlerts ไว้เพียงเพราะสมุดงานของฉันเสียหาย แต่อีกครั้งฉันจำไม่ได้ว่าตอนนี้
revosftw

0
Sub SaveAllAsXLSX ()
strFilename ติ่มซำเป็นสตริง
strDocName มัวเป็นสตริง
strpath ติ่มซำเป็นสตริง
Dim wbk เป็นสมุดงาน
Dim fDialog As FileDialog
Dim intPos As Integer
Dim strPassword As String
Dim strWritePassword As String
Dim varA As String
Dim varB As String
Dim colFiles เป็นชุดใหม่
Dim vFile As Variant
ตั้งค่า fDialog = Application.FileDialog (msoFileDialogFolderPicker)
ด้วย fDialog
    .Title = "เลือกโฟลเดอร์แล้วคลิกตกลง"
    .AllowMultiSelect = True
    .InitialView = msoFileDialogViewList
    ถ้า. แสดง -1 แล้ว
        MsgBox "ยกเลิกโดยผู้ใช้", "รายการเนื้อหาโฟลเดอร์"
        ออกจากตำบล
    สิ้นสุดถ้า
    strPath = fDialog.SelectedItems.Item (1)
    ถ้าถูกต้อง (strPath, 1) "\" ดังนั้น strPath = strPath + "\"
จบด้วย
ถ้า Left (strPath, 1) = Chr (34) แล้ว
    strPath = กลาง (strPath, 2, Len (strPath) - 2)
สิ้นสุดถ้า
ตั้งค่า obj = CreateObject ("Scripting.FileSystemObject")
RecursiveDir colFiles, strPath, "* .xls", True
สำหรับแต่ละ vFile In colFiles
        Debug.Print vFile
    strFilename = vFile
    varA = ขวา (strFilename, 3)
    ถ้า (varA = "xls" หรือ varA = "XLSX") จากนั้น
     ตั้งค่า wbk = สมุดงานเปิด (ชื่อไฟล์: = strFilename)
       หาก wbk.HasVBProject นั้น
              wbk.SaveAs ชื่อไฟล์: = strFilename & "m", FileFormat: = xlOpenXMLWorkbookMacroEnabled
            อื่น
               wbk.SaveAs ชื่อไฟล์: = strFilename & "x", FileFormat: = xlOpenXMLWorkbook
            สิ้นสุดถ้า
            wbk.Close SaveChanges: = False
           obj.DeleteFile (strFilename)
    สิ้นสุดถ้า
ถัดไป vFile

ส่วนท้าย
ฟังก์ชั่นสาธารณะ RecursiveDir (colFiles เป็นชุดสะสม, _
                             strFolder เป็นสตริง, _
                             strFileSpec As String, _
                             bIncludeSubfolders ในฐานะบูลีน)

    ติ่มซำ strTemp As String
    Dim colFolders เป็นชุดใหม่
    Dim vFolderName เป็น Variant

    'เพิ่มไฟล์ใน strFolder ที่ตรงกับ strFileSpec ไปที่ colFiles
    strFolder = TrailingSlash (strFolder)
    strTemp = Dir (strFolder & strFileSpec)
    ทำในขณะที่ strTemp vbNullString
        colFiles เพิ่ม strFolder & strTemp
        strTemp = Dir
    ห่วง

    ถ้า bIncludeSubfolders แล้ว
        'เติม colFolders ด้วยรายการไดเรกทอรีย่อยของ strFolder
        strTemp = Dir (strFolder, vbDirectory)
        ทำในขณะที่ strTemp vbNullString
            ถ้า (strTemp ".") และ (strTemp ".. ") จากนั้น
                ถ้า (GetAttr (strFolder & strTemp) และ vbDirectory) 0 จากนั้น
                    colFolders เพิ่ม strTemp
                สิ้นสุดถ้า
            สิ้นสุดถ้า
            strTemp = Dir
        ห่วง

        'โทร RecursiveDir สำหรับแต่ละโฟลเดอร์ย่อยใน colFolders
        สำหรับแต่ละ vFolderName ใน colFolders
            โทร RecursiveDir (colFiles, strFolder & vFolderName, strFileSpec, True)
        ถัดไป vFolderName
    สิ้นสุดถ้า

ฟังก์ชั่นสิ้นสุด
ฟังก์ชั่นที่สาธารณะ TrailingSlash (strFolder As String) As String
    ถ้า Len (strFolder)> 0 จากนั้น
        ถ้าถูกต้อง (strFolder, 1) = "\" จากนั้น
            TrailingSlash = strFolder
        อื่น
            TrailingSlash = strFolder & "\"
        สิ้นสุดถ้า
    สิ้นสุดถ้า
ฟังก์ชั่นสิ้นสุด


8
แทนที่จะแค่วางโค้ดจำนวนหนึ่งคุณอาจอธิบายได้ว่ามันทำอะไรได้บ้างใช้อย่างไรและมีข้อ จำกัด อะไรบ้าง (ถ้ามี) นั่นจะเป็นประโยชน์สำหรับผู้เยี่ยมชมในอนาคต
slhck

0

หากคุณติดตั้ง MsOffice ไว้เครื่องมือนี้อาจคุ้มค่าสำหรับการดาวน์โหลดสำหรับการแก้ไขอย่างรวดเร็ว

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

เมื่อคุณเลือกโฟลเดอร์เพื่อดูไฟล์ xls ที่ถูกแปลงตรวจสอบให้แน่ใจว่าคุณทำเครื่องหมายที่ตัวเลือกเครื่องมือการแปลงที่ใช้ MS Office เพื่อการแปลงไม่ใช่ตัวแปลงของพวกเขาเอง

หากคุณใช้ตัวแปลงของคุณเองคุณจะสูญเสียสีในเซลล์และดูเหมือนว่าแผ่นงานแผ่นเดียวจะออกมา หากคุณใช้ MsOffice เนื่องจากตัวแปลงดูเหมือนจะทำงานได้ดี เครื่องมือที่ดีสำหรับการแก้ไขอย่างรวดเร็ว

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.