| 
| 
 | Вопрос # 4 263/ вопрос открыт / | 
 |  Здравствуйте, уважаемые эксперты!Подскажите, пожалуйста, как мне быть... у меня в создаваемой программе есть три диаграммы типа TChar, есть так же шаблон документа Word, в который я перемещаю данные из программы. Как мне в шаблон вставить диаграммы из моей программы?
 
|  |   Вопрос задал: Михаил Лебедев (статус: Посетитель)Вопрос отправлен: 1 июня 2010, 21:44
 Состояние вопроса: открыт, ответов: 0.
 |  
 Мини-форум вопросаВсего сообщений: 9; последнее сообщение — 8 июня 2010, 21:12; участников в обсуждении: 2. 
|   | Шичко Игорь (статус: 9-ый класс), 6 июня 2010, 23:01 [#1]:Я бы предложил переносить данные в шаблон, а не сами диаграммы. |  
|   | Михаил Лебедев (статус: Посетитель), 7 июня 2010, 11:53 [#2]:Шичко Игорь (статус: 7-ой класс), 6 июня 2010, 23:01: 
 Я бы предложил переносить данные в шаблон, а не сами диаграммы.
 
 А можно немножечко по подробнее? а то я с этим никогда не сталкивался...
 |  
|   | Шичко Игорь (статус: 9-ый класс), 7 июня 2010, 12:13 [#3]:Данные для  TChar Вы формируете в программе, рисуете сами графики. А в шаблоне у Вас 3 таблицы для данных + 3 диаграммы, связанные с ними.
 Далее делаете пересылку данных в таблицы шаблона, диаграммы сформируются сами.
 Если напишете исходных код для формирования данных в Delphi, то можно попробовать написать процедуру переноса.
 |  
|   | Михаил Лебедев (статус: Посетитель), 7 июня 2010, 13:31 [#4]:В шаблоне у меня есть одна таблица, в которой есть данные для диаграмм, можно мне как то использовать ее, или нужно три отдельных таблички создать, чтобы построить графики силами Word'а? 
 Вот код для формирования данных для построения диаграмм:
 
 // Построение диаграмм
 procedure TForm1.Action6Execute(Sender: TObject);
 var
 i : integer;
 begin
 try
 for i:= 1 to 5 do
 begin
 Series1.AddXY(i, StrToFloat(StringGrid1.Cells[i,1]),
 StringGrid1.Cells[i,0] , clRed);
 Series2.AddXY(i, StrToFloat(StringGrid1.Cells[i,3]),
 StringGrid1.Cells[i,0] , clGreen);
 end;
 for i:= 6 to 7 do
 begin
 Series3.AddXY(i, StrToFloat(StringGrid1.Cells[i,1]),
 StringGrid1.Cells[i,0] , clRed);
 Series4.AddXY(i, StrToFloat(StringGrid1.Cells[i,3]),
 StringGrid1.Cells[i,0] , clGreen);
 end;
 for i:= 1 to 5 do
 Series5.AddXY(i, StrToFloat(StringGrid1.Cells[i,8]),
 StringGrid1.Cells[i,0] , clBlue);
 except
 on EConvertError do
 begin
 ShowMessage('Введите данные для построения и сделайте расчет');
 PageControl1.ActivePageIndex := 0;
 end;
 end;
 end;
 
 Если потребуется какая то другая часть программы, пишите, я Вам скину. Могу сбросить всю программу Вам на почту, если конечно захотите посмотреть
   |  
|   | Шичко Игорь (статус: 9-ый класс), 7 июня 2010, 16:44 [#5]:А Вы обязательно в Word хотите. Не лучше пересылать в Excel. Потому что Word все равно придется связывать с Excel.
 Если это принципиально, то реальный путь - сформировать диаграмму в Excel, скопировать и вставить в Word в виде картинки.
 |  
|   | Михаил Лебедев (статус: Посетитель), 7 июня 2010, 21:56 [#6]:У меня в программе есть две кнопки. При нажатии на одной из них отчет создается в Excel'e а при нажатии по другой - отчет создается в Word'e. Вот только почему то в Excel'e отчет создается заметно дольше. Может быть вы подскажете в чем может быть проблемма? вот код:
 // Отправка расчитанных данных в Excel
 procedure TForm1.Action7Execute(Sender: TObject);
 const
 xlHAlignCenter = -4108;
 xlVAlignCenter = -4108;
 var
 E : variant;
 c, r : integer;
 cell : String;
 h : real;
 dir_ : String;
 workbook : variant;
 NameFile : string;
 begin
 
 // Проверка присутствия данных о трансформаторе, для создания отчета
 // Тип трансформатора
 if Edit3.Text = '' then
 begin
 ShowMessage('Введите тип трансформатора');
 PageControl1.ActivePageIndex := 0;
 Edit3.SetFocus; exit;
 end;
 // Объект
 if Edit4.Text = '' then
 begin
 ShowMessage('Введите объект');
 PageControl1.ActivePageIndex := 0;
 Edit4.SetFocus; exit;
 end;
 // Заводской номер
 if Edit6.Text = '' then
 begin
 ShowMessage('Введите заводской номер');
 PageControl1.ActivePageIndex := 0;
 Edit6.SetFocus; exit;
 end;
 // Диспетчерское наименование
 if Edit5.Text = '' then
 begin
 ShowMessage('Введите диспетчерское наименование');
 PageControl1.ActivePageIndex := 0;
 Edit5.SetFocus; exit;
 end;
 
 // Отправка данных в Excel
 GetDir(0, dir_);
 NameFile := Edit4.Text + '_' + Edit5.Text;
 E := CreateOleObject('Excel.Application');
 E.DisplayAlerts:=False;
 Workbook := E.Workbooks.Open(dir_ + '\Shablon.xls');
 
 // Проверка создана ли папка Отчеты
 try
 WorkBook.SaveAs(dir_ + '\Отчеты\'+ NameFile + '.xls');
 except
 on EOleException do
 begin
 CreateDir(dir_ + '\Отчеты\');
 WorkBook.SaveAs(dir_ + '\Отчеты\'+ NameFile + '.xls');
 end;
 end;
 
 with StringGrid1 do
 for c:=1 to ColCount-1 do
 for r:=1 to rowCount-1 do
 begin
 if r = 4 then
 begin
 cell:=format('%s%d',[chr(ord('A')+c),r+1]);
 E.Range[cell, EmptyParam].Value[xlRangeValueDefault] := Cells[c,4];
 end
 else
 begin
 h := StrToFloat(Cells[c,r]);
 cell:=format('%s%d',[chr(ord('A')+c),r+1]); //формируем адрес ячейки в которую будем вносить данные
 E.Range[cell, EmptyParam].Value[xlRangeValueDefault] := h; //непосредственно помещение даных
 end;
 
 E.Range[cell, EmptyParam].HorizontalAlignment := xlHAlignCenter;
 E.Range[cell, EmptyParam].VerticalAlignment := xlVAlignCenter;
 E.Range[cell, EmptyParam].WrapText := TRUE;
 E.Range[cell, EmptyParam].NumberFormat := '';
 E.Range[cell, EmptyParam].Borders.LineStyle := xlSolid;
 end;
 
 if RadioButton2.Checked then
 E.Visible := True
 else
 begin
 Workbook.Save;
 
 // Проверка, сохранен ли отчет
 if WorkBook.Saved then
 StatusBar1.Panels[1].Text := ' Отчёт в MSExcel создан успешно';
 if not WorkBook.Saved then
 StatusBar1.Panels[1].Text := ' Отчёт в MSExcel НЕ СОЗДАН!';
 
 WorkBook.Close;
 
 try
 E.Quit;
 finally
 E:=UnAssigned;
 end;
 end;
 end;
 |  
|   | Шичко Игорь (статус: 9-ый класс), 7 июня 2010, 22:43 [#7]:Ничего особенного, все нормально, нормальный код. В Excel отчет будет немного дольше формироваться, но и возможностей больше. |  
|   | Михаил Лебедев (статус: Посетитель), 8 июня 2010, 20:26 [#8]:Понятно. спасибо большое за помощь, спасибо за то, что не оставили в трудном положении! |  
|   | Шичко Игорь (статус: 9-ый класс), 8 июня 2010, 21:12 [#9]:Будут вопросы - обращайтесь, и при случае не забывайте поставить оценку или добавить балл к репутации эксперта. Удачи.
 |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |