Выгрузка на разные листы Excel

classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

Выгрузка на разные листы Excel

Mikhail Timoshin
Administrator
Наверное тебе помогут макросы. На сколько помню, там можно оперировать кодами объектов (таблиц QV). Помниться было готовое решение у какого-то немца.

Попробуй начать от сюда:
http://www.qlikblog.at/971/qliktip-32-exporting-multiple-objects-single-excel-document/
 
Только имей в виду, что на простой выгрузке всегда получишь только простую (не сводную) таблицу.
 
nick1111 wrote
Как сделать пакетную выгрузку из Клика? Т.е. есть таблица по подразделениям - нужно выгрузить в эксель по каждому подразделению в отдельный лист автоматически.
 
Другая задача - как выгрузить несколько таблиц в Клике в таком же виде в один лист эксель, в определенном порядке? Т.е., например, факт, бюджет, сравнение - три сводные таблицы в Клике выгрузить на один лист эксель?
Reply | Threaded
Open this post in threaded view
|

Re: Выгрузка на разные листы Excel

nick1111
Добавлю.

Пример макроса для выгрузки нескольких таблиц в Excel. Фильтр применяется в цикле для всех выбранных значений поля Dim1 и создается отдельный файл Excel с таблицами для каждого значения.

Автор макроса - не я.

В редакторе макросов необходимо слева выставить системный доступ в 2х полях настройки безопасности.

Макрос будет работать только в толстом клиенте или в IE с установленным QlikView IE plugin.

Так же, например:
http://community.qlikview.com/message/38479#38479


sub Export2 '3 диаграммы в каждый xls для каждого значения измерения Dim1

set f = activedocument.Fields("Dim1")

if IsEmpty(f.GetSelectedValues) then
set pv = f.GetSelectedValues 'adds selected values if any
else
set pv = f.GetPossibleValues(1000) 'adds possible values if none selected
end if

set Array1 = f.GetNoValues 'empty array
for i = 0 to pv.count-1 'adds values from the first array
Array1.Add
Array1(i).Text = pv.item(i).Text
Array1(i).IsNumeric = false 'if text in your field
next

'Creates a path and a filename of the output xls-file in the same folder as the current document
Path = ActiveDocument.Evaluate("left(DocumentPath(), index(DocumentPath(), '\', -1))")
'Path = "C:\" 'your static path if you dont want a dynamic path
'set obj = ActiveDocument.GetSheetObject("CH01") 'the ID of the object you want to export

'Loop through each selection in your field
for i = 0 to Array1.count-1
f.Select Array1(i).Text 'Selects one value in your field at a time

'Sets the FileName to be the same as the selection in your chosen field

FileName =Replace( Replace(Array1(i).Text," ","_"),"""","_") & ".xlsx"

' Starts Excel
set XLApp = CreateObject("Excel.Application")
' Makes it run in background
XLApp.Visible = False
set XLDoc = XLApp.Workbooks.Add

' Set the cell to start in at A1
Set rngStart = XLDoc.WorkSheets(1)  '.Range("A1")
'   Set curSheet = curWorkBook.WorkSheets(1)
'loop

chartArray = Array("CH01","CH02", "CH03")

usedRows=0

    rngStart.Cells(usedRows+1, 1)= Array1(i).Text
    usedRows=2
   
For Each chart In chartArray

   Set obj = ActiveDocument.GetSheetObject(chart)

    chartCaption = obj.GetCaption.Name.v



    rngStart.Cells(usedRows+1, 1)=chartCaption

     obj.CopyTableToClipboard true

     rngStart.Cells(usedRows+3, 1).Select

     rngStart.Paste

     usedRows=rngStart.UsedRange.Rows.Count+3
     '--->function to get the first unused row


Next

'loop end
'' Copies the chosen object contents to clipboard
'obj.CopyTableToClipboard true
'' Paste it into excel
'XLDoc.Sheets(1).Paste()


' Save the excel-file with the dynamic path and filename
XLDoc.SaveAs Path & FileName
' Closes the active document
XLDoc.Close
' Close the instanced object references of excel
set rngStart = nothing
set XLDoc = nothing
' Exits the current running Excel
XLApp.Quit
' Closing final object reference
set XLApp = nothing
next
end sub