Member
Статус: Не в сети Регистрация: 14.08.2003 Откуда: Питер
Значится так: имеется цель сохранить содержимое таблицы (пусть будет StringGrid но я пользуюсь компонентом GridView) в файл Excell. Ниже представлен исходник процедуры, которая переносит ячейки таблици в таблицу Excell.
Так вот все же имеется пара вопросов: 1. Как "чисто сохранить файл Excell"? Дело в том, что если я пишу в конце процедуры
Код:
ExcelApp.Save('Test_Excell.eee'); ExcelApp.Quit;
то появляестся диалоговое окно о сохранении проекта. А как мне от него избавится т.к. моей сохраненке хочу присвоить другое расщирение (в данном случае 'eee')?
2. Как управлять размерами колонок в созданном файле?
Member
Статус: Не в сети Регистрация: 02.03.2005 Откуда: Владивосток
Halfback писал(а):
Значится так: имеется цель сохранить содержимое таблицы (пусть будет StringGrid но я пользуюсь компонентом GridView) в файл Excell. ... А как мне от него избавится т.к. моей сохраненке хочу присвоить другое расщирение (в данном случае 'eee')? 2. Как управлять размерами колонок в созданном файле?
Есть такая хорошая вещь в Excek - макрос. Береш перед выполнением любой нужной тебе операции идеш в Сервис-Макрос-Начать запись. После останавливаеш запись макроса, и в том же меню выбираеш Макрос-Изменить.
И все - смотриш, как сам Excel делает ту или иную операцию.
Например для сохранения файлы вот такой макрос -
Причем для того, чтобы компилятор поял свойство xlNormal надо в uses указать на ExcelXP (кинуть на форму компонет ExcellApplication - а то без него НИКАК).
Так вот теперь при попытке сохранить файл пишется ошибка типа того, что метод SaveAs не поддерживается 'by automation object' .
Какие будут предложения?
Причем для того, чтобы компилятор поял свойство xlNormal надо в uses указать на ExcelXP (кинуть на форму компонет ExcellApplication - а то без него НИКАК). Так вот теперь при попытке сохранить файл пишется ошибка типа того, что метод SaveAs не поддерживается 'by automation object' . Какие будут предложения?
Ты неправильно понял - метод SaveAs надо запускать не для ExcelApp, я для книги т.е. для твоего случая
Код:
ExcelApp.Application.Workbooks[1].SaveAs(...)
P.S. Попозже проверю - напишу как точно. И кстати какой Delphi ты юзаеш. Я на 5-ой версии, и подключаю юнит Excel97.
Добавлено спустя 39 минут, 13 секунд: Вот так точно работает - тока щас проверил (Delphi 5.0 + Office 11). Смотри пример:
Код:
procedure TForm1.Button1Click(Sender: TObject); Var MsExcel: Variant; begin VarClear(MsExcel); try MsExcel := CreateOleObject('Excel.Application'); except on E: Exception do begin ShowMessage('Невозможно запустить Microsoft Excel'+chr(13)+'Возможно программа не установлена!'); Exit; end; end; MsExcel.Application.Visible:=1; MsExcel.Application.Workbooks.Open( FileName:='C:\Test.xls', UpdateLinks:=0 );
if FileExists('C:\Test_2.xls') then DeleteFile('C:\Test_2.xls'); MsExcel.Application.Workbooks[1].SaveAs( FileName:='C:\Test_2.xls', FileFormat:=xlNormal, Password:='', WriteResPassword:='', ReadOnlyRecommended:=False, CreateBackup:=False ); MsExcel.Application.Workbooks[1].Close(False); MsExcel.Quit; VarClear(MsExcel); end;
Видиш я сам стираю файл, если он присутствует, при записи - т.к. Excel всегда запрашивает перед перезаписью чего делать.
Member
Статус: Не в сети Регистрация: 14.08.2003 Откуда: Питер
Aleksoid1978 Спасибо за помощь. Всё работает!!!
Правда вот еще есть вопрпос: файл сохраняется в принципе не так уж быстро. На моей тачке(см. профиль) где-то за 1-1,5 сек. А что будет на 300 Целике с дрянным винтом и т.п.??? Это я к тому, что хочу сделать индикатор состояния сохранения - в моем случае ProgressBar. Вот только как оценить текущее и Max значение прогресса? Какие будут предложения?
Member
Статус: Не в сети Регистрация: 02.03.2005 Откуда: Владивосток
Halfback писал(а):
Aleksoid1978 Спасибо за помощь. Всё работает!!!
Правда вот еще есть вопрпос: файл сохраняется в принципе не так уж быстро. На моей тачке(см. профиль) где-то за 1-1,5 сек. А что будет на 300 Целике с дрянным винтом и т.п.??? Это я к тому, что хочу сделать индикатор состояния сохранения - в моем случае ProgressBar. Вот только как оценить текущее и Max значение прогресса? Какие будут предложения?
насчет ProgressBar не знаю, наверное не получится привязать его к сохранению файла, можеш для наглядности другой способ - изменять значения ProgressBar по таймеру, ну чтоб люди просто видели что процесс идет, а не стоит на месте.
Я так делал, когда обрабатывал файл Excel, но незнал скока придется обработать строк, делал так - Запукаю форму, на ней прогрессбар, изменяется по таймеру, как тока процесс закончен прячу форму и все. Но правда ProgressBar который в Delphi, может тока с лева на право, а тебе желательно в обе стороны, т.е. дошел до конца и пошел занова в другую сторону. У меня такой компонент есть, давай мыло скину с примером как его юзать.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения