Мені потрібно працювати зі старим додатком, який може експортувати лише файли 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 FormatsOFC для роботи.
Обидва інструменти насправді вже не підтримуються.
Я рекомендую використовувати макрос для обробки файлів у папці для їх перетворення з 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 як конвертер, здається, працює добре. Хороший інструмент для швидкого виправлення.