У меня около 200 файлов Excel в стандартном формате Excel 2003.
Мне нужно, чтобы все они были сохранены как Excel xml - в основном так же, как открывать каждый файл и выбирать Сохранить как..., а затем выбирать Сохранить как тип:Таблица XML
Знаете ли вы какой-нибудь простой способ автоматизировать эту задачу?


Вы можете адаптировать код, который я разместил здесь:
http://www.atalasoft.com/cs/blogs/loufranco/archive/2008/04/01/loading-office-documents-in-net.aspx
В нем показано, как сохранить в формате PDF (Word отображается в блоге, но если вы загрузите решение, в нем будет код для Excel и PPT).
Вам нужно найти функцию для сохранения в новом формате вместо экспорта (возможно, самый простой способ - записать макрос, в котором вы делаете это в Excel, а затем просматриваете код).
Самый простой способ - записать макрос для одного файла, а затем вручную отредактировать макросы, чтобы выполнить такие действия для файлов в папке, используя цикл. В макросе вы можете использовать стандартные функции VB, чтобы получить все файлы в каталоге и отфильтровать их. Вы можете посмотреть http://www.xtremevbtalk.com/archive/index.php/t-247211.html для получения дополнительной информации.
Откройте их все, а затем нажмите ALT + F11, чтобы перейти в редактор макросов, и введите что-то вроде:
Sub SaveAllAsXml()
Dim wbk As Workbook
For Each wbk In Application.Workbooks
wbk.SaveAs FileFormat:=XlFileFormat.xlXMLSpreadsheet
Next
End Sub
А затем нажмите F5, чтобы запустить его. Может потребоваться небольшая настройка, поскольку я не тестировал его.
Звучит как работа для моего любимого и наиболее недооцененного языка всех времен: VBScript !!
Поместите это в текстовый файл и сделайте расширение ".vbs":
set xlapp = CreateObject("Excel.Application")
set fso = CreateObject("scripting.filesystemobject")
set myfolder = fso.GetFolder("YOURFOLDERPATHHERE")
set myfiles = myfolder.Files
for each f in myfiles
set mybook = xlapp.Workbooks.Open(f.Path)
mybook.SaveAs f.Name & ".xml", 47
mybook.Close
next
Я не тестировал это, но он должен работать
Вот процедура, которая преобразует все файлы в одном каталоге с расширением .xls.
Это требует прямого подхода. Любой код VBA в книге удаляется, книга не сохраняется с расширением .xlsm. Любые предупреждения о несовместимости не отображаются, вместо этого изменения принимаются автоматически.
Sub Convert_xls_Files()
Dim strFile As String
Dim strPath As String
With Application
.EnableEvents = False
.DisplayAlerts = False
.ScreenUpdating = False
End With
'Turn off events, alerts & screen updating
strPath = "C:\temp\excel\"
strFile = Dir(strPath & "*.xls")
'Change the path as required
Do While strFile <> ""
Workbooks.Open (strPath & strFile)
strFile = Mid(strFile, 1, Len(strFile) - 4) & ".xlsx"
ActiveWorkbook.SaveAs Filename:=strPath & strFile, FileFormat:=xlOpenXMLWorkbook
ActiveWorkbook.Close True
strFile = Dir
Loop
'Opens the Workbook, set the file name, save in new format and close workbook
With Application
.EnableEvents = True
.DisplayAlerts = True
.ScreenUpdating = True
End With
'Turn on events, alerts & screen updating
End Sub
Спасибо, Роберт, это сработало очень хорошо. Единственное, что я изменил, это FileFormat: = XlFileFormat.xlXMLSpreadsheet (я использую Excel 2003)
Const xlXLSX = 51
REM 51 = xlOpenXMLWorkbook (without macro's in 2007-2013, xlsx)
REM 52 = xlOpenXMLWorkbookMacroEnabled (with or without macro's in 2007-2013, xlsm)
REM 50 = xlExcel12 (Excel Binary Workbook in 2007-2013 with or without macro's, xlsb)
REM 56 = xlExcel8 (97-2003 format in Excel 2007-2013, xls)
dim args
dim file
dim sFile
set args=wscript.arguments
dim wshell
Set wshell = CreateObject("WScript.Shell")
Set objExcel = CreateObject("Excel.Application")
Set objWorkbook = objExcel.Workbooks.Open( wshell.CurrentDirectory&"\"&args(0))
objExcel.DisplayAlerts = FALSE
objExcel.Visible = FALSE
objWorkbook.SaveAs wshell.CurrentDirectory&"\"&args(1), xlXLSX
objExcel.Quit
Wscript.Quit
Спасибо, Лу, за ответ и за исправление имени расширения файла в вопросе. Я могу рассмотреть ваше предложение, когда мне понадобится более комплексное решение. На данный момент я в порядке с VBA