Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
Матвеев Евгений Профи
Вступление в Клуб: 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; |
|
 |
|
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
|