Attribute VB_Name = "Main" Option Explicit Public Sub RunImportCSV() Dim sFile$: sFile = UserInteraction.PromptFileFilter(ThisWorkbook.Path, _ sDescription:="Выгрузка портала CSV", _ sFilter:="*.csv") If sFile = vbNullString Then _ Exit Sub If Not ProcessCSV(sFile) Then _ Exit Sub Call UserInteraction.ShowMessage(IM_IMPORT_SUCCESS) End Sub Public Sub RunImportDB() Dim sFile$: sFile = UserInteraction.PromptFileFilter(ThisWorkbook.Path, _ sDescription:="Таблица Excel", _ sFilter:="*.xlsx;*.xls;*.xlsm") If sFile = vbNullString Then _ Exit Sub Dim xlInput As New API_XLWrapper: Call xlInput.SetApplication(ThisWorkbook.Application) If xlInput.OpenDocument(sFile, bReadOnly:=True) Is Nothing Then Call UserInteraction.ShowMessage(EM_FILE_CANNOT_OPEN, sFile) Exit Sub End If Call xlInput.PauseUI Dim iInput As New DB_Content: Call iInput.Init(xlInput.Document.Sheets(SHEET_CONTENT), xlInput.Document.Worksheets(SHEET_ATTRIBUTES)) Call ImportDataFromDB(iInput, AccessContent) Call xlInput.ResumeUI Call xlInput.ReleaseDocument Call UserInteraction.ShowMessage(IM_IMPORT_SUCCESS) End Sub Public Sub RunEditConfig() Call ThisWorkbook.Worksheets(SHEET_CONFIG).Activate End Sub Public Sub RunUpdateTasks() Dim iConfig As InfoConfig: Set iConfig = AccessConfig Call iConfig.SetScanTasks(True) Call iConfig.SetScanContent(False) Call ExecuteUpdateRequest(iConfig) End Sub Public Sub RunUpdateContent() Dim iConfig As InfoConfig: Set iConfig = AccessConfig Call iConfig.SetScanTasks(False) Call iConfig.SetScanContent(True) Call ExecuteUpdateRequest(iConfig) End Sub Public Sub RunUpdatePortal() Dim iConfig As InfoConfig: Set iConfig = AccessConfig Call iConfig.SetScanTasks(True) Call iConfig.SetScanContent(True) Call ExecuteUpdateRequest(iConfig) End Sub Public Sub RunClearData() Call ClearData Call UserInteraction.ShowMessage(IM_DATA_DELETED) End Sub Public Sub RunUnstuck() Dim uiWrap As New API_XLWrapper: Call uiWrap.SetDocument(ThisWorkbook) Call uiWrap.ResumeUI End Sub Public Sub RunInputMarks() Dim iTarget As Excel.Range: Set iTarget = Excel.Selection.Cells(1, 1) Call CSE_ListSelector.Init(ThisWorkbook.Worksheets(SHEET_OPTIONS).ListObjects(TABLE_MARKERS)) Call CSE_ListSelector.Show If CSE_ListSelector.isCanceled_ Then _ Exit Sub iTarget = CSE_ListSelector.GetSelectedStr Call Unload(CSE_ListSelector) End Sub Public Sub RunInputTags() Dim iTarget As Excel.Range: Set iTarget = Excel.Selection.Cells(1, 1) Call CSE_ListSelector.Init(ThisWorkbook.Worksheets(SHEET_OPTIONS).ListObjects(TABLE_TAGS)) Call CSE_ListSelector.Show If CSE_ListSelector.isCanceled_ Then _ Exit Sub iTarget = CSE_ListSelector.GetSelectedStr Call Unload(CSE_ListSelector) End Sub ' ======= Private Function ProcessCSV(sFile$) As Boolean ProcessCSV = False Dim dataIn As Excel.Worksheet: Set dataIn = ThisWorkbook.Worksheets.Add With dataIn.QueryTables.Add(Connection:="TEXT;" & sFile, Destination:=dataIn.Cells(1, 1)) .TextFileParseType = xlDelimited .TextFileCommaDelimiter = True .TextFilePlatform = 65001 ' UTF-8 .Refresh End With Dim sID$: sID = dataIn.Cells(1, 1) If sID <> "" Then If VBA.Left(sID, 1) Like "[0-9a-f]" Then Dim iContent As New IteratorCSVContent: Call iContent.Init(dataIn) Call ImportContentFromCSV(iContent, AccessContent) Else Dim iTasks As New IteratorCSVTasks: Call iTasks.Init(dataIn, AccessWorkers) Call ImportTasksFromCSV(iTasks, AccessContent) End If End If Dim bAlerts As Boolean: bAlerts = Excel.Application.DisplayAlerts Excel.Application.DisplayAlerts = False Call dataIn.QueryTables(1).Delete Call dataIn.Delete Excel.Application.DisplayAlerts = bAlerts ProcessCSV = True End Function Private Function ExecuteUpdateRequest(iConfig As InfoConfig) Call iConfig.CreateConfigFile Dim bScanPortal As Boolean: bScanPortal = PortalUpdate(iConfig) ' Call iConfig.DeleteConfigFile If Not bScanPortal Then _ Exit Function Dim bProcessTasks As Boolean: bProcessTasks = True If iConfig.ScanTasks Then Dim sFile$: sFile = iConfig.OutputFileTasks bProcessTasks = ProcessCSV(sFile) ' Call Kill(sFile) End If Dim bProcessContent As Boolean: bProcessContent = True If iConfig.ScanContent Then sFile = iConfig.OutputFileContent bProcessContent = ProcessCSV(sFile) ' Call Kill(sFile) End If If bProcessTasks And bProcessContent Then _ Call UserInteraction.ShowMessage(IM_IMPORT_SUCCESS) End Function