|
Вопрос # 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]:
Будут вопросы - обращайтесь, и при случае не забывайте поставить оценку или добавить балл к репутации эксперта.
Удачи.
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|