|
|
Регистрация | << Правила форума >> | 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?
If end Then begin; |
#3
|
|||
|
|||
Как в каком компоненте в самом Excel и строить. За Y столбцы C,D,E,F c 14 строчки. за X столбец A1 с 14 строки.
|
#4
|
|||
|
|||
В экселе не шарю, но наверно можно через шаблоны как-нибудь заранее создать лист с графиком по пустым клеткам, сохранииь в файл и создавать лист для заполнения на основе него
|
#5
|
||||
|
||||
Я делал так не знаю правильно или нет. Создавал Bmp в памяти на нём рисовал а потом вставлял в Word. Так проще. Пример дома есть вечером выложу.
If end Then begin; |
#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; Google в помощь |