CftClub.ru
Клуб специалистов ЦФТ-Банк

Диаграммы в Excel

 
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Уроки ЦФТ-Банк для начинающих
Предыдущая тема :: Следующая тема  
Автор Сообщение
Матвеев Евгений
Профи


Вступление в Клуб: 31.01.2012
СообщениеПн Ноя 09, 2015 20:44   Диаграммы в Excel Ответить с цитатой
Полезность: Нет оценки
Доброго времени суток, коллеги
Кто нибудь делал отчеты в Excel с построением графических диаграмм на рассчитанном массиве данных? По возможности используя механизмы OOXML...
В какую сторону вести раскопки? Или пример из ЦФТшных операций какой есть? Короткое имя please...
По форумам ничего такого не нашел(((
Alkov
Профи


Вступление в Клуб: 23.09.2010
СообщениеВт Ноя 10, 2015 02:47    Ответить с цитатой
Полезность: 1
Ну записать макрос над данными,как вариант сохранить его в шаблон , а потом его выполнять ?
Матвеев Евгений
Профи


Вступление в Клуб: 31.01.2012
СообщениеВт Ноя 10, 2015 10:18    Ответить с цитатой
Полезность: Нет оценки
Alkov пишет:
Ну записать макрос над данными,как вариант сохранить его в шаблон , а потом его выполнять ?


Есть пример под рукой?
rsln
Участник


Вступление в Клуб: 02.11.2015
СообщениеЧт Ноя 12, 2015 15:55    Ответить с цитатой
Полезность: 1
с использованием OOXML вряд ли получится.
а так через макрос который после создания выполнить. Через excel.cmd
Матвеев Евгений
Профи


Вступление в Клуб: 31.01.2012
СообщениеЧт Ноя 12, 2015 15:59    Ответить с цитатой
Полезность: Нет оценки
rsln пишет:
с использованием OOXML вряд ли получится.
а так через макрос который после создания выполнить. Через excel.cmd


Ага, вчера не получилось (в виду невозможности сохранения макросов в Excel документах, пробовал в 3 форматах xltx - можно было не пробовать, формат не поддерживает макросы, xlsx и xltm так же не сохранили макрос)
Правда нет уверенности что ограничение налагается именно OOXML, может это политика безопасности ОС... хотя везде макросы разрешил...непонятно кто блокирует

Сегодня решил через клиент скрипт попробовать, должно получится...
потом, если что, можно через excel.cmd попробовать...

...напишу по результатам...
Alkov
Профи


Вступление в Клуб: 23.09.2010
СообщениеПт Ноя 13, 2015 02:45    Ответить с цитатой
Полезность: Нет оценки
Матвеев Евгений пишет:
Alkov пишет:
Ну записать макрос над данными,как вариант сохранить его в шаблон , а потом его выполнять ?


Есть пример под рукой?


Поищу, помню на одной странице выводили данные в табличку ,
а на второй уже в шаблоне был настроена диаграмма по этой табличке.
Матвеев Евгений
Профи


Вступление в Клуб: 31.01.2012
СообщениеПт Ноя 13, 2015 11:59    Ответить с цитатой
Полезность: Нет оценки
Alkov пишет:
Матвеев Евгений пишет:
Alkov пишет:
Ну записать макрос над данными,как вариант сохранить его в шаблон , а потом его выполнять ?


Есть пример под рукой?


Поищу, помню на одной странице выводили данные в табличку ,
а на второй уже в шаблоне был настроена диаграмма по этой табличке.


Да вроде сделал уже, получилось как то так:


procedure operate_data( type_period integer, date_beg date, date_end date) is
cur_single_date date;
cur_tarif ref [TARIFFS_COMMISS];
str_with_tariffs varchar2(32000) := '';
summa_on_tarif [SUMMA] := 0;
full_tariff_list varchar2(32000) := '';
row_counter number := 3;
tarif_counter number := 2;

type TItogo is table of [SUMMA];
itogo TItogo;
begin
if type_period = 1 then
EXCEL.WRITE(1, 1, 'Ежедневный отчет по тарифам с '||to_char(date_beg,'dd.mm.yyyy')||'г. по '||to_char(date_end,'dd.mm.yyyy')||'г.');
-- группировка по единице периода
for sl in 0..trunc(date_end-date_beg) loop
-- текущий показатель единицы периода
cur_single_date := trunc(date_beg + sl);
str_with_tariffs := '';
tarif_counter := 2;
-- верхняя группировка по тарифам
for sl2 in P_GRID.first .. P_GRID.last where P_GRID(sl2).[SELECTED] = true loop -- группировка по тарифу
cur_tarif := ::[TARIFFS_COMMISS](CODE = P_GRID(sl2).[CODE]);
select sl4(sum(nvl(sl4.[DOCUMENT]->([MAIN_DOCUM])[SUM],sl4.[DOCUMENT]->([MAIN_DOCUM])[SUM_PO]))) in [DOC_IN_FOLD] all where trunc(sl4.[DOCUMENT]->([MAIN_DOCUM])[DATE_PROV]) = cur_single_date and sl4.[PATT_REF]%id in (select sl5(sl5%id) in [PATTERN] all where sl5.[TARIFF_TAX].[TARIFF_TAX_REF] = cur_tarif) into summa_on_tarif;
if summa_on_tarif is null then
summa_on_tarif := 0;
end if;
EXCEL.WRITE(2, tarif_counter, cur_tarif.[OPERATION]);
EXCEL.WRITE(row_counter, tarif_counter, summa_on_tarif);
if not itogo.exists(tarif_counter) then
itogo(tarif_counter) := 0;
end if;

itogo(tarif_counter) := itogo(tarif_counter) + summa_on_tarif;
tarif_counter := tarif_counter + 1;
--Вариант 2
str_with_tariffs := str_with_tariffs||';Тариф:;'||cur_tarif.[CODE]||';Наименование тарифа;'||cur_tarif.[OPERATION]||';Сумма по тарифу за единицу периода;'||summa_on_tarif;
end loop;
-- верхняя группировка по тарифам
debug('Дата:;'||to_char(cur_single_date,'dd.mm.yyyy')||';'||str_with_tariffs||';');
EXCEL.WRITE(2, 1, 'Дата');
EXCEL.WRITE(row_counter, 1, to_char(cur_single_date,'dd.mm.yyyy'));
row_counter := row_counter + 1;
end loop;
EXCEL.WRITE(row_counter, 1, 'ИТОГО:');
for i in itogo.first..itogo.last loop
EXCEL.WRITE(row_counter, i, itogo(i) );
end loop;
row_counter := row_counter + 1;
excel.cmd('
i = xls.VBE.ActiveVBProject.VBComponents.Count
xls.VBE.ActiveVBProject.VBComponents.Add 1
Set objModule = xls.VBE.ActiveVBProject.VBComponents.Item(i + 1)
With objModule.CodeModule
.InsertLines 1, "Sub Макрос6()"
.InsertLines 2, " Charts.Add"
.InsertLines 3, " ActiveChart.ChartType = xlColumnClustered"
.InsertLines 4, " ActiveChart.SetSourceData Source:=Sheets(""Лист1"").UsedRange, PlotBy:= _"
.InsertLines 5, " xlColumns"
.InsertLines 7, " With ActiveChart"
.InsertLines 8, " .HasTitle = False"
.InsertLines 9, " .Axes(xlCategory, xlPrimary).HasTitle = False"
.InsertLines 10, " .Axes(xlValue, xlPrimary).HasTitle = False"
');
excel.cmd('
.InsertLines 11, " End With"
.InsertLines 36, "End Sub"
End With
xls.Application.Run "Макрос6"
'
);
elsif type_period = 2 then
EXCEL.WRITE(1, 1, 'Помесячный отчет по тарифам с '||to_char(date_begin,'mm.yyyy')||'г. по '||to_char(date_end,'mm.yyyy')||'г.');
-- группировка по единице периода
for sl in 0..trunc(date_end-date_beg) loop
-- текущий показатель единицы периода
cur_single_date := trunc(date_beg + sl);
str_with_tariffs := '';
-- верхняя группировка по тарифам
for sl2 in P_GRID.first .. P_GRID.last where P_GRID(sl2).[SELECTED] = true loop -- группировка по тарифу
cur_tarif := ::[TARIFFS_COMMISS](CODE = P_GRID(sl2).[CODE]);
-- Базовый вариант, на котором не работает
select sl4(sum(nvl(sl4.[DOCUMENT]->([MAIN_DOCUM])[SUM],sl4.[DOCUMENT]->([MAIN_DOCUM])[SUM_PO]))) in [DOC_IN_FOLD] all where trunc(sl4.[DOCUMENT]->([MAIN_DOCUM])[DATE_PROV]) = cur_single_date and sl4.[PATT_REF]%id in (select sl5(sl5%id) in [PATTERN] all where sl5.[TARIFF_TAX].[TARIFF_TAX_REF] = cur_tarif) into summa_on_tarif;
if summa_on_tarif is null then
summa_on_tarif := 0;
end if;
--Вариант 2
str_with_tariffs := str_with_tariffs||';Тариф:;'||cur_tarif.[code]||';Наименование тарифа;'||cur_tarif.[OPERATION]||';Сумма по тарифу за единицу периода;'||summa_on_tarif;
end loop;
-- верхняя группировка по тарифам
debug('Дата:;'||to_char(cur_single_date,'dd.mm.yyyy')||';'||str_with_tariffs||';');
end loop;
-- группировка по единице периода
elsif type_period = 3 then
EXCEL.WRITE(1, 1, 'Поквартальный отчет по тарифам с '||to_char(date_begin,'q.yyyy')||'г. по '||to_char(date_end,'q.yyyy')||'г.');
elsif type_period = 4 then
EXCEL.WRITE(1, 1, 'Погодовой отчет по тарифам с '||to_char(date_begin,'yyyy')||'г. по '||to_char(date_end,'yyyy')||'г.');
end if;
end;
Показать сообщения:   
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Уроки ЦФТ-Банк для начинающих Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Рейтинг@Mail.ru