Created
June 18, 2014 09:21
-
-
Save anonymous/c6b2b4c7f9673c60108c to your computer and use it in GitHub Desktop.
qlikview marco export EXCEL
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sub ExcelPrint | |
Call exportToExcel_ALL() | |
End Sub | |
Public Function exportToExcel_ALL() | |
Dim aryExport(14,3) | |
aryExport(0,0) = "CH57" | |
aryExport(0,1) = "直营业绩周报表" | |
aryExport(0,2) = "A1" | |
aryExport(0,3) = "data" | |
aryExport(1,0) = "CH59" | |
aryExport(1,1) = "直营业绩周报表" | |
aryExport(1,2) = "A11" | |
aryExport(1,3) = "data" | |
aryExport(2,0) = "CH60" | |
aryExport(2,1) = "直营业绩周报表" | |
aryExport(2,2) = "A21" | |
aryExport(2,3) = "data" | |
aryExport(3,0) = "CH69" | |
aryExport(3,1) = "直营业绩周报表" | |
aryExport(3,2) = "A31" | |
aryExport(3,3) = "image" | |
aryExport(4,0) = "CH61" | |
aryExport(4,1) = "直营业绩周报表" | |
aryExport(4,2) = "A46" | |
aryExport(4,3) = "data" | |
aryExport(5,0) = "CH86" | |
aryExport(5,1) = "直营业绩周报表" | |
aryExport(5,2) = "A250" | |
aryExport(5,3) = "data" | |
aryExport(6,0) = "CH84" | |
aryExport(6,1) = "直营营运周报" | |
aryExport(6,2) = "A1" | |
aryExport(6,3) = "data" | |
aryExport(7,0) = "CH82" | |
aryExport(7,1) = "直营营运周报" | |
aryExport(7,2) = "A11" | |
aryExport(7,3) = "data" | |
aryExport(8,0) = "CH81" | |
aryExport(8,1) = "直营营运周报" | |
aryExport(8,2) = "A21" | |
aryExport(8,3) = "data" | |
aryExport(9,0) = "CH85" | |
aryExport(9,1) = "直营营运周报" | |
aryExport(9,2) = "A31" | |
aryExport(9,3) = "data" | |
aryExport(10,0) = "CH71" | |
aryExport(10,1) = "店铺业绩报表" | |
aryExport(10,2) = "A1" | |
aryExport(10,3) = "data" | |
aryExport(11,0) = "CH73" | |
aryExport(11,1) = "店铺业绩报表" | |
aryExport(11,2) = "A201" | |
aryExport(11,3) = "data" | |
aryExport(12,0) = "CH74" | |
aryExport(12,1) = "店铺业绩报表" | |
aryExport(12,2) = "A401" | |
aryExport(12,3) = "data" | |
aryExport(13,0) = "CH75" | |
aryExport(13,1) = "店铺业绩报表" | |
aryExport(13,2) = "A601" | |
aryExport(13,3) = "data" | |
aryExport(14,0) = "CH76" | |
aryExport(14,1) = "店铺业绩报表" | |
aryExport(14,2) = "A801" | |
aryExport(14,3) = "data" | |
Dim objExcelWorkbook 'as Excel.Workbook | |
Set objExcelWorkbook = copyObjectsToExcelSheet(ActiveDocument, aryExport) | |
'// Now either just leave Excel open or do some other stuff here | |
'// like saving the excel, some formatting stuff, ... | |
msgbox "导出完成!" | |
End Function | |
'// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | |
'// YOU DO NOT NEED TO CHANGE THE CODE BELOW !!!!!!!!!!!!!!!!!!!!!!! | |
'// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! | |
'// **************************************************************** | |
'// copyObjectsToExcel | |
'// ~~ | |
'// Parameters: | |
'// qvDoc - Reference to the QlikView document (normally just use | |
'// "ActiveDocument", but you can also use copyObjectsToExcel | |
'// outside of QlikView ... | |
'// aryExportDefinition - array of settings | |
'// ~~ | |
'// Version 1.02 | |
'// ~~ | |
'// The aryExportDefinition is used to pass the following properties to | |
'// copyObjectsToExcelSheet: | |
'// | |
'// Index Description | |
'// ------------------------ | |
'// 0 - Id of the QlikView object to copy from | |
'// 1 - Name of the sheet (in Excel) where the object should be copied to | |
'// | |
'// (If a sheet with the same name already exists no new | |
'// sheet will be created, instead the existing sheet will | |
'// be used for pasting the object) | |
'// | |
'// Note: the sheetName can be max 31 characters long | |
'// | |
'// 2 - Range in Excel where the object should be pasted to | |
'// 3 - PasteMode ["data", "image"] | |
'// Defines if the objects underlaying data should be | |
'// pasted ("data") or the the image representing the object | |
'// should be used | |
'// **************************************************************** | |
Private Function copyObjectsToExcelSheet(qvDoc, aryExportDefinition) 'as Excel.Workbook | |
Dim i 'as Integer | |
Dim objExcelApp 'as Excel.Application | |
Dim objExcelDoc 'as Excel.Workbook | |
Set objExcelApp = CreateObject("Excel.Application") | |
objExcelApp.Visible = true 'false if you want to hide Excel | |
objExcelApp.DisplayAlerts = false | |
Set objExcelDoc = objExcelApp.Workbooks.Add | |
Dim strSourceObject | |
Dim qvObjectId 'as String | |
Dim sheetName | |
Dim sheetRange | |
Dim pasteMode | |
Dim objSource | |
Dim objCurrentSheet | |
Dim objExcelSheet | |
for i = 0 to UBOUND(aryExportDefinition) | |
'// Get the properties of the exportDefinition array | |
qvObjectId = aryExportDefinition(i,0) | |
sheetName = aryExportDefinition(i,1) | |
sheetRange = aryExportDefinition(i,2) | |
pasteMode = aryExportDefinition(i,3) | |
Set objExcelSheet = Excel_GetSheetByName(objExcelDoc, sheetName) | |
if (objExcelSheet is nothing) then | |
Set objExcelSheet = Excel_AddSheet(objExcelApp, sheetName) | |
if (objExcelSheet is nothing) then | |
msgbox("No sheet could be created, this should not occur!!!") | |
end if | |
end if | |
objExcelSheet.Select | |
set objSource = qvDoc.GetSheetObject(qvObjectId) | |
Call objSource.GetSheet().Activate() | |
'objSource.Maximize | |
qvDoc.GetApplication.WaitForIdle | |
if (not objSource is nothing) then | |
if (pasteMode = "image") then | |
Call objSource.CopyBitmapToClipboard() | |
else | |
Call objSource.CopyTableToClipboard(true) '// default & fallback | |
end if | |
Set objCurrentSheet = objExcelDoc.Sheets(sheetName) | |
objExcelDoc.Sheets(sheetName).Range(sheetRange).Select | |
objExcelDoc.Sheets(sheetName).Paste | |
if (pasteMode <> "image") then | |
With objExcelApp.Selection | |
.WrapText = False | |
.ShrinkToFit = False | |
End With | |
end if | |
objCurrentSheet.Range("A1").Select | |
end if | |
next | |
Call Excel_DeleteBlankSheets(objExcelDoc) | |
'// Finally select the first sheet | |
objExcelDoc.Sheets(1).Select | |
'// Return value | |
Set copyObjectsToExcelSheet = objExcelDoc | |
end function | |
'// ________________________________________________________________ | |
'// **************************************************************** | |
'// Internal function for getting the Excel sheet by sheetName | |
'// **************************************************************** | |
Private Function Excel_GetSheetByName(ByRef objExcelDoc, sheetName) 'as Excel.Sheet | |
For Each ws In objExcelDoc.Worksheets | |
If (trim(ws.Name) = Excel_GetSafeSheetName(sheetName)) then | |
Set Excel_GetSheetByName = ws | |
exit function | |
End If | |
Next | |
'// default return value | |
Set Excel_GetSheetByName = nothing | |
End Function | |
'// ________________________________________________________________ | |
Private Function Excel_GetSafeSheetName(sheetName) | |
'// can be max 31 characters long | |
retVal = trim(left(sheetName, 31)) | |
Excel_GetSafeSheetName = retVal | |
End Function | |
'// **************************************************************** | |
'// Internal function for adding a new sheet | |
'// **************************************************************** | |
Private Function Excel_AddSheet(objExcelApplication, sheetName) ' as Excel.Sheet | |
'// add a sheet to the last position | |
objExcelApplication.Sheets.Add , objExcelApplication.Sheets(objExcelApplication.Sheets.Count) | |
Dim objNewSheet | |
Set objNewSheet = objExcelApplication.Sheets(objExcelApplication.Sheets.Count) | |
objNewSheet.Name = left(sheetName,31) | |
'// return the newly created sheet | |
Set Excel_AddSheet = objNewSheet | |
End function | |
'// ________________________________________________________________ | |
'// **************************************************************** | |
'// Delete all empty sheets | |
'// **************************************************************** | |
Private Sub Excel_DeleteBlankSheets(ByRef objExcelDoc) | |
For Each ws In objExcelDoc.Worksheets | |
If (not HasOtherObjects(ws)) then | |
If objExcelDoc.Application.WorksheetFunction.CountA(ws.Cells) = 0 Then | |
On Error Resume Next | |
Call ws.Delete() | |
End If | |
End If | |
Next | |
End Sub | |
'// ________________________________________________________________ | |
'// **************************************************************** | |
'// Helper function to determine if there are other objects placed | |
'// on the sheet ... | |
'// **************************************************************** | |
Public Function HasOtherObjects(ByRef objSheet) 'As Boolean | |
Dim c | |
If (objSheet.ChartObjects.Count > 0) Then | |
HasOtherObjects = true | |
Exit function | |
End If | |
If (objSheet.Pictures.Count > 0) Then | |
HasOtherObjects = true | |
Exit function | |
End If | |
If (objSheet.Shapes.Count > 0) Then | |
HasOtherObjects = true | |
Exit function | |
End If | |
HasOtherObjects = false | |
End Function | |
'//__________________________________________________________________ | |
Public Function AssociateField(SelectField,DateField,npa) | |
dim i,Count,osf,Orf,sSelectValues,fv | |
Set oSf = ActiveDocument.Fields(SelectField) | |
sSelectValues = LoadSelect(SelectField,npa) | |
Set oRf=ActiveDocument.Fields(DateField) | |
Set fv=orf.GetNoValues | |
fv.Add | |
fv(0).text=cstr(year(now)*100+month(now)) | |
fv(0).IsNumeric=false | |
orf.SelectValues fv'设定年月为当前天所在月 | |
For i = 0 To Ubound(sSelectValues) - 1 | |
Set fv=osf.GetNoValues | |
orf.SelectValues fv | |
fv.Add | |
fv(0).text=sSelectValues(i) | |
fv(0).IsNumeric=false | |
osf.SelectValues fv'设定为一家经销商 | |
Call exportToExcel_ALL(sSelectValues(i),year(now)*100+month(now)) | |
Next | |
End Function | |
Function LoadSelect(fieldname,npa) | |
Dim Fields, i 'The Active Stage that is selected | |
Dim ActiveStage() 'a Array store the list of Active stage that is selected | |
Select Case nPa | |
case 0 | |
Set Fields = ActiveDocument.Fields(fieldname).GetSelectedValues | |
case 1 | |
Set Fields = ActiveDocument.Fields(fieldname).GetDeselectedValues | |
'msgbox fields.count | |
case 2 | |
'msgbox fields.count | |
Set Fields = ActiveDocument.Fields(fieldname).GetOptionalValues | |
case 3 | |
'msgbox fields.count | |
Set Fields = ActiveDocument.Fields(fieldname).GetExcludedValues | |
case 4 | |
'msgbox fields.count | |
Set Fields = ActiveDocument.Fields(fieldname).GetpossibleValues | |
Case else | |
'LoadSelect =Null :exit function | |
End Select | |
'msgbox fields.count | |
ReDim ActiveStage(Fields.Count) | |
For i = 0 To Fields.Count - 1 | |
If (Len(Fields.Item(i).Text) > 0) Then | |
ActiveStage(i) = Fields.Item(i).Text | |
'msgbox ActiveStage(i) | |
End If | |
Next | |
LoadSelect = ActiveStage '选中字段值数组作为函数值返回给主调函数 | |
End Function |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment