IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Voir le flux RSS

PhunkyBob

Exports de tableaux QlikView sous Excel

Noter ce billet
par , 04/03/2016 à 13h59 (2283 Affichages)
Pour exporter facilement des tableaux dans un fichier Excel, j'ai créé ces fonctions, que j'ai mises dans le module de macros :

Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
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
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
' Variables utilisées par Excel.
Dim WorkBook
Dim ExcelApp
Dim RefSh
Dim CloseExcelWhenFinished
 
const xlExcel8 = 56				' Format d'enregistrement Excel.
const xlExcel12 = 50			' Format d'enregistrement Excel.
const xlOpenXMLWorkbook = 51	' Format d'enregistrement Excel.
 
 
'***************************************************************
' Cette méthode permet d'ouvrir Excel.
'***************************************************************
sub excel_open()
 
	' On essaye de prendre Excel s'il est déjà ouvert.
	CloseExcelWhenFinished = false
	On Error Resume Next
	Err.Number = 0
	' Si la ligne suivante provoque une erreur, c'est qu'il n'y a pas d'instance d'Excel ouverte.
	Set ExcelApp = GetObject(, "Excel.Application")
	If Err.Number <> 0 Then
		' Pas d'instance Excel, on en crée une.
		Set ExcelApp = CreateObject("Excel.Application")
		CloseExcelWhenFinished = true
		Err.Clear
	end if
	on error goto 0
 
 
	ExcelApp.Visible = True
	' On crée un workbook avec 1 seule feuille.
	ExcelApp.SheetsInNewWorkbook = 1
 
	Set WorkBook = ExcelApp.Workbooks.Add
	Set RefSh = WorkBook.Worksheets(1)	' La première feuille (qui sera de toutes manières supprimée) servira de référence
	RefSh.name = "a supprimer"
 
end sub
 
'***************************************************************
' Cette méthode permet de sauvegarder le fichier Excel.
'
' @param p_file_name : nom du fichier à enregistrer.
'***************************************************************
sub excel_save(p_file_name)
	On Error Resume Next
 
	Dim oFSO
	Set oFSO = CreateObject("Scripting.FileSystemObject")
 
	refSh.delete
	WorkBook.Worksheets(1).activate
 
	Err.Number = 0 
	CheminSauv = oFSO.GetAbsolutePathName(p_file_name)
 
 
	ExcelApp.DisplayAlerts = False
	WorkBook.SaveAs CheminSauv, xlOpenXMLWorkbook
 
	ExcelApp.DisplayAlerts = True
	WorkBook.Saved = true
 
	NewNameCounter = 0
	NewName = ""
 
	On Error Goto 0
	WorkBook.close
 
end sub
 
'***************************************************************
' Cette méthode permet d'envoyer un graphique dans Excel, comme
' si on avait utilisé la fonction "envoyer vers Excel".
'
' @param p_GraphID : l'identifiant du graphique à exporter.
' @param p_SheetName : la feuille sur laquelle on veut mettre le tableau.
'***************************************************************
sub excel_export_chart(p_GraphID, p_SheetName)
	Set obj = ActiveDocument.GetSheetObject(p_GraphID)
 
	On Error Resume Next
	Err.Number = 0	
 
	obj.sendtoexcel
 
	on error goto 0
 
	Set tmpWorkbook = ExcelApp.ActiveWorkbook
 
	tmpWorkbook.ActiveSheet.name = p_SheetName 	
 
	On Error Resume Next
	Err.Number = 0	
 
	' on recopie la feuille contenant les données dans le classeur créé en premier lieu
	tmpWorkbook.ActiveSheet.copy RefSh	
		If Err.Number <> 0 Then
		Err.Clear
	end if
		on error goto 0
	If ExcelKeepColors = true Then
		' Conservation de la mise en forme.
		WorkBook.Colors = tmpWorkbook.Colors
	End If
 
	' puis on ferme le classeur qui contenait les données exportées
	tmpWorkbook.close false
 
Set obj = Nothing
end sub
 
 
'***************************************************************
' Cette méthode permet d'ajuster la taille de toutes les colonnes.
'***************************************************************
sub excel_autofit()
	' On met au propre toutes les colonnes.
	for i = 1 to WorkBook.Worksheets.count
		WorkBook.Worksheets(i).Columns.Autofit()
	next 
end sub

Sans oublier d'autoriser les accès système.


Ensuite, il suffit de créer une sub qui dit quels charts sont à exporter :

Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
sub export_chart()
	call excel_open
 
	call excel_export_chart("CH01", "onglet 1")
	call excel_export_chart("CH02", "onglet 2")
 
	call excel_autofit
 
	call excel_save("c:\temp\toto.xlsx")
end sub

L'appel de cette macro générera automatiquement un fichier Excel qui contiendra autant d'onglets que souhaité.



Il est aussi possible de créer un script VBS externe qui ouvrira un QlikView et qui fera les exports souhaités :

Code VB : Sélectionner tout - Visualiser dans une fenêtre à part
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
const xlOpenXMLWorkbook = 51	' Format d'enregistrement Excel.
 
' Ouverture du document QV.
Set myApp = CreateObject("QlikTech.QlikView")
Set myDoc = myApp.OpenDoc("C:\Program Files\QlikView\Examples\Documents\Executive Dashboard.qvw")
Set ActiveDocument = myDoc
 
Set ExcelApp = CreateObject("Excel.Application")
ExcelApp.Visible = True
ExcelApp.SheetsInNewWorkbook = 1
 
Set WorkBook = ExcelApp.Workbooks.Add
Set RefSh = WorkBook.Worksheets(1)
RefSh.name = "vide"		' Une feuille vide, qu'on supprimera à la fin
 
 
 
' ClearAll
ActiveDocument.ClearAll
 
for i = 2009 to 2011
	' Selection de l'année.
	Set MyField = ActiveDocument.Fields("[Fiscal Year]")
	MyField.Select i
 
	' Export du chart CH54 dans une onglet.
	Set obj = ActiveDocument.GetSheetObject("CH54")
	obj.sendtoexcel
	Set tmpWorkbook = ExcelApp.ActiveWorkbook
	tmpWorkbook.ActiveSheet.name = "Export " & i
	tmpWorkbook.ActiveSheet.copy RefSh	
	tmpWorkbook.close false
 
	' Export du chart sous forme d'image au niveau de la ligne 1, colonne 5.
	Set obj = ActiveDocument.GetSheetObject("CH54")
	Set currentSheet = obj.GetSheet
	currentSheet.Activate
 
	obj.CopyBitmapToClipboard
 
	Workbook.Worksheets("Export " & i).Cells(1, 5).Select
	Workbook.Worksheets("Export " & i).Paste
next 
 
 
 
' Suppression de la feuille vide.
refSh.delete
WorkBook.Worksheets(1).activate
 
ExcelApp.DisplayAlerts = False
WorkBook.SaveAs "c:\temp\export.xlsx", xlOpenXMLWorkbook
 
ExcelApp.DisplayAlerts = True
WorkBook.Saved = True
 
'On ferme le doc Excel.
WorkBook.close
 
' On ferme Excel.
ExcelApp.quit
 
' On ferme QV.
myApp.Quit

Envoyer le billet « Exports de tableaux QlikView sous Excel » dans le blog Viadeo Envoyer le billet « Exports de tableaux QlikView sous Excel » dans le blog Twitter Envoyer le billet « Exports de tableaux QlikView sous Excel » dans le blog Google Envoyer le billet « Exports de tableaux QlikView sous Excel » dans le blog Facebook Envoyer le billet « Exports de tableaux QlikView sous Excel » dans le blog Digg Envoyer le billet « Exports de tableaux QlikView sous Excel » dans le blog Delicious Envoyer le billet « Exports de tableaux QlikView sous Excel » dans le blog MySpace Envoyer le billet « Exports de tableaux QlikView sous Excel » dans le blog Yahoo

Mis à jour 21/11/2016 à 17h17 par PhunkyBob

Tags: qlikview
Catégories
Programmation

Commentaires