Пакетне перетворення XLS в XLSX


12

Мені потрібно працювати зі старим додатком, який може експортувати лише файли XLS, і я записую програми в .Net, використовуючи бібліотеку EPPlus, здатну читати файли XLSX.

Який найпростіший спосіб пакетного перетворення з XLS в XLSX?

Відповіді:


6

Ознайомтеся з менеджером з планування міграції Office.

Інструментарій також містить конвертер файлів Office (OFC), який дозволяє здійснювати масові перетворення документів з бінарних у OpenXML формати. ( Technet )

Огляд на Technet

Посилання для завантаження

Зауважте, що вам також знадобиться Microsoft Office Compatibility Pack for Word, Excel, and PowerPoint File FormatsOFC для роботи.
Обидва інструменти насправді вже не підтримуються.


1
Здається, досить багато людей, включаючи мене, мають проблеми з цим інструментом, не в змозі конвертувати свої файли xls без видимих ​​причин.
Джон

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 = Неправдиво
    Встановити objFso = CreateObject ("Scripting.FileSystemObject")
    Встановити objFolder = objFso.GetFolder (strPath)
    Для кожного objFile у objFolder.Files
        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 = Істинно
        Кінець Якщо
    Далі
    MsgBox "Готові перетворення"

ПРИМІТКА. Подивіться на пробіли в шляху до папки, якщо ваш шлях має пробіл між ними, поставте шлях у лапки.


Я змінив DisplayAlerts на = False, оскільки я не хочу знати про будь-які макроси, просто видаляю їх, тому я перетворюю ці речі в першу чергу. Потім вилучив остаточний MsgBox, так як я не хотів, щоб він міняв мене.
BeowulfNode42

@ BeowulfNode42 круто, але я думаю, що я тримав DisplayAlerts лише тому, що мої робочі книжки були пошкоджені. Але знову ж таки я точно зараз не пам’ятаю.
revosftw

0
Sub SaveAllAsXLSX ()
Dim strFimename як рядок
Dim strDocName як рядок
Темний strPath як рядок
Dim wbk як робочий зошит
Дім fDialog як FileDialog
Темний intPos як цілий
Dim strPassword As String
Dim strWritePassword As String
Dim varA As String
Дім varB як рядок
Затемнення кол-файлів як нова колекція
Dim vFile як варіант
Встановити fDialog = Application.FileDialog (msoFileDialogFolderPicker)
За допомогою fDialog
    .Title = "Виберіть папку та натисніть кнопку ОК"
    .AllowMultiSelect = Істинно
    .InitialView = msoFileDialogViewList
    Якщо. Покажіть -1 Тоді
        MsgBox "Скасовано користувачем", "Список вмісту папок"
        Вихід із суб
    Кінець Якщо
    strPath = fDialog.SelectedItems.Item (1)
    Якщо справа (strPath, 1) "\" Тоді strPath = strPath + "\"
Закінчитися с
Якщо зліва (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 Ім'я файлу: = strFnamename & "m", FileFormat: = xlOpenXMLWorkbookMacroEnabled
            Інше
               wbk.SaveAs Назва файлу: = strFimename & "x", FileFormat: = xlOpenXMLWorkbook
            Кінець Якщо
            wbk.Закрийте SaveChanges: = Неправильно
           obj.DeleteFile (strFilename)
    Кінець Якщо
Наступний vFile

Кінець Під
Публічна функція RecursiveDir (colFiles As Collection, _
                             strFolder As String, _
                             strFileSpec As String, _
                             bIncludeSupfolders As Boolean)

    Dim strTemp As String
    Темні збірники як нова колекція
    Dim vFolderName як варіант

    'Додати файли у 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.Add strTemp
                Кінець Якщо
            Кінець Якщо
            strTemp = Dir
        Петля

        'Виклик RecursiveDir для кожної підпапки в ColFolders
        Для кожного vFolderName In ColFolders
            Виклик RecursiveDir (colFiles, strFolder & vFolderName, strFileSpec, True)
        Наступна vFolderName
    Кінець Якщо

Кінцева функція
TrailingSlash публічної функції (strFolder As String) як рядок
    Якщо Лен (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 як конвертер, здається, працює добре. Хороший інструмент для швидкого виправлення.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.