![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Помогите пожалуйсто построить график.
Я экспортирую данные в 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
|
||||
|
||||
|
В каком компоненте строить? Что есть Х, Y?
|
|
#3
|
|||
|
|||
|
Как в каком компоненте в самом Excel и строить. За Y столбцы C,D,E,F c 14 строчки. за X столбец A1 с 14 строки.
|
|
#4
|
|||
|
|||
|
В экселе не шарю, но наверно можно через шаблоны как-нибудь заранее создать лист с графиком по пустым клеткам, сохранииь в файл и создавать лист для заполнения на основе него
|
|
#5
|
||||
|
||||
|
Я делал так не знаю правильно или нет. Создавал Bmp в памяти на нём рисовал а потом вставлял в Word. Так проще. Пример дома есть вечером выложу.
|
|
#6
|
|||
|
|||
|
Вот вроде нащел код. Но какой тут надо использовать модуль не как скомпилится не могу.
Код:
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
|
|||
|
|||
|
есть набор данных на листе
нужно по ним построить диаграмму как из имеющегося на листе набора данных построить диаграмму? Может кто встречался уже с таким подскажите если не затруднит. |
|
#8
|
|||
|
|||
|
Открываешь Эксель.
Включаешь запись макросов. Делаешь все в Экселе руками. Смотришь что записано в макросе и делаешь те-же вызовы из Delphi через OLE. |
|
#9
|
|||
|
|||
|
Спасибо буду пробывать.
|
|
#10
|
|||
|
|||
|
Код:
Sub Макрос2()
'
' Макрос2 Макрос
'
'
ActiveSheet.Shapes.AddChart.Select
ActiveChart.ChartType = xlLine
Range("B3:C25").Select
End SubПомогите перевести на язык Delphi! |
|
#11
|
|||
|
|||
|
Сам спроси сам ответь =)
Код:
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
|
||||
|
||||
|
Цитата:
Код:
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; |