Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 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]:

Будут вопросы - обращайтесь, и при случае не забывайте поставить оценку или добавить балл к репутации эксперта.
Удачи.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:38
Выполнено за 0.03 сек.