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