Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

SaveAs через OLE в Excel не позволяет переписать поверху [Delphi, Windows]


Vetal ©   (2005-01-10 15:02:00) 

Всем привет!

Есть проблема. Использую Excel через OLE. Сохраняю файл, используя Workbook.SaveAs. Так вот, проблема в том, что если файл с тем именем, с которым я сохраняю, уже присутствует, то Excel выдает диалоговое окно с вопросом переписать ли поверху.
Можно ли автоматически переписывать поверху, не запрашивая это у пользователя?

Пример:
var
Excel,WorkBook:variant;
begin
Excel:=CreateOleObject('Excel.Application');
WorkBook:=Excel.Workbooks.Add;
Excel.Visible:= false;
Workbook.SaveAs('c:\temp\wb.xls');

Так вот, файл с именем c:\temp\wb.xls уже присутствует. При выполнении строки с SaveAs выскакивает табличка:
A file named 'c:\temp\wb.xls' already exists in this location. Do you want to replace it?
А мне нужно, чтобы файл переписался поверху, при этом не спрашивая у пользователя. Можно ли так сделать?

Всем заранее спасибо за ответы!


Vetal   (2005-01-12 12:12:00) [1]

Вобщем, я понял как можно обойти проблему.
Я создаю новый файл, а потом пытаюсь его программно сохранить. Если уже такой существует, возникает табличка, от которой нельзя избавиться.
Если файл открывать, а потом сохранять, табличек никаких не будет.

Из этого следует, что нужно сделать следующим образом:
Попробовать открыть файл. Если попытка открытия завершается ошибкой, тогда создавать файл. После окончания сеанса работы - сохранять.

Вобщем, похоже, это решение проблемы. Хотя Мелкомягкие неправы. Им нада было опционально ввести в функцию сохранения параметр типа RewriteIfExists...

Всем спасибо!!


GanibalLector   (2005-01-11 20:39:00) [2]

>Неа, все равно при попытке пересохранить существующий файл выдает табличку
Чушь городишь!Никаких табличек нет и быть не может!!!
Для примера :

var a,b:integer;
begin
XLApp:=CreateOleObject('Excel.Application');
XLApp.Visible:=true;
XLApp.WorkBooks.Open('C:\test.xls');
a:=random(5);
b:=random(5);
if a=0 then a:=1;
if b=0 then b:=1;

XLApp.WorkBooks[1].WorkSheets[1].Name:='test ;)';
XLApp.WorkBooks[1].Sheets[1].Cells[a,b]:='GanibalLector';

XlApp.ActiveWorkbook.Close(1);
XlApp.Quit;
XlApp:=Unassigned;
end;


Cobalt   (2005-01-11 18:51:00) [3]

есть только одно предложение - открывать сразу этот файл.
Если же имя файла в момент начала работы неизвестно, то можно перед сохранением открывать во втором экземрляре этот файл, очищать, копировать в него содержимое из рабочего "места", и сохранять уже второй экземпляр (открытый как требуемый файл).


Vetal   (2005-01-11 17:41:00) [4]

Неа, все равно при попытке пересохранить существующий файл выдает табличку:
A file named 'c:\temp\wb.xls' already exists in this location. Do you want to replace it?
А мне нужно, чтобы сохраняло без таблички.
Кстати, в хелпе по экселю первый параметр обозначен как true или false... Я писал у себя true.


GanibalLector   (2005-01-11 00:24:00) [5]

Workbook.Close($00000001, 'c:\temp\wb.xls');
где :
xlDoNotSaveChanges = $00000002;
xlSaveChanges = $00000001;


Наверх

Титульная страница Поиск, карта сайта Написать письмо