Сегодняшний пост – сборник полезных макросов для работы с QlikView (на основе этого текста с QlikCommunity). В коллекции набралось 33 макроса. Подборка будет очень полезна новичкам, но и более опытные пользователи могут найти для себя что-то интересное – например, как выгрузить несколько объектов QlikView в презентацию MS PowerPoint.
Тридцать три макроса,
Тридцать три макроса,
Тридцать три макроса,
Новая строка!
Итак, стартуем! 🙂
1) Запуск внешней программы:
1 |
FUNCTION RunExe(cmd) CreateObject("WScript.Shell").Exec(cmd) END FUNCTION SUB CallExample RunExe("c:\Program Files\Internet Explorer\iexplore.exe") END SUB |
2) Экспорт объекта в Excel
1 |
FUNCTION ExcelExport(objID) set obj = ActiveDocument.GetSheetObject( objID ) w = obj.GetColumnCount if obj.GetRowCount>1001 then h=1000 else h=obj.GetRowCount end if Set objExcel = CreateObject("Excel.Application") objExcel.Workbooks.Add objExcel.Worksheets(1).select() objExcel.Visible = True set CellMatrix = obj.GetCells2(0,0,w,h) column = 1 for cc=0 to w-1 objExcel.Cells(1,column).Value = CellMatrix(0)(cc).Text objExcel.Cells(1,column).EntireRow.Font.Bold = True column = column +1 next c = 1 r =2 for RowIter=1 to h-1 for ColIter=0 to w-1 objExcel.Cells(r,c).Value = CellMatrix(RowIter)(ColIter).Text c = c +1 next r = r+1 c = 1 next END FUNCTION SUB CallExample ExcelExport( "CH01" ) END SUB |
3) Экспорт объекта в JPG
1 |
FUNCTION ExportObjectToJpg( ObjID, fName) ActiveDocument.GetSheetObject(ObjID).ExportBitmapToFile fName END FUNCTION SUB CallExample ExportObjectToJpg "CH01", "C:\CH01Image.jpg" END SUB |
4) Сохранить и выйти из QlikView
1 |
SUB SaveAndQuit ActiveDocument.Save ActiveDocument.GetApplication.Quit END SUB |
5) Копировать группу измерений
1 |
SUB DuplicateGroups SourceGroup = InputBox("Enter Source Group Name") CopiesNo = InputBox("How many copies?") SourceGroupProperties = ActiveDocument.GetGroup(SourceGroup).GetProperties FOR i = 1 TO CopiesNo SET DestinationGroup = ActiveDocument.CreateGroup(SourceGroupProperties.Name & "_" & i) SET DestinationGroupProperties = DestinationGroup.GetProperties IF SourceGroupProperties.IsCyclic THEN DestinationGroupProperties.IsCyclic = true DestinationGroup.SetProperties DestinationGroupProperties ELSE SourceGroupProperties.IsCyclic = true DestinationGroupProperties.SetProperties SourceGroupProperties END IF SET Fields = SourceGroupProperties.FieldDefs FOR c = 0 TO Fields.Count-1 SET fld = Fields(c) DestinationGroup.AddField fld.name NEXT Application.waitforidle NEXT END SUB |
6) Открыть документ с выбранным текущим месяцем
1 |
SUB DocumentOpen ActiveDocument.Sheets("Intro").Activate ActiveDocument.ClearAll (true) ActiveDocument.Fields("YearMonth").Select ActiveDocument.Evaluate("Date(MonthStart(Today(), 0),'MMM-YYYY')") END SUB |
7) Прочитать и записать переменные
1 |
FUNCTION getVariable(varName) set v = ActiveDocument.Variables(varName) getVariable = v.GetContent.String END FUNCTION SUB setVariable(varName, varValue) set v = ActiveDocument.Variables(varName) v.SetContent varValue, true END SUB |
8) Открыть приложение QlikView, перезагрузить, нажать кнопку и выйти (введите код в .vbs файл)
1 |
Set MyApp = CreateObject("QlikTech.QlikView") Set MyDoc = MyApp.OpenDoc ("C:\QlikViewApps\Demo.qvw","","") Set ActiveDocument = MyDoc ActiveDocument.Reload Set Button1 = ActiveDocument.GetSheetObject("BU01") Button1.Press MyDoc.GetApplication.Quit Set MyDoc = Nothing Set MyApp = Nothing |
9) Удалить файл
1 |
FUNCTION DeleteFile(rFile) set oFile = createObject("Scripting.FileSystemObject") currentStatus = oFile.FileExists(rFile) if currentStatus = true then oFile.DeleteFile(rFile) end if set oFile = Nothing END FUNCTION SUB CallExample DeleteFile ("C:\MyFile.PDF") END SUB |
10) Получить информацию об отчетах
1 2 3 |
function countReports set ri = ActiveDocument.GetDocReportInfo countReports = ri.Count end function function getReportInfo set ri = ActiveDocument.GetDocReportInfo set r = ri.Item(i) getReportInfo = r.Id & "," & r.Name & "," & r.PageCount & CHR(10) end function |
11) Отправить письмо через Gmail (почтовый сервис Google)
1 |
SUB SendMail Dim objEmail Const cdoSendUsingPort = 2 ' Send the message using SMTP Const cdoBasicAuth = 1 ' Clear-text authentication Const cdoTimeout = 60 ' Timeout for SMTP in seconds mailServer = "smtp.gmail.com" SMTPport = 465 mailusername = "MyAccount@gmail.com" mailpassword = "MyPassword" mailto = "destination@company.com" mailSubject = "Subject line" mailBody = "This is the email body" Set objEmail = CreateObject("CDO.Message") Set objConf = objEmail.Configuration Set objFlds = objConf.Fields With objFlds .Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = cdoSendUsingPort .Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = mailServer .Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = SMTPport .Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True .Item("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = cdoTimeout .Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = cdoBasicAuth .Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = mailusername .Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = mailpassword .Update End With objEmail.To = mailto objEmail.From = mailusername objEmail.Subject = mailSubject objEmail.TextBody = mailBody objEmail.AddAttachment "C:\report.pdf" objEmail.Send Set objFlds = Nothing Set objConf = Nothing Set objEmail = Nothing END SUB |
12) Изменить настройки шрифта объекта
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
SUB Font() set obj = ActiveDocument.GetSheetObject("BU01") set fnt = obj.GetFrameDef.Font fnt.PointSize1000 = fnt.PointSize1000 + 1000 fnt.FontName = "Calibri" fnt.Bold = true fnt.Italic = true fnt.Underline = true obj.SetFont fnt END SUB |
12) Изменить настройки шрифта объекта
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
SUB Font() set obj = ActiveDocument.GetSheetObject("BU01") set fnt = obj.GetFrameDef.Font fnt.PointSize1000 = fnt.PointSize1000 + 1000 fnt.FontName = "Calibri" fnt.Bold = true fnt.Italic = true fnt.Underline = true obj.SetFont fnt END SUB |
13) Показать и скрыть вкладку строки
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
Sub ShowTab rem Hides tabrow in document properties set docprop = ActiveDocument.GetProperties docprop.ShowTabRow=true ActiveDocument.SetProperties docprop End Sub Sub HideTab rem Hides tabrow in document properties set docprop = ActiveDocument.GetProperties docprop.ShowTabRow=false ActiveDocument.SetProperties docprop End Sub |
14) Всегда одна выборка включена / Отключить настройки через макрос
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
Sub AlwaysOneSelected set obj = ActiveDocument.GetSheetObject("LB02") set boxfield=obj.GetField set fprop = boxfield.GetProperties fprop.OneAndOnlyOne = True boxfield.SetProperties fprop End Sub Sub RemoveAlwaysOneSelected set obj = ActiveDocument.GetSheetObject("LB02") set boxfield=obj.GetField set fprop = boxfield.GetProperties fprop.OneAndOnlyOne = False boxfield.SetProperties fprop ActiveDocument.ClearAll True End Sub |
15) Прочитать строки и столбцы в объекте Таблица
1 2 3 4 5 6 7 8 9 10 11 |
Sub ReadStraightTable Set Table = ActiveDocument.GetSheetObject( "CH01" ) For RowIter = 0 to table.GetRowCount-1 For ColIter = 0 to table.GetColumnCount-1 set cell = table.GetCell(RowIter,ColIter) Msgbox(cell.Text) Next Next End Sub |
16) Получить число строк в прямой или сводной таблицах
1 2 3 4 5 6 7 |
function ReadRowsCount set v = ActiveDocument.GetVariable("variableName") v.SetContent ActiveDocument.GetSheetObject( "CH01" ).GetRowCount-1, true end function |
17) Получить и установить значения переменных в макросах
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
function setVariable(name, value) set v = ActiveDocument.GetVariable("variableName") v.SetContent value,true end function function getVariable(name) set v = ActiveDocument.GetVariable("variableName") getVariable = v.GetContent.String end function |
18) Извлечь данные диаграммы в QVD-файл (диаграмма может быть в формате гистограммы, линейного графика, прямой таблицы, сводной таблицы и пр.)
1 2 3 4 5 6 7 |
sub ChartToQVD set obj = ActiveDocument.GetSheetObject("CH01") obj.ExportEx "QvdName.qvd", 4 end sub |
19) Экспортировать диаграммы как рисунки для каждого выбранного значения в листбоксе
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
FUNCTION ExportObjectToJpg( ObjID, fName) ActiveDocument.GetSheetObject(ObjID).ExportBitmapToFile fName END FUNCTION SUB ExportChartByListboxValues DIM fname, value, filePath, timestamp filePath = ActiveDocument.Variables("vPDFFlagPath").GetContent.STRING timestamp = Year(Now()) & DatePart("m", Now()) & DatePart("d", Now()) & DatePart("h", Now()) & DatePart("n", Now()) & DatePart("s", Now()) SET Doc = ActiveDocument fieldName = "EmployeeID" SET Field = Doc.Fields(fieldName).GetPossibleValues FOR index = 0 to Field.Count-1 Doc.Fields(fieldName).Clear Doc.Fields(fieldName).SELECT Field.Item(index).Text fileName = Field.Item(index).Text & "_" & timestamp & ".jpg"'Field.Item(index).Text & DateValue ExportObjectToJpg "CH420", filePath & fileName NEXT Doc.Fields(fieldName).Clear END SUB |
20) Проверить, существует ли указанная директория. Если не существует, создать данную директорию
1 2 3 4 5 6 7 8 9 10 11 |
Function CheckFolderExists(path) Set fileSystemObject = CreateObject("Scripting.FileSystemObject") If Not fileSystemObject.FolderExists(path) Then fileSystemObject.CreateFolder(path) End If End Function |
21) Уменьшить объект Диаграмма и переместить диаграмму на 20 пикселей вниз и на 15 вправо
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
Sub MoveChart set mybox = ActiveDocument.GetSheetObject("CH09") mybox.Minimize set fr = mybox.GetFrameDef pos = fr.MinimizedRect pos.Top = pos.Top + 20 pos.Left = pos.Left + 15 mybox.SetFrameDef fr end sub |
22) Переместить объект Диаграмма на 20 пикселей вниз и на 15 вправо
1 2 3 4 5 6 7 8 9 10 11 12 13 |
Sub MoveChart set obj = ActiveDocument.GetSheetObject("CH09") pos = obj.GetRect pos.Top = pos.Top + 20 pos.Left = pos.Left + 15 obj.SetRect pos End Sub |
23) Экспортировать несколько таблиц рядом на один лист Excel
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 |
Function ExportCharts() Set xlApp = CreateObject("Excel.Application") xlApp.Visible = true Set xlDoc = xlApp.Workbooks.Add 'open new workbook nSheetsCount = 0 CALL RemoveDefaultSheet(xlDoc) nSheetsCount = xlDoc.Sheets.Count xlDoc.Sheets(nSheetsCount).Select Set xlSheet = xlDoc.Sheets(nSheetsCount) CALL ExportRevenueWidgets(xlDoc,xlSheet) End Function 'Call Export Widgets By Sheet Function ExportRevenueWidgets(xlDoc,xlSheet) CALL Export(xlDoc,xlSheet,"CH09", "A") CALL Export(xlDoc,xlSheet,"CH09", "D") End Function 'Export Widgets Function Export(xlDoc, xlSheet,widgetID, columnStart) nRow = xlSheet.UsedRange.Rows.Count nRow = 1 Set SheetObj = ActiveDocument.GetSheetObject(widgetID) 'Copy the chart object to clipboard SheetObj.CopyTableToClipboard true 'Paste the chart object in Excel file xlSheet.Paste xlSheet.Range(columnStart&nRow) End Function 'Remove Default Sheets from Excel Files Sub RemoveDefaultSheet(xlDoc) Do nSheetsCount = xlDoc.Sheets.Count If nSheetsCount = 1 then Exit Do Else xlDoc.Sheets(nSheetsCount).Select xlDoc.ActiveSheet.Delete End If Loop End Sub |
24) Установить полоску прокрутки диаграммы на правую сторону (по умолчанию)
1 2 3 4 5 6 7 8 9 10 11 |
SUB StartScrollRight SET chartObject = ActiveDocument.GetSheetObject("CH01") SET chartProperties = chartObject.GetProperties chartProperties.ChartProperties.XScrollInitRight = true chartObject.SetProperties chartProperties END SUB |
25) Показать скрытое выражение в прямой или сводной таблице
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
Sub ShowHideExpression() SET chartObj = ActiveDocument.GetSheetObject("CH01") SET chartProp= chartObj.GetProperties SET expr = chartProp.Expressions.Item(1).Item(0).Data.ExpressionData expr.Enable = False // Hides First expression SET expr = chartProp.Expressions.Item(2).Item(0).Data.ExpressionData expr.Enable = True // Displays Second expression End Sub |
26) Сбросить значения InputField
1 2 3 4 5 6 7 8 9 |
Sub ResetInputField ' Reset the InputField set fld = ActiveDocument.Fields("InputFieldName") fld.ResetInputFieldValues 0, 0 ' 0 = All values reset, 1 = Reset Possible value, 2 = Reset single value End Sub |
27) Установить значения InputField
1 2 3 4 5 6 7 |
Sub SetInputField set fld = ActiveDocument.Fields("Budget") fld.SetInputFieldValue 0, "999" ' Sets InputField value to 999 End Sub |
28) Очистить определенные поля
1 2 3 4 5 6 7 8 9 10 11 12 13 |
SUB ClearFields SET Doc = ActiveDocument Doc.Fields(FieldName1).Clear Doc.Fields(FieldName2).Clear Doc.Fields(FieldName3).Clear Doc.Fields(DateFieldNameN).Clear END SUB |
29) Извлечь диаграмму в CSV
1 2 3 4 5 6 7 |
SUB ExportChartToCSV SET objChart = ActiveDocument.GetSheetObject("CH01") objChart.Export "C:\Data.CSV", ", " END SUB |
30) Подогнать под размер окна
1 2 3 4 5 6 7 |
Sub FitZoomToWindow ActiveDocument.GetApplication.WaitForIdle ActiveDocument.ActiveSheet.FItZoomToWindow End Sub |
31) Макрос, чтобы быстро изменить тип диаграммы в переменной
10 — Pivot Table
11 — Straight Table
12 — Bar
15 — Line
1 2 3 4 5 6 7 8 9 10 11 |
Sub GetChartType() set chart = ActiveDocument.getsheetobject("CH01") set p = chart.GetProperties set v = ActiveDocument.GetVariable("vFastChangeChartType") v.SetContent chart.GetObjectType,true end sub |
32) Открыть браузер Internet Explorer со ссылкой URL, на основе выбранного значения Измерения. Используйте такой макрос в свойствах документа в поле триггеров событий (Field Event Triggers)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
Создайте переменную: vSelectedURL : =Only([Image Location]) Sub Browse() set v = ActiveDocument.GetVariable("vSelectedURL") Set ie = CreateObject("Internetexplorer.Application") ie.Visible = True ie.Navigate v.GetContent.String End Sub |
33) Извлечь несколько диаграмм в презентацию Microsoft PowerPoint:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
Sub ExportPPT Set objPPT = CreateObject("PowerPoint.Application") objPPT.Visible = True Set objPresentation = objPPT.Presentations.Add Set PPSlide = objPresentation.Slides.Add(1,12) ActiveDocument.GetSheetObject("CH1").CopyBitmapToClipboard PPSlide.Shapes.Paste PPSlide.Shapes(PPSlide.Shapes.Count).Top = 150 'This sets the top location of the image PPSlide.Shapes(PPSlide.Shapes.Count).Left = 15 'This sets the left location PPSlide.Shapes(PPSlide.Shapes.Count).Width = 240 PPSlide.Shapes(PPSlide.Shapes.Count).Height = 250 Set PPSlide = objPresentation.Slides.Add(1,12) ActiveDocument.GetSheetObject("CH2").CopyBitmapToClipboard PPSlide.Shapes.Paste PPSlide.Shapes(PPSlide.Shapes.Count).Top = 150 'This sets the top location of the image PPSlide.Shapes(PPSlide.Shapes.Count).Left = 15 'This sets the left location PPSlide.Shapes(PPSlide.Shapes.Count).Width = 100 PPSlide.Shapes(PPSlide.Shapes.Count).Height = 200 Set PPSlide = Nothing Set PPPres = Nothing Set PPApp = Nothing End Sub |
Вот и все 33 полезных макроса для QlikView на сегодня.
Добавьте свои варианты полезных макросов в комментарии. Будет всем полезно!
Добрый день!Подскажите пожалуйста, пункт «11) Отправить письмо через Gmail (почтовый сервис Google)» я так понимаю,этот макрос работает,как рассылка адресатам на их почтовые ящики?Т.е. если я хочу в определенное время (например 0:00),чтобы у меня отправлялся отчет конкретным получателям,этот макрос я могу использовать?
Добрый день! Да, этот макрос можно использовать для рассылки по адресатам через ваш аккаунт Gmail. Для рассылки также можно использовать оповещения QlikView. Вот статья на эту тему здесь: http://blog.atkcg.ru/rassylka-dannyx-cherez-opoveshheniya-v-qlikview/
Надеюсь, вам это будет полезно.