VBScript для преобразования XML в CSV

У меня есть VBScript, который преобразует любой файл XML в папке в XLS, а затем удаляет файлы XML - все работает нормально.

Однако я знаю, что нужно преобразовать XML в CSV, а не в XLS.

Что мне нужно изменить в скрипте, чтобы разрешить это? Очевидно, что простое изменение расширения результирующего файла (файлов) не работает.

Dim xlApp, xlWkb, SourceFolder,TargetFolder,file
Set xlApp = CreateObject("excel.application")
Set fs = CreateObject("Scripting.FileSystemObject")

Const xlNormal=1

SourceFolder="c:\xml-to-xls\xml"
TargetFolder="c:\xml-to-xls\xls"

xlApp.Visible = false

for each file in fs.GetFolder(SourceFolder).files
  Set xlWkb = xlApp.Workbooks.Open(file)
  BaseName= fs.getbasename(file)
  FullTargetPath=TargetFolder & "\" & BaseName & ".xls"
  xlWkb.SaveAs FullTargetPath, xlNormal
  xlWkb.close
next

fs.DeleteFile("C:\xml-to-xls\xml\*.xml")

Set xlWkb = Nothing
Set xlApp = Nothing
Set fs = Nothing

Спасибо


person chenks    schedule 29.10.2013    source источник
comment
Я удалил все комментарии из кода. Совершенно необязательно комментировать так: xlWkb.close ' close workbook - код уже говорит об этом. По сути, вы пишете свою программу дважды - это чепуха. Не делай этого.   -  person Tomalak    schedule 29.10.2013


Ответы (2)


Обновление в соответствии с комментариями: спасибо, ребята

Const xlCSV = 6
xlWkb.SaveAs FullTargetPath, xlCSV, , , , , , 2
xlWbk.Saved = True
xlWkb.close
person ServerGuy    schedule 29.10.2013
comment
xlCSV недоступно в качестве имени в VBScript, вам нужно будет сделать Const xlCSV = 6 заранее. - person Tomalak; 29.10.2013
comment
Я бы поставил его после другого определения Const. - person Tomalak; 29.10.2013
comment
попробую, а там посмотрим, какие результаты - person chenks; 29.10.2013
comment
нет, похоже, это не работает так, как должно. он запрашивает для каждого файла, хочу ли я сохранить изменения в файле CSV, что требует от меня нажатия YES до его завершения. Кроме того, если я нажму YES, результирующий файл будет не таким, как если бы я вручную сохранил файл XLS (используя origin vbscript) как CSV. - person chenks; 29.10.2013
comment
Вам может потребоваться указать аргумент ConflictResolution (xlWkb.SaveAs FullTargetPath, xlCSV, , , , , , 2. И Чем именно отличаются результаты?CSV – это другой формат, который не поддерживает все функции, предоставляемые XLS(X). - person Ansgar Wiechers; 29.10.2013
comment
я имел в виду, что простое присвоение файлу расширения CSV не делает его автоматически файлом CSV, что, по сути, и делал скрипт. - person chenks; 30.10.2013
comment
Хорошо, мы использовали аргумент ConflictResolution, как уже упоминалось, и теперь XML-файлы сохраняются в CSV. 1, тем не менее, я получаю запрос на сохранение для каждого файла с вопросом, хочу ли я сохранить изменения. мне нужно, чтобы это был тихий процесс, не требующий ручного взаимодействия с пользователем. - person chenks; 31.10.2013
comment
@chenks Добавьте строку xlWbk.Saved = True перед закрытием книги. - person Ansgar Wiechers; 01.11.2013
comment
последний вопрос, что мне нужно добавить, чтобы, если в настоящее время в папке XML нет файлов, сценарий завершился с ошибкой. на данный момент, если нет файлов для конвертации, выдает сообщение об ошибке: файл не найден - person chenks; 01.11.2013
comment
@chenks Это, вероятно, вызвано строкой fs.DeleteFile("C:\xml-to-xls\xml\*.xml"). Чтобы этого избежать, перемещайте удаление внутри цикла и удаляйте каждый файл после его обработки (file.Delete). - person Ansgar Wiechers; 02.11.2013

спасибо ребята... вот и готовый скрипт

Dim xlApp, xlWkb, SourceFolder,TargetFolder,file
Set xlApp = CreateObject("excel.application")
Set fs = CreateObject("Scripting.FileSystemObject")

Const xlNormal=1
Const xlCSV=6

SourceFolder="c:\xml-to-xls\xml"
TargetFolder="c:\xml-to-xls\xls"

xlApp.Visible = false

for each file in fs.GetFolder(SourceFolder).files
  Set xlWkb = xlApp.Workbooks.Open(file)
  BaseName= fs.getbasename(file)
  FullTargetPath=TargetFolder & "\" & BaseName & ".csv"
  xlWkb.SaveAs FullTargetPath, xlCSV, , , , , , 2
  xlWkb.Saved = True
  xlWkb.close
  file.Delete
next

Set xlWkb = Nothing
Set xlApp = Nothing
Set fs = Nothing
person chenks    schedule 04.11.2013