XLSからXLSXへのバッチ変換


12

XLSファイルのみをエクスポートできる古いアプリケーションを使用する必要があり、XLSXファイルの読み取りのみが可能なEPPlusライブラリを使用して.Netでプログラムを作成します。

XLSからXLSXにバッチ変換する最も簡単な方法は何ですか?

回答:


6

Office Migration Planning Managerをご覧ください。

このツールキットにはOffice File Converter(OFC)も含まれており、バイナリからOpenXML形式へのドキュメントの一括変換が可能です。(Technet

Technetの概要

リンクをダウンロード

Microsoft Office Compatibility Pack for Word, Excel, and PowerPoint File FormatsOFCを動作させるためにもが必要になることに注意してください。
どちらのツールも実際にはサポートされていないようです。


1
私を含むかなりの数の人々が、このツールがxlsファイルの変換に失敗し、認識できる理由がないという問題を抱えているようです。
John

3

マクロを使用してフォルダー内のファイルを処理し、xlsからxlsxに変換することをお勧めします。このコードは、ファイルがすべて1つのフォルダー内にあり、すべての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 2014

0
Sub SaveAllAsXLSX()
strFilename As Stringを暗くする
Dim strDocName As String
strPath As String
ワークブックとしてDim wbk
Dim fDialog As FileDialog
Dim intPos As Integer
Dim strPassword As String
Dim strWritePassword As String
Dim varA As String
文字列としてDim varB
Dim colFiles As New Collection
バリアントとしてDim vFile
fDialog = Application.FileDialog(msoFileDialogFolderPicker)を設定します。
fDialogを使用
    .Title = "フォルダーを選択して[OK]をクリックします"
    .AllowMultiSelect = True
    .InitialView = msoFileDialogViewList
    もし.Show -1 Then
        MsgBox「ユーザーによるキャンセル」、「フォルダの内容のリスト」
        サブを終了
    終了する場合
    strPath = fDialog.SelectedItems.Item(1)
    If Right(strPath、1) "\" Then strPath = strPath + "\"
で終わる
If Left(strPath、1)= Chr(34)Then
    strPath = Mid(strPath、2、Len(strPath)-2)
終了する場合
Set obj = CreateObject( "Scripting.FileSystemObject")
RecursiveDir colFiles、strPath、 "*。xls"、True
colFilesの各vFile
        Debug.Print vFile
    strFilename = vFile
    varA = Right(strFilename、3)
    (varA = "xls"またはvarA = "XLSX")の場合
     セットwbk = Workbooks.Open(Filename:= strFilename)
       もしwbk.HasVBProjectなら
              wbk.SaveAs Filename:= strFilename& "m"、FileFormat:= xlOpenXMLWorkbookMacroEnabled
            そうしないと
               wbk.SaveAs Filename:= strFilename& "x"、FileFormat:= xlOpenXMLWorkbook
            終了する場合
            wbk.Close SaveChanges:= False
           obj.DeleteFile(strFilename)
    終了する場合
次のvFile

End Sub
Public Function RecursiveDir(colFiles As Collection、_
                             strFolder As String、_
                             strFileSpec As String、_
                             bIncludeSubfolders As Boolean)

    Dim strTemp As String
    Dim colFolders As New Collection
    vFolderNameをバリアントとして無効にする

    'strFileSpecに一致するstrFolderのファイルをcolFilesに追加します
    strFolder = TrailingSlash(strFolder)
    strTemp = Dir(strFolder&strFileSpec)
    strTemp vbNullStringの実行中
        colFiles.Add strFolder&strTemp
        strTemp = Dir
    ループ

    もしbIncludeSubfolders Then
        'colFoldersにstrFolderのサブディレクトリのリストを入力します
        strTemp = Dir(strFolder、vbDirectory)
        strTemp vbNullStringの実行中
            If(strTemp "。")And(strTemp "..")Then
                If(GetAttr(strFolder&strTemp)And vbDirectory)0 Then
                    colFolders.Add strTemp
                終了する場合
            終了する場合
            strTemp = Dir
        ループ

        'colFoldersのサブフォルダーごとにRecursiveDirを呼び出します
        colFoldersの各vFolderName
            RecursiveDir(colFiles、strFolder&vFolderName、strFileSpec、True)を呼び出す
        次のvFolderName
    終了する場合

終了機能
パブリック関数TrailingSlash(strFolder As String)As String
    Len(strFolder)> 0の場合
        If Right(strFolder、1)= "\" Then
            TrailingSlash = strFolder
        そうしないと
            TrailingSlash = strFolder& "\"
        終了する場合
    終了する場合
終了機能


8
一連のコードを単に貼り付けるのではなく、それが何をするか、それをどのように使用するか、(もしあれば)制限は何かについて少し説明してもらえますか?それは将来の訪問者にとってより役立つでしょう。
slhck 2013年

0

MsOfficeがインストールされている場合は、このツールをダウンロードして、すばやく修正できます。

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

フォルダーを選択して、変換されたxlsファイルを表示するときは、MS Officeを使用して、独自のコンバーターではなく、変換ツールオプションにチェックマークを付けてください。

独自のコンバーターを使用すると、セルの色が失われ、1枚のシートが出てきます。MsOfficeをコンバータとして使用すると、うまく機能するようです。迅速な修正に適したツール。


0

そこで、.xlsファイルを.xlsxにサイレントに変換する単純なVBScriptを作成しました。

./convert-xls-xlsx.vbs {.xlsファイルを含むフォルダーへのパス}

convert-xls-xlsx.vbs:

    args = WScript.Argumentsを設定します。
    strPath = args(0)
    strPath = CreateObject( "Scripting.FileSystemObject")。GetAbsolutePathName(strPath)
    Set objExcel = CreateObject( "Excel.Application")
    objExcel.Visible = False
    objExcel.DisplayAlerts = False
    Set objFso = CreateObject( "Scripting.FileSystemObject")
    objFolder = objFso.GetFolder(strPath)を設定します。
    objFolder.Filesの各objFileについて
        fileName = objFile.Path
        If(objFso.GetExtensionName(objFile.Path)= "xls")Then
            セットobjWorkbook = objExcel.Workbooks.Open(fileName)
            saveFileName = Replace(fileName、 "。xls"、 "。xlsx")
            objWorkbook.SaveAs saveFileName、51
            objWorkbook.Close()
            objExcel.Application.DisplayAlerts = True
        終了する場合
    次
    MsgBox "変換が終了しました"

注:パスの間にスペースがある場合は、パスを引用符で囲んでください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.