Skip to main content
Announcements
Qlik Connect 2024! Seize endless possibilities! LEARN MORE
cancel
Showing results for 
Search instead for 
Did you mean: 
snumric7
Contributor III
Contributor III

Не работает макрос через портал

Здравствуйте. Не работает макрос на портале ver 2017 sr7, локально на сервере или рабочем ПК работает.

В диспетчере задач видно как открылся процесс Excel (на сервере установлен 2016 x64)

в лог записалась строчка о Старт дата время и все, процесс  Excel в диспетчере висит и ничего не происходит.

Как понять, чего не хватает?

sub Export
dim fso, MyFile, strFile, strText
  set obj = ActiveDocument.GetSheetObject("CH05")
  set vMonths = ActiveDocument.Fields("Квартал").GetPossibleValues
  vPath = ActiveDocument.Variables("vReport").GetContent.String
 
' Создание каталога, при его отсутствии
  Set fileSystemObject = CreateObject("Scripting.FileSystemObject") 
  If Not fileSystemObject.FolderExists(vPath) Then 
       fileSystemObject.CreateFolder(vPath) 
  End If 

' Запись в лог, старта
  strFile=vPath & "\log_macro.txt"
  Set fso = CreateObject("Scripting.FileSystemObject")
    If fso.FileExists(strFile) Then
        Set MyFile = fso.OpenTextFile (strFile, 8, True)
    Else
        Set MyFile = fso.CreateTextFile(strFile)
        MyFile.WriteLine("""мой_файл""")
    End If
   strText= "Старт " & """" & Now() & ""
   MyFile.WriteLine(strText)

  set objExcel = CreateObject("Excel.Application")
  objExcel.Visible = false
  objExcel.DisplayAlerts = false
  set objWrkBk = objExcel.Workbooks.Add
  i = objWrkBk.Worksheets.Count
  Do Until i = 1
   objWrkBk.Worksheets(i).Delete
   i = i - 1
  Loop
  For i = 0 to vMonths.Count -1
  objWrkBk.Sheets.Add(, objWrkBk.Sheets(objWrkBk.Sheets.Count)).Name = vMonths(i).Text 
  ActiveDocument.Fields("Квартал").Select vMonths(i).Text
  Set ASheet = objExcel.Sheets(vMonths(i).Text)
ASheet.Range("A1").Select
obj.CopyTableToClipboard true
  ASheet.Paste

   strText= "кв " & vMonths(i).Text & " " & """" & Now() & ""
   MyFile.WriteLine(strText)

  Next
     For i = 0 to vMonths.Count -2
       ActiveDocument.Fields("Квартал").ToggleSelect  vMonths(i).Text
     Next
  objWrkBk.Sheets(1).Delete
  ASheet.SaveAs vPath & "\мой_файл.xlsx"
  objWrkBk.Close
  objExcel.Quit
strText= "Окончание " & """" & Now() & ""
MyFile.WriteLine(strText)
MyFile.Close
end sub 

10 Replies
andrey_krylov
Specialist
Specialist

Добрый день, Иван. Сталкивался с подобной проблемой и если не ошибаюсь, дело в Session 0 Isolation и во временном каталоге Офиса. Точно не помню, то ли менял на нем права, то ли просто создавал, если не найдешь решение могу вечером глянуть или погугли этот вопрос.

snumric7
Contributor III
Contributor III
Author

Пока не нашел, помогите пожалуйста

andrey_krylov
Specialist
Specialist

Попробуй создать папку

C:\Windows\SysWOW64\config\systemprofile\Desktop

и дай на всякий случай всем права на чтение и запись.

snumric7
Contributor III
Contributor III
Author

Где то читал про это, там еще про права на DCOM писалось и рекомендовалось переустановить офис.

Ваше предложение попробовал, не помогло

andrey_krylov
Specialist
Specialist

Понятно, может лог писать из макроса и отследить событие  на котором повисает, там проще будет докопаться до истины.

snumric7
Contributor III
Contributor III
Author

Я его пишу в макросе текст

   strText= "Старт " & """" & Now() & ""

   MyFile.WriteLine(strText)

В логе Старт и дата появляются, дальше в диспетчере задач на сервере появляется Excel на этом все.

Отступление.

1. Можно ли запускать макрос на портале без плагина?

2. Поставил плагин, макрос на портале работает, но выполняется на персональном ПК, это плохо на персоналке нет столько свободного ОЗУ, чтобы выгрузить в Excel. Это нормально, что с плагином выполнение происходит локально?

Мало того валится IE32 c ошибкой на виртуальную память, да и плагин x32

andrey_krylov
Specialist
Specialist

Привет. Прошу прощения, запись в лог и не заметил. По идее с плагином локально и должно работать.  Но не пойму куда именно хочешь выгружать. Если на сервер, то ServerSideExportEx для этих целей.

snumric7
Contributor III
Contributor III
Author

Что за зверь, вроде в сжатый xlsx не умеет?

ServerSideExportEx

' 0=HTML, 1=Text, 2=Bitmap, 3=XML, 4=QVD, 5=BIFF 

' BIFF is the old Excel format that has file extension XLS 


Нужно данные в несколько миллионов строк выгрузить в Excel, чтобы влезло на лист бьем на квартально. Т.к. ресурсы по памяти на пользовательских ПК ограниченные (процесс Excel при экспорте переваливает за 2Гб), нужно чтобы сервер сформировал у себя, по нажатию на кнопку макроса и положил на свой расшареный диск.

andrey_krylov
Specialist
Specialist

На сколько я понял этот вопрос решен с QlikView 12.20 (November 2017) and up

https://qliksupport.force.com/articles/Basic/Unable-To-Export-Large-Objects-To-Excel-After-Upgrading...

Тут вроде все описано, попробуй. Честно говоря у меня не было необходимости выгружать такой объем в excel.