none
Service -> PowerShell ->Excel(VBA)(XLSM) ->XLSX->TXT RRS feed

  • Вопрос

  • Коллеги, добрый день!

    Пишу сюда, т.к. нигде на просторах интернета не смог найти решение данной проблемы.

    У меня есть программное обеспечение, которое работает в виде службы. Эта служба запускает приложение, которое вызывает powershell. Затем Powershell заходит в процедуру макроса Excel (VBA) и запускает её. Макрос (VBA) сохраняет Excel (XLSX) документ в директорию а затем текстовый файл в другую директорию.

    Когда вручную запускаю PowerShell, то всё работает исправно и XLSX-книга по цепочке (PowerShell->XLSM(VBA)->XLSX->TXT) сохраняется исправно.

    Но если я пытаюсь данный механизм поставить на расписание, т.е. используя службу, то это не работает. 

    В серверной ос Windows Server 2012 R2 более строгие настройки безопасности?

    Пользователь, под которым запускаются службы ETL находится в группе - администраторы, к каталогу для записи файла имеет все права. В настройках Excel разрешил запуск всех небезопасных компонентов. 

    Пожалуйста помогите решить данную проблему. Или может подскажите, где посмотреть какой-то log по данной проблеме, что бы идентифицировать, почему Windows Server 2012 R2 не хочет сохранять xlsx-файл в каталог.

    На всякий случай прилагаю скрипты PowerShell и VBA (Excel).

    Скрипт PowerShell:

    #Set-ExecutionPolicy Unrestricted
    $excel = new-object -comobject excel.application
    
    $strFileName = "C:\Users\SavelevOM\Desktop\TestPS\TEST.xlsm"
    
    $excelFiles = Get-ChildItem -Path($strFileName)
    $app = $excel.Application
    $workbook = $app.workbooks.open($excelfiles)
    $app.Visible = $False
    $excel.displayalerts = $True
    $workbook.Activate()
    $app.Run("CreateTXT")
    
    #Start-Sleep 10
    
    # PowerShell Out-File -Append
    
    #$File ="C:\Users\SavelevOM\Desktop\TestPS\Process.txt"
    #Get-Date | Out-File $File
    #Get-Process | Out-File $File -Append
    
    $workbook.close()
    $excel.quit()

    Так же прилагаю скрипт макроса (VBA):

    Sub CreateTXT()

        ActiveWorkbook.Activate
        
        Sheets("Лист1").Cells(1, 1) = 10
        Sheets("Лист1").Cells(2, 2) = 20
        Sheets("Лист1").Cells(3, 3) = 30
        Sheets("Лист1").Cells(4, 4) = 40
        Sheets("Лист1").Cells(5, 5) = 50
        
        strFile_Path = "C:\Users\SavelevOM\Desktop\TestPS\Check.txt"
        
        Open strFile_Path For Output As #1
        Print #1, "CheckMask"
        Close #1
        
        SaveData CStr("Лист1"), CStr("C:\Users\SavelevOM\Desktop\TestPS\")
        
       ' Application.Quit 'выход из приложения.

    End Sub


    Sub SaveData(List As String, vMRDataTier1Out As String)

        FPath = "C:\Users\SavelevOM\Desktop\TestPS\"

        FName = "EXCEL.xlsx"

        Sheets(List).Copy

        aFile = FPath & FName

        If Dir(FPath & FName) <> "" Then

            'Перезапись файла

            If Len(Dir$(aFile)) > 0 Then
                Kill aFile
            End If

            ActiveWorkbook.SaveAs Filename:=aFile

        Else

            'Запись файла

            ActiveWorkbook.SaveAs Filename:=aFile

        End If

        ActiveWorkbook.Close (False)

        'Удалить старую вкладку

        ThisWorkbook.Activate

        ThisWorkbook.Close (False)

    End Sub

    _______________________________________________________________________________________

    В макросе описаны элементарные шаги по сохранению XLSX и TXT файлов, т.к. смоделировал данную ситуацию. На самом деле "боевой макрос" выполняет очень очень сложные расчёты используя данный механизм.

    Почему-то сбой происходит на этапе сохранения листа XLSX в отдельную книгу. Текстовый файл сохраняется исправно. Была бы возможность посмотреть какой-то LOG, но не знаю где его найти и есть ли он :( 

    Подскажите пожалуйста как решить данную проблему. Может какие-нибудь советы, соображения по этому поводу?

    Заранее спасибо.



    • Изменено savelyev.oleg 24 февраля 2016 г. 14:10
    24 февраля 2016 г. 13:30