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

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

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

Delphi.int.ru Expert

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

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

#   

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


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

Подробнее »



Вопрос # 4 222

/ вопрос открыт /

Доброго времени суток, уважаемые эксперты!
Как мне построить гистограмму в Excel из Delphi 7. У меня из Программы написаной в Делфи в Excel переносится таблица с данными, мне нужно, чтобы по определенным строкам построилась гистограмма, а именно в качестве значений оси Х выступала самая первая строка таблицы, а в качестве значений оси Y выступали значения второй и третей строки таблицы. Помогите, пожалуйста!

Михаил Лебедев Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Михаил Лебедев (статус: Посетитель)
Вопрос отправлен: 24 мая 2010, 18:45
Состояние вопроса: открыт, ответов: 1.

Ответ #1. Отвечает эксперт: Шичко Игорь

Здравствуйте, Михаил Лебедев!
Можно создать шаблон. На второй странице данные, на первой - гистограмма. Пересылать данные в шаблон на вторую страницу. Гистограмма будет строиться на первой.
Примерно так:
Excel:=CreateOleObject('Excel.Application');
Excel.DisplayAlerts:=False;
Workbook:=Excel.Workbooks.Open('C:\1.xlt'); /// открываем шаблон
Workbook.SaveAs('C:\2.xls'); /// сохраняем под нужным именем

.... Перенос данных

Workbook.Save;
WorkBook.Close;
Excel.Quit;
Excel:=UnAssigned;

Ответ отправил: Шичко Игорь (статус: 9-ый класс)
Время отправки: 24 мая 2010, 21:13
Оценка за ответ: 4


Мини-форум вопроса

Всего сообщений: 14; последнее сообщение — 27 мая 2010, 14:42; участников в обсуждении: 3.
Михаил Лебедев

Михаил Лебедев (статус: Посетитель), 24 мая 2010, 22:37 [#1]:

Это хорошее предложение, но мне хотелось бы, чтобы и таблица и гистограмма, построенная по этой таблице были на одной странице
Мережников Андрей

Мережников Андрей (статус: Абитуриент), 25 мая 2010, 05:48 [#2]:

создайте шаблон в Excel, так как Вам надо и пользуйтесь на здоровье
Шичко Игорь

Шичко Игорь (статус: 9-ый класс), 25 мая 2010, 07:31 [#3]:

Согласен с Мережниковым Андреем. Создайте шаблон на одной странице, только данные записывайте в нужные ячейки.
Михаил Лебедев

Михаил Лебедев (статус: Посетитель), 25 мая 2010, 12:56 [#4]:

скорее всего, я так и поступлю. спасибо большое всем за совет
Михаил Лебедев

Михаил Лебедев (статус: Посетитель), 25 мая 2010, 13:44 [#5]:

Сделал так, как Вы посоветовали, но, к сожалению, возникла новая проблемма, когда пытаюсь открыть шаблон Excel, то возникает ошибка в строке, которую я отметил восклицательными знаками, сам шаблон создан и находится там, где указано:

E := CreateOleObject('Excel.Application');
E.DisplayAlerts:=False;
!!!! Workbook:=E.Workbooks.Open('D:\Shablon.xlt'); /// открываем шаблон
Workbook.SaveAs('D:\Shablon2.xls'); /// сохраняем под новым именем
Михаил Лебедев

Михаил Лебедев (статус: Посетитель), 25 мая 2010, 13:45 [#6]:

и еще вопросик, как сделать так, чтобы программа брала шаблон из папки, куда она сама установлена?
Шичко Игорь

Шичко Игорь (статус: 9-ый класс), 25 мая 2010, 13:58 [#7]:

Можно использовать функцию:

GetDir(0, dir_);
Тогда:
Workbook:=E.Workbooks.Open(dir_ + '\Shablon.xlt');

dir_ - переменная типа string
Михаил Лебедев

Михаил Лебедев (статус: Посетитель), 25 мая 2010, 16:57 [#8]:

Воспользовался советом уважаемого Шичко Игоря, но код пришлось немного подредактировать:

GetDir(0, dir_);
E := CreateOleObject('Excel.Application');
E.DisplayAlerts:=False;
E.Workbooks.Open(dir_ + '\Shablon.xlt'); // открываю шаблон
E.Workbooks.SaveAs(dir_ + '\Result.xls'); // Сохранить
//шаблон под другим именем

Во время попытки сохранения шаблона под другим именев возникает ошибка: класса EOleError со следующим сообщением: 'Method 'SaveAs' not supported by automation object'. Подскажите, пожалуйста, как мне быть?
Шичко Игорь

Шичко Игорь (статус: 9-ый класс), 25 мая 2010, 21:22 [#9]:

Метод SaveAs - это метод для книги, а не для приложения.
Дело в том, что Вам нужно использовать переменную для книги Excel:

var
WorkBook: variant;

begin
...
WorkBook:= E.Workbooks.Open(dir_ + '\Shablon.xlt');
Workbook.SaveAs(dir_ + '\Result.xls');
...

end;

Это и было прописано в моем первоначальном коде. Я, наверное, не до конца его описал.
Михаил Лебедев

Михаил Лебедев (статус: Посетитель), 26 мая 2010, 13:50 [#10]:

Сделал как Вы написали, но выдает опять ошибку...
В строке с восклицательными знаками возникает ошибка класса EOleSystem с сообщением "Неопознанная ошибка". Подскажите в чем может быть дело? и как это исправить?

var
E : variant;
workbook : variant;
begin
try
GetDir(0, dir_);
E := CreateOleObject('Excel.Application');
E.DisplayAlerts:=False;
!!!!!! workbook := E.Workbooks.Open(dir_ + '\Shablon.xlt');
WorkBook.SaveAs(dir_ + '\Result.xls');
Шичко Игорь

Шичко Игорь (статус: 9-ый класс), 26 мая 2010, 20:49 [#11]:

Полный код тестового модуля:

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComObj;

type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;
dir_: string;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
E : variant;
workbook : variant;

begin

GetDir(0, dir_);
E := CreateOleObject('Excel.Application');
E.DisplayAlerts:=False;
workbook := E.Workbooks.Open(dir_ + '\Shablon.xlt');
WorkBook.SaveAs(dir_ + '\Result.xls');
end;

end.

Работает нормально. Может сам Excel?
Михаил Лебедев

Михаил Лебедев (статус: Посетитель), 26 мая 2010, 21:31 [#12]:

По ходу дела, действительно какие то проблеммы с офисом, потому что даже Ваш тестовый модуль выдал ошибку.
Михаил Лебедев

Михаил Лебедев (статус: Посетитель), 27 мая 2010, 14:17 [#13]:

Проблемма действительно заключалась в Офисе. Я его переустановил, и теперь все работает как часики. Спасибо большое всем. Отдельное спасибо Шичко Игорю, что так искренне проникся моей проблеммой. Спасибо!
Шичко Игорь

Шичко Игорь (статус: 9-ый класс), 27 мая 2010, 14:42 [#14]:

Удачи!

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

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