Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Базы данных
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 08.09.2011, 05:47
Zhigalov Zhigalov вне форума
Начинающий
 
Регистрация: 27.05.2009
Сообщения: 100
Репутация: -1277
По умолчанию Построение графика

Помогите пожалуйсто построить график.
Я экспортирую данные в Excel.
Код:
procedure TForm1.Button6Click(Sender: TObject);
 Var
  i,ind,c:Integer;
  ExcelApp,Sheet:Variant;
   begin
    ExcelApp:=CreateOleObject('Excel.Application');
    ExcelApp.WorkBooks.Add;
    ExcelApp.WorkBooks[1].WorkSheets[1].Name:='Отчет';
    sheet:=ExcelApp.WorkBooks[1].WorkSheets['Отчет'];

    Sheet.Cells[1,1]:='Название прибора:';
    Sheet.Cells[1,2]:='Газ ГРП';
    Sheet.Cells[3,1]:='Конфигурация каналов:';
    Sheet.Cells[4,1]:='Имя канала:';
    Sheet.Cells[4,3]:='P дo ГPП';
    Sheet.Cells[4,4]:='P пocлe ГPП';
    Sheet.Cells[4,5]:='T гaзa';
    Sheet.Cells[4,6]:='F гaзa 100%';
    Sheet.Cells[5,1]:='Единицы измерения:';
    Sheet.Cells[5,3]:='kгc/cм^2';
    Sheet.Cells[5,4]:='kгc/cм^2';
    Sheet.Cells[5,5]:='°C';
    Sheet.Cells[5,6]:='м^3/ч*1000';
    Sheet.Cells[6,1]:='Min:';
    Sheet.Cells[6,3]:='0';
    Sheet.Cells[6,4]:='0';
    Sheet.Cells[6,5]:='-50';
    Sheet.Cells[6,6]:='0';
    Sheet.Cells[7,1]:='Max:';
    Sheet.Cells[7,3]:='10';
    Sheet.Cells[7,4]:='1,6';
    Sheet.Cells[7,5]:='200';
    Sheet.Cells[7,6]:='40';
    Sheet.Cells[8,1]:='Тип датчика:';
    Sheet.Cells[8,3]:='Ток';
    Sheet.Cells[8,4]:='Ток';
    Sheet.Cells[8,5]:='Термосопр';
    Sheet.Cells[8,6]:='Ток';
    Sheet.Cells[9,1]:='Диапазон:';
    Sheet.Cells[9,3]:='0..5мА';
    Sheet.Cells[9,4]:='0..5мА';
    Sheet.Cells[9,5]:='50М';
    Sheet.Cells[9,6]:='0..5мА';
    Sheet.Cells[11,1]:='Данные по каналам';
    Sheet.Cells[13,1]:='Дата/Время';
    Sheet.Cells[13,3]:='P дo ГPП';
    Sheet.Cells[13,4]:='P пocлe ГPП';
    Sheet.Cells[13,5]:='T гaзa';
    Sheet.Cells[13,6]:='F гaзa 100%';

        ind:=14;
    DBGrid2.DataSource.DataSet.First;
    c := DBGrid2.DataSource.DataSet.RecordCount;
     For i:=1 to DBGrid2.DataSource.DataSet.RecordCount do
      Begin
       ProgressBar2.Position := (i * 100) div c;

       Sheet.Cells[ind,1]:=DataModule2.QueryGRP.FieldByName('Column1').Value;

       Sheet.Cells[ind,3].Columns.NumberFormat:='# #0,000';
       Sheet.Cells[ind,3]:=DataModule2.QueryGRP.FieldByName('Column2').Value;

       Sheet.Cells[ind,4].Columns.NumberFormat:='# #0,000';
       Sheet.Cells[ind,4]:=DataModule2.QueryGRP.FieldByName('Column3').Value;

       Sheet.Cells[ind,5].Columns.NumberFormat:='# #0,000';
       Sheet.Cells[ind,5]:=DataModule2.QueryGRP.FieldByName('Column4').Value;

       Sheet.Cells[ind,6].Columns.NumberFormat:='# #0,000';
       Sheet.Cells[ind,6]:=DataModule2.QueryGRP.FieldByName('Column5').Value;

       inc(ind);
       DBGrid2.DataSource.DataSet.Next;
      end;
    Sheet.Cells[ind+1,1].Columns.Font.Bold:=True;
    Sheet.Cells[ind+1,1].Columns.Font.Size:=12;
    Sheet.Cells[ind+1,1]:='Среднее';

    Sheet.Cells[ind+1,3].Columns.NumberFormat:='# #0,000';
    Sheet.Cells[ind+1,3].Columns.Font.Bold:=True;
    Sheet.Cells[ind+1,3].Columns.Font.Size:=12;
    Sheet.Cells[ind+1,3]:='=AVERAGE(C14:C'+IntToStr(ind-1)+')';

    Sheet.Cells[ind+1,4].Columns.NumberFormat:='# #0,000';
    Sheet.Cells[ind+1,4].Columns.Font.Bold:=True;
    Sheet.Cells[ind+1,4].Columns.Font.Size:=12;
    Sheet.Cells[ind+1,4]:='=AVERAGE(D14:D'+IntToStr(ind-1)+')';

    Sheet.Cells[ind+1,5].Columns.NumberFormat:='# #0,000';
    Sheet.Cells[ind+1,5].Columns.Font.Bold:=True;
    Sheet.Cells[ind+1,5].Columns.Font.Size:=12;
    Sheet.Cells[ind+1,5]:='=AVERAGE(E4:E'+IntToStr(ind-1)+')';

    Sheet.Cells[ind+1,6].Columns.NumberFormat:='# #0,000';
    Sheet.Cells[ind+1,6].Columns.Font.Bold:=True;
    Sheet.Cells[ind+1,6].Columns.Font.Size:=12;
    Sheet.Cells[ind+1,6]:='=AVERAGE(F14:F'+IntToStr(ind-1)+')';

    ExcelApp.Columns.AutoFit;
    ExcelApp.Visible:=True;
    ProgressBar2.Position := 0;
   end;
А как по этим данным экспортированным построить график? Подскажите пожалуйсто.
Ответить с цитированием
  #2  
Старый 08.09.2011, 10:04
Аватар для AND_REY
AND_REY AND_REY вне форума
Активный
 
Регистрация: 31.03.2009
Адрес: Украина, г.Днепропетровск
Сообщения: 324
Версия Delphi: Delphi7
Репутация: 3877
По умолчанию

В каком компоненте строить? Что есть Х, Y?
__________________
If end Then begin;
Ответить с цитированием
  #3  
Старый 08.09.2011, 11:15
Zhigalov Zhigalov вне форума
Начинающий
 
Регистрация: 27.05.2009
Сообщения: 100
Репутация: -1277
По умолчанию

Как в каком компоненте в самом Excel и строить. За Y столбцы C,D,E,F c 14 строчки. за X столбец A1 с 14 строки.
Ответить с цитированием
  #4  
Старый 08.09.2011, 11:37
Pyro Pyro вне форума
Так проходящий
 
Регистрация: 18.07.2011
Сообщения: 805
Версия Delphi: 7Lite
Репутация: 6063
По умолчанию

В экселе не шарю, но наверно можно через шаблоны как-нибудь заранее создать лист с графиком по пустым клеткам, сохранииь в файл и создавать лист для заполнения на основе него
Ответить с цитированием
  #5  
Старый 08.09.2011, 12:12
Аватар для AND_REY
AND_REY AND_REY вне форума
Активный
 
Регистрация: 31.03.2009
Адрес: Украина, г.Днепропетровск
Сообщения: 324
Версия Delphi: Delphi7
Репутация: 3877
По умолчанию

Я делал так не знаю правильно или нет. Создавал Bmp в памяти на нём рисовал а потом вставлял в Word. Так проще. Пример дома есть вечером выложу.
__________________
If end Then begin;
Ответить с цитированием
  #6  
Старый 12.09.2011, 12:06
Zhigalov Zhigalov вне форума
Начинающий
 
Регистрация: 27.05.2009
Сообщения: 100
Репутация: -1277
По умолчанию

Вот вроде нащел код. Но какой тут надо использовать модуль не как скомпилится не могу.

Код:
procedure TForm1.Button25Click(Sender: TObject);
 var a_:integer;
   rng_:string;
begin
AddChart(ChartName,xl3DColumn);
SetSourceData(1{ChartName},2,'A1:F6',xlRows);
//заполняем данными
randomize;
SetRange(2,'A1','AAAA');
SetRange(2,'B1','BBBB');
SetRange(2,'C1','CCCC');
SetRange(2,'D1','AAAA');
SetRange(2,'E1','BBBB');
SetRange(2,'F1','CCCC');
for a_:=2 to 5 do begin
    SetRange(2,'A'+inttostr(a_),a_-1);
    SetRange(2,'B'+inttostr(a_),random(1000));
    SetRange(2,'C'+inttostr(a_),random(1000));
    SetRange(2,'D'+inttostr(a_),random(1000));
    SetRange(2,'E'+inttostr(a_),random(1000));
    SetRange(2,'F'+inttostr(a_),random(1000));
    end;
TextChartTitle(ChartName,'Заголовок Диаграммы');
PositionChartTitle(ChartName,1,1);  //координаты заголовка
BorderChartTitle(ChartName,RGB(100,150,245),1,1); //рамка заголовка
BrushChartTitle(ChartName,RGB(100,120,210),1,rgb(45,120,170)); //цвет заголовка
PositionPlotArea(ChartName,1,1,200,200); //координаты области
SetChartLocation(ChartName,'Новый лист',xlLocationAsNewSheet); // размещение диаграммы. Вместо 'Новый лист' поставь или название своего листа, или его номер!
end;
Ответить с цитированием
  #7  
Старый 12.09.2011, 17:10
Zhigalov Zhigalov вне форума
Начинающий
 
Регистрация: 27.05.2009
Сообщения: 100
Репутация: -1277
По умолчанию

есть набор данных на листе
нужно по ним построить диаграмму
как из имеющегося на листе набора данных построить диаграмму?
Может кто встречался уже с таким подскажите если не затруднит.
Ответить с цитированием
  #8  
Старый 12.09.2011, 21:15
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,024
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Открываешь Эксель.
Включаешь запись макросов.
Делаешь все в Экселе руками.
Смотришь что записано в макросе и делаешь те-же вызовы из Delphi через OLE.
Ответить с цитированием
  #9  
Старый 13.09.2011, 06:04
Zhigalov Zhigalov вне форума
Начинающий
 
Регистрация: 27.05.2009
Сообщения: 100
Репутация: -1277
По умолчанию

Спасибо буду пробывать.
Ответить с цитированием
  #10  
Старый 13.09.2011, 06:26
Zhigalov Zhigalov вне форума
Начинающий
 
Регистрация: 27.05.2009
Сообщения: 100
Репутация: -1277
По умолчанию

Код:
Sub Макрос2()
'
' Макрос2 Макрос
'

'
    ActiveSheet.Shapes.AddChart.Select
    ActiveChart.ChartType = xlLine
    Range("B3:C25").Select
End Sub

Помогите перевести на язык Delphi!
Ответить с цитированием
  #11  
Старый 13.09.2011, 07:10
Zhigalov Zhigalov вне форума
Начинающий
 
Регистрация: 27.05.2009
Сообщения: 100
Репутация: -1277
По умолчанию

Сам спроси сам ответь =)
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  E, B: OleVariant;
  i: OleVariant;
begin
   E := CreateOleObject( 'Excel.Application' );
   B := E.Workbooks.Add;
   E.Visible := true;
   i := E.VBE.ActiveVBProject.VBComponents.Count;
   E.VBE.ActiveVBProject.VBComponents.Add( 1 );
   // Добавляем в модуль книги код на VB
   B.VBProject.VBComponents.Item( i+1 ).CodeModule.InsertLines( 1, 'Sub Macros()' );
   B.VBProject.VBComponents.Item( i+1 ).CodeModule.InsertLines( 2, '   ActiveSheet.Shapes.AddChart.Select' );
   B.VBProject.VBComponents.Item( i+1 ).CodeModule.InsertLines( 3, 'ActiveChart.ChartType = xlLine' );
   B.VBProject.VBComponents.Item( i+1 ).CodeModule.InsertLines( 4, 'End Sub' );
   // Добавляем то же самое в код листа
   B.VBProject.VBComponents.Item( 'Лист1' ).CodeModule.InsertLines( 1, 'Sub Macros()' );
   B.VBProject.VBComponents.Item( 'Лист1' ).CodeModule.InsertLines( 2, '   ActiveSheet.Shapes.AddChart.Select' );
   B.VBProject.VBComponents.Item( 'Лист1' ).CodeModule.InsertLines( 3, 'ActiveChart.ChartType = xlLine' );
   B.VBProject.VBComponents.Item( 'Лист1' ).CodeModule.InsertLines( 4, 'End Sub' );
   E.Application.Run( 'Macros' );
   E.Application.Run( 'Лист1.Macros' );

end;
Ответить с цитированием
  #12  
Старый 13.09.2011, 09:36
Аватар для Ildar-tsr
Ildar-tsr Ildar-tsr вне форума
Местный
 
Регистрация: 09.08.2011
Адрес: г.Сургут, ХМАО
Сообщения: 453
Репутация: 7402
По умолчанию

Цитата:
Сообщение от Zhigalov
Код:
Sub Макрос2()
'
' Макрос2 Макрос
'

'
    ActiveSheet.Shapes.AddChart.Select
    ActiveChart.ChartType = xlLine
    Range("B3:C25").Select
End Sub

Помогите перевести на язык Delphi!

Код:
var e: OleVariant;
begin
  e:= CreateOleObject('Excel.Application');
  e.Workbooks.Open('{путь и имя книги}.xls');
  
  e.ActiveSheet.Shapes.AddChart.Select;
  e.ActiveChart.ChartType:= 4;
  e.Range[e.Cells[3,2],e.Cells[25,3]].Select;

  e.Visible:= true;
end;
__________________
Google в помощь
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 01:23.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter