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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.06.2012, 10:59   #11
alexchromets
Пользователь
 
Регистрация: 23.12.2010
Сообщений: 49
По умолчанию

Это скорее всего я не так понял.
Ниже приведен весь рабочий код для вставки моей диаграммы в Excel.
Может, исходя из этих данных, можно вставить диаграмму в Word?
Код:
function CheckExcelRun: boolean;
begin
  try
    MyExcel := GetActiveOleObject(ExcelApp);
    Result := true;
  except
    Result := false;
  end;
end;

function RunExcel(DisableAlerts: boolean = true;
  Visible: boolean = false): boolean;
begin
  try
    { Проверяем, установлен ли Excel }
    if CheckExcelInstall then
    begin
      MyExcel := CreateOleObject(ExcelApp);
      // Показывать/Не показывать системные сообщения Excel
      MyExcel.Application.EnableEvents := DisableAlerts;
      MyExcel.Visible := Visible;
      Result := true;
    end
    else
    begin
      MessageBox(0, 'Приложение MS Excel не установлено на этом компьютере',
        'Ошибка', MB_OK + MB_ICONERROR);
      Result := false;
    end;
  except
    Result := false;
  end;
end;

procedure AddLineChartFromTable(X1, Y1, Height, Width, Format: Integer;
  Title, XLabel, YLabel: string; DataPosition: byte; ChartType: OleVariant);
var
  Chart: OleVariant;
  i: Integer;
begin
  // Вставляем данные из таблицы
  // showmessage(inttostr(min( high(X), high(Y))));
  try
    for i := 0 to min( high(X), high(Y)) - 1 do
    begin
      MyExcel.ActiveWorkBook.ActiveSheet.Cells[1, i + 1] := X[i];
      MyExcel.ActiveWorkBook.ActiveSheet.Cells[2, i + 1] := Y[i];
    end;
  except
    raise Exception.Create('Запись таблицы завершилась ошибкой')
  end;
  // Добавляем новую диаграмму на активный лист
  Chart := MyExcel.ActiveWorkBook.ActiveSheet.ChartObjects.Add(X1, Y1, Width,
    Height);
  // Выбираем последнюю добавленную диаграмму
  MyExcel.Visible := true;
  // Chart := MyExcel.ActiveWorkBook.ActiveSheet.ChartObjects
  // [MyExcel.ActiveWorkBook.ActiveSheet.ChartObjects.Count-1];

  Chart.Chart.ChartWizard
    (Source := MyExcel.ActiveWorkBook.ActiveSheet.UsedRange,
    Gallery := ChartType, Format := Format, PlotBy := xlrows,
    CategoryLabels := 1, SeriesLabels := 0, HasLegend := false,
    Title := Title, CategoryTitle := XLabel, ValueTitle := YLabel);
end;

function AddWorkBook(AutoRun: boolean = true): boolean;
begin
  if CheckExcelRun then
  begin
    MyExcel.WorkBooks.Add;
    Result := true;
  end
  else if AutoRun then
  begin
    RunExcel;
    MyExcel.WorkBooks.Add;
    Result := true;
  end
  else
    Result := false;
end;

procedure TForm1.excelClick(Sender: TObject);
begin
  if AddWorkBook then
    AddLineChartFromTable(10, 10, 500, 1000, 1, 'График', 'x', 'f(x)', 1,
      xlLineStacked);
end;
alexchromets вне форума Ответить с цитированием
Старый 04.06.2012, 15:10   #12
alexchromets
Пользователь
 
Регистрация: 23.12.2010
Сообщений: 49
По умолчанию

Наверное, я не так понял.
Вот код вставки диаграммы в excel, может, исходя из этих данных, можно для word`а сделать?
Код:
procedure TForm1.excelClick(Sender: TObject);
begin
  if AddWorkBook then
    AddLineChartFromTable(10, 10, 500, 1000, 1, 'График', 'x', 'f(x)', 1,
      xlLineStacked);
end;
alexchromets вне форума Ответить с цитированием
Старый 05.06.2012, 00:25   #13
Malgor
Пользователь
 
Регистрация: 04.04.2012
Сообщений: 22
По умолчанию

Код:
  try
    for i := 0 to min( high(X), high(Y)) - 1 do
    begin
      MyExcel.ActiveWorkBook.ActiveSheet.Cells[1, i + 1] := X[i];
      MyExcel.ActiveWorkBook.ActiveSheet.Cells[2, i + 1] := Y[i];
    end;
  except
меняем на

Код:
  try
    for i := 0 to min( high(X), high(Y)) - 1 do
    begin
    Chart.Application.DataSheet.Cells[1, i + 1].Value :=X[i];
    Chart.Application.DataSheet.Cells[2, i + 1].Value:=Y[i];
    end;
  except
главное правильно Chart определить чтобы работало
для вставки графика в пустой документ придётся исользовать
Код:
Diag:=doc.activeDocument.inlineShapes.AddOLEObject('MSGraph.Chart.8');
вместо того чтобы на закладку переходить(как я писал ранее).
обственно остальные функции нужно переделать под word.
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