Мені потрібно працювати зі старим додатком, який може експортувати лише файли XLS, і я записую програми в .Net, використовуючи бібліотеку EPPlus, здатну читати файли XLSX.
Який найпростіший спосіб пакетного перетворення з XLS в XLSX?
Мені потрібно працювати зі старим додатком, який може експортувати лише файли XLS, і я записую програми в .Net, використовуючи бібліотеку EPPlus, здатну читати файли XLSX.
Який найпростіший спосіб пакетного перетворення з XLS в XLSX?
Відповіді:
Ознайомтеся з менеджером з планування міграції Office.
Інструментарій також містить конвертер файлів Office (OFC), який дозволяє здійснювати масові перетворення документів з бінарних у OpenXML формати. ( Technet )
Зауважте, що вам також знадобиться Microsoft Office Compatibility Pack for Word, Excel, and PowerPoint File Formats
OFC для роботи.
Обидва інструменти насправді вже не підтримуються.
Я рекомендую використовувати макрос для обробки файлів у папці для їх перетворення з 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.
Тому я написав простий 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 "Готові перетворення"
ПРИМІТКА. Подивіться на пробіли в шляху до папки, якщо ваш шлях має пробіл між ними, поставте шлях у лапки.
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 & "\" Кінець Якщо Кінець Якщо Кінцева функція
Якщо у вас встановлено MsOffice, для швидкого виправлення цей інструмент, можливо, варто завантажити.
http://www.softinterface.com/Convert-XLS/Features/Convert-XLS-To-XLSX.htm
Коли ви вибираєте папку для перегляду файлів xls, що конвертуються, переконайтесь, що ви поставите галочку для інструменту перетворення, який використовує MS Office для перетворення, а не їх власного конвертера.
Якщо ви використовуєте їх власний конвертер, ви втратите кольори в клітинках, і одиничний аркуш, здається, вийде. Якщо ви використовуєте MsOffice як конвертер, здається, працює добре. Хороший інструмент для швидкого виправлення.