Iska, День добрый! С логированием разобрался, с горем пополам.
Хочу сделать проверку, в ситуации когда папка с файлами реестра пуста, чтобы выводилось сообщение об этом.
Просьба подсказать где ошибка.. у меня выводится сообщение что реестров нет (папка пуста) при любых случаях, даже если файлы там есть.
Скрытый текст
Option Explicit
Const xlCSV = 6
Const xlWindows = 2
Dim Log 'Лог-файл
Dim strSourceFolder
Dim strSourceFile
Dim strTemplateFile
Dim strRelativeDestFolder
Dim strDestFolder
Dim strLogDestFolder 'Папка, в которой будут создаваться лог-файлы
Dim objFSO
Dim objExcel
Dim objFolder
Dim colFiles
Dim objFile
Dim objTemplateFile
Dim objSourceFile
Dim i
Dim strDestFile
Dim strLogDestFile
Dim SumSourceFile 'Сумма по реестру
Dim SumDestFile 'Сумма по чекам
Dim SumTotal 'Общая сумма
Dim CountSourceFiles 'Для подсчета файлов реестра
CountSourceFiles = 0
Dim anyValue
'Здесь указать полный адрес папки с файлами реестра:
strSourceFolder = "C:\Реестр\Реестр"
strTemplateFile = "C:\Реестр\Шаблон\check.csv"
strRelativeDestFolder = "..\Итог"
strLogDestFolder = "C:\Касса"
'If WScript.Arguments.Count = 1 Then
' strSourceFolder = WScript.Arguments.Item(0)
Set objFSO = WScript.CreateObject("Scripting.FileSystemObject")
If objFSO.FileExists(strTemplateFile) Then
If objFSO.FolderExists(strSourceFolder) Then
If objFSO.FileExists(objSourceFile) Then
strDestFolder = objFSO.GetAbsolutePathName(objFSO.BuildPath(strSourceFolder, strRelativeDestFolder))
If Not objFSO.FolderExists(strDestFolder) Then
objFSO.CreateFolder strDestFolder
End If
'Создание папки Касса:
If Not objFSO.FolderExists(strLogDestFolder) Then
objFSO.CreateFolder strLogDestFolder
End If
Set objExcel = Nothing
For Each objFile In objFSO.GetFolder(strSourceFolder).Files
'Подсчет количества файлов реестра:
CountSourceFiles = CountSourceFiles + 1
Select Case LCase(objFSO.GetExtensionName(objFile.Name))
Case "xls", "xlsx"
If objExcel Is Nothing Then
Set objExcel = WScript.CreateObject("Excel.Application")
End If
objExcel.Workbooks.OpenText strTemplateFile, , , , , , , , , , , , , , , , , True
Set objTemplateFile = objExcel.Workbooks.Item(1)
Set objSourceFile = objExcel.Workbooks.Open(objFile.Path, False, True)
For i = 1 To objSourceFile.Worksheets.Item(1).UsedRange.Rows.Count - 2
With objTemplateFile.Worksheets.Item(1)
anyValue = objSourceFile.Worksheets.Item(1).Cells.Item(i + 1, 5).Value
.Range("B3").Value = anyValue
.Range("F2").Value = anyValue
anyValue = objSourceFile.Worksheets.Item(1).Cells.Item(i + 1, 6).Value
.Range("D3").Value = anyValue
.Range("D4").Value = anyValue
.Range("H3").Value = anyValue
.Range("L3").Value = Fix((anyValue * 18 / 118 + 0.005) * 100) / 100
'Подсчет общей суммы:
SumTotal = SumTotal + anyValue
'Подсчет суммы по реестру:
SumSourceFile = SumSourceFile + anyValue
'Подсчет суммы по чекам:
SumDestFile = SumDestFile + .Range("H3").Value
End With
strDestFile = objFSO.BuildPath(strDestFolder, objFSO.GetBaseName(strTemplateFile) & "_" & objFSO.GetBaseName(objFile.Name) & "_" & Right("000" & CStr(i), 3) & "." & objFSO.GetExtensionName(strTemplateFile))
If objFSO.FileExists(strDestFile) Then
objFSO.DeleteFile strDestFile, True
End If
objTemplateFile.SaveAs strDestFile, xlCSV, , , , , , , , , , True
Next
'В strLogDestFile записывается где будет создан лог-файл и как он будет называться:
strLogDestFile = objFSO.BuildPath(strLogDestFolder, Day(now) & "_" & Month(now) & "_" & Year(now) & ".txt")
'Открытие лог-файла или создание, если его нет:
Set Log = objFSO.OpenTextFile(strLogDestFile, 8, True)
'Запись данных в лог-файл:
Log.Write FormatDateTime(now, 0) 'В лог записывается дата и время обработки файлов
Log.Write ". Обработан файл " & objFSO.GetBaseName(objFile.Name) & "." & objFSO.GetExtensionName(objFile.Name)
Log.Write ". Строк обработано: " & CStr(objSourceFile.Worksheets.Item(1).UsedRange.Rows.Count - 2)
Log.Write ". Чеков создано: " & CStr(objSourceFile.Worksheets.Item(1).UsedRange.Rows.Count - 2)
Log.Write ". Сумма по реестру: " & SumSourceFile
Log.Write ". Сумма по чекам: " & SumDestFile
'Сравнение сумм по реестру и чекам - если они равны, то это записывается в лог
If SumSourceFile = SumDestFile Then
Log.Write ". Суммы равны."
End If
Log.WriteBlankLines(1)
Log.Close
'Обнуление сумм, чтобы для каждого файла реестра и его чеков считалась своя отдельная сумма
SumSourceFile = 0
SumDestFile = 0
objSourceFile.Close False
objTemplateFile.Close False
End Select
Next
If Not objExcel Is Nothing Then
objExcel.Quit
Set objExcel = Nothing
End If
' Очищение папки Реестр
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder(strSourceFolder)
Set colFiles = objFolder.Files
For Each objFolder in colFiles
objFolder.Delete
next
'Выводит окно о завершении обработки файлов:
WScript.Echo "Чеки сформированы успешно. Обработано " & CountSourceFiles & " реестра на сумму " & SumTotal & "."
Else
WScript.Echo "Нет файла реестра [" & strSourceFile & "]."
WScript.Quit 3
End if
Else
WScript.Echo "Can't find source folder [" & strSourceFolder & "]."
WScript.Quit 2
End If
Set objFSO = Nothing
Else
WScript.Echo "Can't find template file [" & strTemplateFile & "]."
WScript.Quit 1
End If
'Else
' WScript.Echo "Usage: cscript.exe //nologo """ & WScript.ScriptName & """ <Source folder>"
' WScript.Quit 1
'End If
WScript.Quit 0