XLS를 XLSX로 일괄 변환


12

XLS 파일 만 내보낼 수있는 이전 응용 프로그램으로 작업해야하며 XLSX 파일 만 읽을 수있는 EPPlus 라이브러리를 사용하여 .Net에서 프로그램을 작성합니다.

XLS에서 XLSX로 일괄 변환하는 가장 쉬운 방법은 무엇입니까?

답변:


6

Office 마이그레이션 계획 관리자를 확인하십시오.

툴킷에는 OFC (Office 파일 변환기)도 포함되어있어 이진 형식에서 OpenXML 형식으로 대량 문서 변환이 가능합니다. ( 테크넷 )

Technet에 대한 개요

다운로드 링크

Microsoft Office Compatibility Pack for Word, Excel, and PowerPoint File FormatsOFC가 작동하려면 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

그래서 .xls 파일을 .xlsx로 자동 변환하는 간단한 VBScript를 작성했습니다.

./convert-xls-xlsx.vbs {.xls 파일이 포함 된 폴더 경로}

convert-xls-xlsx.vbs :

    인수 = WScript.Arguments 설정
    strPath = 인수 (0)
    strPath = CreateObject ( "Scripting.FileSystemObject"). GetAbsolutePathName (strPath)
    objExcel = CreateObject ( "Excel.Application") 설정
    objExcel.Visible = 거짓
    objExcel.DisplayAlerts = 거짓
    objFso = CreateObject ( "Scripting.FileSystemObject") 설정
    objFolder = objFso.GetFolder (strPath) 설정
    objFolder.Files의 각 objFile에 대해
        fileName = objFile.Path
        (objFso.GetExtensionName (objFile.Path) = "xls")이면
            objWorkbook = objExcel.Workbooks.Open (fileName) 설정
            saveFileName = 바꾸기 (fileName, ". xls", ". xlsx")
            objWorkbook.SaveAs saveFileName, 51
            objWorkbook.Close ()
            objExcel.Application.DisplayAlerts = True
        끝 경우
    다음
    MsgBox "완료된 변환"

참고 : 폴더 경로에 공백이 있는지 확인하십시오. 경로 사이에 공백이 있으면 경로를 따옴표로 묶으십시오.


매크로에 대해 알고 싶지 않고 삭제하기 때문에 DisplayAlerts = False로 변경했습니다. 그러므로 처음에 이러한 것들을 변환하는 이유입니다. 그런 다음 최종 MsgBox를 제거했습니다.
BeowulfNode42

0
하위 SaveAllAsXLSX ()
문자열로 Dim strFilename
문자열로 Dim strDocName
문자열로 Dim strPath
통합 문서로 Dim wbk
파일 대화 상자로 Dim fDialog
정수로 Dit intPos
문자열로 희미한 strPassword
문자열로 Dim strWritePassword
문자열로 희미한 varA
문자열로 희미하게 varB
새로운 컬렉션으로 Dim colFiles
변형으로 희미한 vFile
fDialog = Application.FileDialog (msoFileDialogFolderPicker) 설정
fDialog로
    .Title = "폴더를 선택하고 확인을 클릭하십시오"
    .AllowMultiSelect = True
    .InitialView = msoFileDialogViewList
    .Show -1이면
        MsgBox "사용자 별 취소",, "폴더 내용 나열"
        서브 종료
    끝 경우
    strPath = fDialog.SelectedItems.Item (1)
    Right (strPath, 1) "\"이면 strPath = strPath + "\"
끝
Left (strPath, 1) = Chr (34)이면
    strPath = 중간 (strPath, 2, Len (strPath)-2)
끝 경우
obj = CreateObject ( "Scripting.FileSystemObject") 설정
recursiveDir colFiles, strPath, "* .xls", True
colFiles의 각 vFile
        Debug.Print vFile
    strFilename = v 파일
    varA = 오른쪽 (strFilename, 3)
    (varA = "xls"또는 varA = "XLSX") 인 경우
     wbk = Workbooks.Open (파일 이름 : = str 파일 이름) 설정
       wbk.HasVBProject 인 경우
              wbk.SaveAs 파일 이름 : = str 파일 이름 및 "m", 파일 형식 : = xlOpenXMLWorkbookMacroEnabled
            그밖에
               wbk.SaveAs 파일 이름 : = str 파일 이름 & "x", 파일 형식 : = xlOpenXMLWorkbook
            끝 경우
            wbk. 닫기 저장 변경 사항 : = 거짓
           obj.DeleteFile (strFilename)
    끝 경우
다음 vFile

엔드 서브
퍼블릭 함수 RecursiveDir (colFiles as Collection, _
                             문자열로 strFolder, _
                             문자열로 strFileSpec, _
                             부울로 하위 폴더 포함)

    문자열로 희미한 strTemp
    Dim colFolders As New Collection
    변형으로 희미한 vFolderName

    'strFileSpec과 일치하는 strFolder의 파일을 colFiles에 추가
    strFolder = 트레일 링 슬래시 (strFolder)
    strTemp = Dir (str 폴더 및 strFileSpec)
    strTemp vbNullString 동안 수행
        strFile 및 strTemp 추가
        strTemp = Dir
    고리

    bIncludeSubfolders 인 경우
        'strFolder의 서브 디렉토리 목록이있는 colFolders 작성
        strTemp = Dir (strFolder, vbDirectory)
        strTemp vbNullString 동안 수행
            If (strTemp ".") 그리고 (strTemp "..") 그렇다면
                If (GetAttr (strFolder & strTemp) And vbDirectory) 0 그렇다면
                    colFolders. strTemp 추가
                끝 경우
            끝 경우
            strTemp = Dir
        고리

        colFolders의 각 하위 폴더에 대한 'Call RecursiveDir
        colFolders의 각 vFolderName에 대해
            RecursiveDir (colFiles, strFolder & vFolderName, strFileSpec, True) 호출
        다음 vFolderName
    끝 경우

최종 기능
문자열로 공용 함수 TrailingSlash (strFolder As String)
    Len (strFolder)> 0이면
        Right (strFolder, 1) = "\"이면
            후행 슬래시 = 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.