Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.06.2012, 01:26   #1
alexchromets
Пользователь
 
Регистрация: 23.12.2010
Сообщений: 49
По умолчанию Работа с MS Word

В этом приложении у меня рисуется график функции, он же вставляется в Excel(за это отдельное спасибо пользователю под ником BDA), осталось только этот график из excel скопировать в word(средствами delphi, разумеется).
Максимум, что я смог сделать, это средствами delphi открыть word и вставить туда какую-то ерунду.
Если кто знает как сделать - подскажите пожалуйста.
Вложения
Тип файла: rar Graphic.rar (254.6 Кб, 13 просмотров)
alexchromets вне форума Ответить с цитированием
Старый 01.06.2012, 03:38   #2
Malgor
Пользователь
 
Регистрация: 04.04.2012
Сообщений: 22
По умолчанию

График можно строить сразу в word, а не копировать его из excell.

Код:
    Var 
    Doc,Chart,Diag,Axis: OLEVariant;
...
    Diag:=Doc.Bookmarks.Item('имя_закладки').Range.InlineShapes.AddOLEObject('MSGraph.Chart');
    Diag.Width:=470;
    Diag.Height:=200;

    Chart:=Diag.OLEFormat.Object;

    Axis:=Chart.Axes.Item(1);
    Axis.TickLabels.Font.ColorIndex:=1;
    Axis.TickLabels.Font.Size:=12;
    Axis.TickLabels.orientation:=90;
    Axis.TickLabels.Font.Bold := integer(False);

    Axis:=Chart.Axes.Item(2);
    Axis.TickLabels.Font.ColorIndex:=1;
    Axis.TickLabels.Font.Size:=12;
    Axis.TickLabels.Font.Bold := integer(False);

    Chart.charttype:=51;
    Chart.HasTitle:=False;
    Chart.PlotArea.Interior.ColorIndex:=0;
    Chart.PlotArea.Interior.Pattern:=1;
    Chart.Legend.Font.ColorIndex:=0;
    Chart.Application.DataSheet.Activate;
    Chart.Application.DataSheet.Cells.Clear;
    Chart.Application.DataSheet.Cells[2, 1].Value :='Заголовок 1';
    Chart.Application.DataSheet.Cells[3, 1].Value :='Заголовок 2';
    Chart.Application.DataSheet.Cells[1, 2].Value :='Îôèñíûå ïîìåùåíèÿ';
    Chart.Application.DataSheet.Cells[2, 2].Value := 13;
    Chart.Application.DataSheet.Cells[3, 2].Value := 12;
    Chart.Application.Update;
    Chart.Application.Quit;
По большей части строишь его также как в excell.
Ps. в данном случае график вставится в том месте где располагается закладка. Если не устраивает как он вставляется в текст можно вместо InlineShapes использовать Shapes, но думаю в большинстве случаев думаю 1 вариант более пригоден.

Последний раз редактировалось Malgor; 01.06.2012 в 03:47. Причина: немного поправил код
Malgor вне форума Ответить с цитированием
Старый 01.06.2012, 03:40   #3
Malgor
Пользователь
 
Регистрация: 04.04.2012
Сообщений: 22
По умолчанию

xlColumnClustered=51; //Column Clustered Column
xl3DColumnClustered=54; // 3D Clustered Column
xlColumnStacked=52; // Stacked Column
xl3DColumnStacked=55; // 3D Stacked Column
xlColumnStacked100=53; // 100% Stacked Column
xl3DColumnStacked100=56; // 3D 100% Stacked Column
xl3DColumn=-4100; // 3D Column
xlBarClustered=57; // Bar Clustered Bar
xl3DBarClustered=60; // 3D Clustered Bar
xlBarStacked=58; // Stacked Bar
xl3DBarStacked=61; // 3D Stacked Bar
xlBarStacked100=59; // 100% Stacked Bar
xl3DBarStacked100=62; // 3D 100% Stacked Bar
xlLine=4; // Line Line
xlLineMarkers=65; // Line with Markers
xlLineStacked=63; //Stacked Line
xlLineMarkersStacked=66; // Stacked Line with Markers
xlLineStacked100=64; // 100% Stacked Line
xlLIneMarkersStacked100=67; // 100% Stacked Line with Markers
xl3DLine=-4101; // 3D Line
xlPie=5; // Pie Pie
xlPieExploded=69; // Exploded Pie
xl3Dpie=-4102; // 3D Pie
xl3DPieExploded=70; // Exploded 3D Pie
xlPieOfPie=68; // Pie of Pie
xlBarOfPie=71; // Bar of Pie
xlXYScatter=-4169; // XY (Scatter) Scatter
xlXYScatterSmooth=72; // Scatter with Smoothed Lines
xlXYScatterSmoothNoMarkers=73; // Scatter with Smoothed Lines and No Data Markers
xlXYScatterLines=74; // Scatter with Lines
xlXYScatterLinesNoMarkers=75; // Scatter with Lines and No Data Markers
xlBubble=15; // Bubble Bubble
xlBubble3DEffect=87; // Bubble with 3D effects
xlArea=1; // Area Area
xl3DArea=-4098; // 3D Area
xlAreaStacked=76; // Stacked Area
xl3DAreaStacked=78; // 3D Stacked Area
xlAreaStacked100=77; // 100% Stacked Area
xl3DAreaStacked100=79; // 3D 100% Stacked Area
xlDoughnut=-4120; // Doughnut Doughnut
xlDoughnutExploded=80; // Exploded Doughnut
xlRadar=-4151; // Radar Radar
xlRadarMarkers=81; // Radar with Data Markers
xlRadarFilled=82; // Filled Radar
xlSurface=83; // Surface 3D Surface
xlSurfaceTopView=85; // Surface (Top View)
xlSurfaceWireframe=84; // 3D Surface (wireframe)
xlSurfaceTopViewWireframe=86; // Surface (Top View wireframe)
xlStockHLC=88; // Stock Quotes High-Low-Close
xlStockVHLC=90; // Volume-High-Low-Close
xlStockOHLC=89; // Open-High-Low-Close
xlStockVOHLC=91; // Volume-Open-High-Low-Close
xlCylinderColClustered=92; // Cylinder Clustered Cylinder Column
xlCylinderBarClustered=95; // Clustered Cylinder Bar
xlCylinderColStacked=93; // Stacked Cylinder Column
xlCylinderBarStacked=96; // Stacked Cylinder Bar
xlCylinderColStacked100=94; // 100% Stacked Cylinder Column
xlCylinderBarStacked100=97; // 100% Stacked Cylinder Bar
xlCylinderCol=98; // 3D Cylinder Column
xlConeColClustered=99; // Cone Clustered Cone Column
xlConeBarClustered=102; // Clustered Cone Bar
xlConeColStacked=100; // Stacked Cone Column
xlConeBarStacked=103; // Stacked Cone Bar
xlConeColStacked100=101; // 100% Stacked Cone Column
xlConeBarStacked100=104; // 100% Stacked Cone Bar
xlConeCol=105; // 3D Cone Column
xlPyramidColClustered=106; // Pyramid Clustered Pyramid Column
xlPyramidBarClustered=109; // Clustered Pyramid Bar
xlPyramidColStacked=107; // Stacked Pyramid Column
xlPyramidBarStacked=110; // Stacked Pyramid Bar
xlPyramidColStacked100=108; // 100% Stacked Pyramid Column
xlPyramidBarStacked100=111; // 100% Stacked Pyramid Bar
xlPyramidCol=112; // 3D Pyramid Column

Типы диаграмм.
Malgor вне форума Ответить с цитированием
Старый 01.06.2012, 09:32   #4
alexchromets
Пользователь
 
Регистрация: 23.12.2010
Сообщений: 49
По умолчанию

Цитата:
Сообщение от Malgor Посмотреть сообщение
График можно строить сразу в word, а не копировать его из excell.

Код:
    Chart.Application.DataSheet.Cells[1, 2].Value :='Îôèñíûå ïîìåùåíèÿ';
Что на месте после Value должно быть?
alexchromets вне форума Ответить с цитированием
Старый 01.06.2012, 10:48   #5
alexchromets
Пользователь
 
Регистрация: 23.12.2010
Сообщений: 49
По умолчанию

Вставил код, пишет Invalid variant operation.
alexchromets вне форума Ответить с цитированием
Старый 01.06.2012, 14:15   #6
Malgor
Пользователь
 
Регистрация: 04.04.2012
Сообщений: 22
По умолчанию

Это данные для таблицы, по которой будет построенна диаграмма, в крайние ячейки надо забивать зоголовки, в остальные числа
Если быть точным [2, 1] значение этой клетки пойдёт в легенду, [1, 2] пойдёт на осб координат, просто вносишь в них текст который тебе в них необходим, надеюсь так понятней

Последний раз редактировалось Malgor; 01.06.2012 в 14:24.
Malgor вне форума Ответить с цитированием
Старый 01.06.2012, 16:20   #7
alexchromets
Пользователь
 
Регистрация: 23.12.2010
Сообщений: 49
По умолчанию

А с ошибкой что делать?
alexchromets вне форума Ответить с цитированием
Старый 02.06.2012, 14:20   #8
Malgor
Пользователь
 
Регистрация: 04.04.2012
Сообщений: 22
По умолчанию

Выложи кусок своегор кода где ты строишь график, а также описание переменных, посмотрю что у тебя не так
Malgor вне форума Ответить с цитированием
Старый 03.06.2012, 17:06   #9
alexchromets
Пользователь
 
Регистрация: 23.12.2010
Сообщений: 49
По умолчанию

Вот где строится график:
Код:
var
  n: cardinal;
  m: word;
  str: string;
label a;
begin
  Form1.caption := 'Graph - Расчет точек';
  graph := true;
  ram := true;
  xe := strtofloat(XEnd.text);
  xs := strtofloat(XStart.text);
  if xe < xs then
  begin
    str := XEnd.text;
    XEnd.text := XStart.text;
    XStart.text := str;
    xe := xe + xs;
    xs := xe - xs;
    xe := xe - xs;
  end;
  step := strtofloat(StepEd.text);
  if (step > abs(xe - xs)) or (step < 0) then
  begin
    showmessage('Неверный шаг');
    exit;
  end;
  setlength(X, trunc(abs(xe - xs) / step) + 1);
  setlength(Y, trunc(abs(xe - xs) / step) + 1);
  Gauge1.maxvalue := high(Y);
  for n := 0 to high(X) do
  begin
    X[n] := xs + n * step;
    str := FormEd.text;
    str := erranalise(str);
  a :; // метка для обновления длинны str в цикле
    for m := 1 to length(str) do
    begin
      // подстановка числа вместо x
      if ((str[m] = 'x') or (str[m] = 'X')) { and(x[n]>=0) } then
      begin
        delete(str, m, 1);
        insert(floattostr(X[n]), str, m);
        goto a;
      end;
      { if ((str[m]='x')or(str[m]='X'))and(x[n]<0) then
        begin
        delete(str,m,1);
        insert(floattostr(x[n]),str,m);
        str[m]:='~';
        goto a;
        end; }
    end;
    // решение функции в точке x
    Y[n] := strtofloat(analise(str));
    Gauge1.progress := n;
  end;
  XYMinMax;
  ris;
end;
ПеременныеЖ
Код:
  X, Y: array of extended;
  xmnoj, ymnoj, ymin, ymax, xe, xs, step: extended;
  graph: boolean = false;
  ram: boolean = false;
  f: file of extended;
  fn: string;
alexchromets вне форума Ответить с цитированием
Старый 04.06.2012, 02:14   #10
Malgor
Пользователь
 
Регистрация: 04.04.2012
Сообщений: 22
По умолчанию

Наверно я не точно выразился, меня интересовал код не построения графика в самой вашей программе, меня интересовал код построения диаграммы, собственно накидал тут пример, думаю вы просто что-то упустили.
Пример.rar
Malgor вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с Word Fistashka Помощь студентам 0 02.12.2011 12:36
Работа с Word FroL25 Общие вопросы C/C++ 0 17.03.2010 20:10
Работать в Word, не открывая документы (работа с закрытыми документами Word) Георгиевич Microsoft Office Word 10 07.09.2009 11:19
работа с Word arv БД в Delphi 13 24.05.2009 10:39
Работа с Word Shuraken Общие вопросы Delphi 2 18.09.2007 10:57