Что я пытаюсь сделать:
У меня есть 3 xls файла, которые я получаю по электронной почте, названные так (отметка даты меняется каждый раз):
CDC aaa 01 01 2018.xls
CDC bbb 01 01 2018.xls
CDC ccc 01 01 2018.xls
Я хочу:
- конвертировать их в CSV
- назовите их так: aaa.csv, bbb.csv, ccc.csv
Вот мой сценарий, который пока не работает:
@ECHO OFF
setlocal enableextensions enabledelayedexpansion
for %%F in ("*.xls") do (
REM get filename only
set tmp=%%~F
REM look for aaa
echo.!tmp! | findstr /i "aaa" 1>nul
if errorlevel 1 (
echo. Not aaa.
) ELSE (
echo. Found aaa
set fileout=aaa.csv
)
REM look for bbb
echo.!tmp! | findstr /i "bbb" 1>nul
if errorlevel 1 (
echo. Not bbb.
) ELSE (
echo. Found bbb.
set fileout=bbb.csv
)
REM look for ccc
echo.!tmp! | findstr /i "ccc" 1>nul
if errorlevel 1 (
echo. Not ccc.
) ELSE (
echo. Found ccc.
set fileout=ccc.csv
)
REM convert and rename file
xlstocsv.vbs "!tmp!" "!fileout!"
)
Когда я запускаю это, я получаю сообщение об ошибке Windows Script Host :
Script: C:\[bla]\xlstocsv.vbs
Line: 17
Char: 1
Error: The file could not be accessed. Try one of the following:
- Make sure folder exists
- Make sure the folder that contains the file is not read-only
- Make sure the file name does not contain anu of the following characters: < > ? [ ] : CDC aaa 01 01 2018.xls or *
- Make sure the file/path name doesn't contain more than 218 characters
- Code: 800A03EC
- Source: Microsoft Excel
Я могу подтвердить, что файлы / папки не только для чтения, я могу подтвердить, что в пути / имени файла нет специальных символов и путь не длиннее 218 символов.
Я также могу подтвердить, что файлы Excel не повреждены и не повреждены каким-либо образом.
Я также могу сказать, что, хотя я вижу сообщение об ошибке, если я пытаюсь открыть ЛЮБОЙ из 3 файлов в Excel (не только тот, за который я получаю ошибку), Excel выдает точно такую же ошибку, как указано выше.
Если я запускаю этот скрипт, он работает просто отлично:
setlocal enableextensions enabledelayedexpansion
for %%F in ("*.xls") do (
xlstocsv.vbs "%%~nF.xls" "%%~nF.csv"
)
но эта версия скрипта не переименовывает мои файлы в нужные имена файлов, просто меняет расширение.
Вот VBScript:
if WScript.Arguments.Count < 2 Then
WScript.Echo "Please specify the source and the destination files. Usage: ExcelToCsv <xls/xlsx source file> <csv destination file>"
Wscript.Quit
End If
csv_format = 6
Set objFSO = CreateObject("Scripting.FileSystemObject")
src_file = objFSO.GetAbsolutePathName(Wscript.Arguments.Item(0))
dest_file = objFSO.GetAbsolutePathName(WScript.Arguments.Item(1))
Dim oExcel
Set oExcel = CreateObject("Excel.Application")
Dim oBook
Set oBook = oExcel.Workbooks.Open(src_file)
oBook.SaveAs dest_file, csv_format
oBook.Close False
oExcel.Quit