|
Вопрос # 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]:
Проблемма действительно заключалась в Офисе. Я его переустановил, и теперь все работает как часики. Спасибо большое всем. Отдельное спасибо Шичко Игорю, что так искренне проникся моей проблеммой. Спасибо!
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|