Я создал консольное приложение, которое очень просто. По сути, я буду запускать каждый понедельник, чтобы сгенерировать отчет для каждого директора с данными только их сотрудников. Каждую неделю он проверяет, существует ли каталог для этой даты (я сохраняю файлы в папке с именем даты), и удаляет, если она есть, и создает ее, если нет. (в случае, если он стартует 2 раза в тот же день). Затем он заполняет шаблон электронной таблицы Excel данными из базы данных SQL (соединение ADODB) и сохраняет его в этом каталоге. Он отлично работает в VS, я создал установочный пакет и установил его на своем сервере, и .exe отлично работает, если выполняется вручную. Проблема, с которой я сталкиваюсь, - это планирование. Я пробовал оба задания SQL (операционная система (CmdExec), которая запускает файл bat, и я пробовал запланированное задание. Оба сталкиваются с одной и той же проблемой, они удаляют каталог и воссоздают папку, но не будут выполнить остальную часть кода. Есть мысли? Вот код: `
Открытый класс GenerateReport
Public Sub Excel()
Dim conn As New ADODB.Connection()
Dim rs As New ADODB.Recordset
Dim rs2 As New ADODB.Recordset
Dim strSQL As String
Dim DirectorID As String
Dim DirectorFullName As String
Dim DateStamp As String
Dim currentTime As System.DateTime = System.DateTime.Now
Dim createreportfolder As String
Dim strFileName As String
Dim appPath As String = System.AppDomain.CurrentDomain.BaseDirectory
Dim OpenPath As String
Try
'createreportfolder = appPath
createreportfolder = Configuration.ConfigurationManager.AppSettings("SaveToPath")
DateStamp = CStr(currentTime.Month & "-" & currentTime.Day & "-" & currentTime.Year)
createreportfolder = createreportfolder + DateStamp
'CREATE NEW DIRECTORY FOR REPORTS
If System.IO.Directory.Exists(createreportfolder) Then
System.IO.Directory.Delete(createreportfolder, True)
End If
System.IO.Directory.CreateDirectory(createreportfolder)
strSQL = "SELECT DISTINCT DirectorID,DirectorFullName FROM tLogClockComparisonReport ORDER BY 1 "
conn.Open("Provider=SQLNCLI11; Initial Catalog=Operations; Data Source=")
conn.CursorLocation = ADODB.CursorLocationEnum.adUseClient
rs.Open(strSQL, conn, CursorTypeEnum.adOpenKeyset, LockTypeEnum.adLockOptimistic)
While Not rs.EOF
DirectorID = rs.Fields("DirectorID").Value
DirectorFullName = rs.Fields("DirectorFullName").Value
Console.WriteLine("Processing - " & DirectorFullName)
strSQL = "SELECT DirectorFullName,Supervisor,Dept,CCLocation,HomeCostNumber,JobTitle,EMployee,PayDate,LogInTablet,LogOutTablet,ClockIn,ClockOut,FirstStop,LastStop,DiffMinIn,DiffMinOut FROM Operations.dbo.tLogClockComparisonReport WHERE DirectorID = '" & DirectorID & "'"
rs2.Open(strSQL, conn, CursorTypeEnum.adOpenKeyset, LockTypeEnum.adLockOptimistic)
'Open a workbook in Excel.
Dim xlsApp As New Excel.Application
Dim xlsWB As Excel.Workbook
Dim xlsSheet As Object
Dim xlsWorkbook As Excel.Workbook
Dim strWorkBookPath As String
OpenPath = Configuration.ConfigurationManager.AppSettings("ExcelTemplatePath")
strWorkBookPath = OpenPath
xlsWB = xlsApp.Workbooks.Open(strWorkBookPath)
xlsApp.Visible = False
'Transfer the data to Excel.
xlsSheet = xlsWB.Worksheets("Summary Data")
xlsSheet.range("A2").CopyFromRecordset(rs2)
xlsSheet = xlsWB.Worksheets("Summary - By Supervisor")
xlsSheet.PivotTables("pvtSup").pivotcache.refresh()
xlsSheet = xlsWB.Worksheets("Summary - By Site")
xlsSheet.PivotTables("pvtSite").pivotcache.refresh()
'HIDE SHEETS
xlsSheet = xlsWB.Worksheets("Summary Data")
xlsSheet.visible = False
rs2.Close()
'Save the workbook and quit Excel.
xlsWB.SaveAs(createreportfolder & "\" & DateStamp & " - " & DirectorFullName)
strFileName = createreportfolder & "\" & DateStamp & " - " & DirectorFullName & ".xlsx"
xlsApp.Quit()
'Dim proc As System.Diagnostics.Process
xlsSheet = Nothing
xlsWorkbook = Nothing
xlsApp = Nothing
rs.MoveNext()
End While
Catch ex As Exception
Debug.WriteLine(ex.Message)
Debug.Write(ex)
Debug.Write(vbCrLf)
Console.WriteLine("Excel Generator FAILED")
End Try
If Process.GetProcessesByName("excel").GetLength(0) > 0 Then
For Each proc In System.Diagnostics.Process.GetProcessesByName("EXCEL")
proc.Kill()
Next
End If
GC.Collect()
'Close the connection
'conn.Close()
End Sub
`