Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Жаль что Excel придумали не Borland, Delphi-Excel 
:(
    Опции темы
Jojo
Дата 12.7.2004, 12:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 9.12.2003

Репутация: нет
Всего: нет



Открываю Excel переношу из БД данные
оставляю файл Excel открытым на экране пользователя
.....
далее вторая процедура тоже должна переносить данные только на второй лист этой же книги ...... и так далее
Сохраняю каждый раз после переноса данных файл Excel
во второй раз сохранения ошибка - "Ошибка доступа к файлу"

Другими словами у меня образуется 2 объекта Excel ...
как все проверить, что объект уже существует
и не создавать второй если уже есть один объект Excel


PM MAIL   Вверх
Albinos_x
Дата 12.7.2004, 12:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: 26
Всего: 108



Кинь лучше код, и подпиши где возникает ошибка


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
Jojo
Дата 12.7.2004, 12:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 9.12.2003

Репутация: нет
Всего: нет



Код большой
ошибка на строке
Excel.ActiveWorkBook.SaveAs(SaveDialog1.FileName);

Вот первая процедура она без ошибок :

procedure TFormmain.To_Excel_etap1;
var
Excel:variant;
i,ie:integer;
FullFileName,ac_excel,nameBoook:string;
begin

FormProgress.Show;
FullFileName:= formsetup.EditBase1.text;

Excel:=StartExcel(True);
Excel.Visible:=false;
ExcelFileAdd(Excel,FullFileName); //открываем файл шаблон
Excel.Sheets['Затраты'].Activate;

dm.TBase.DatabaseName:='Zatraty';
dm.TBase.Active:=false;
dm.TBase.TableName:='etap1.dbf';
dm.TBase.Active:=true;

BegSt:=4;
EndSt:=145;
FormProgress.Visible:=true;

for ie:=BegSt to EndSt do
begin
Progress(ie,BegSt,EndSt); //прогрессбар

if not VarIsNull(Excel.Sheets['Затраты'].Cells[ie,5].Value) then
ac_excel:=Trim(ReplaceStrAll(Excel.Sheets['Затраты'].Cells[ie,5].Value,'.',''));

if not VarIsNull(Excel.Sheets['Затраты'].Cells[ie,6].Value) then
ac_excel:=Trim(ac_excel+ReplaceStrAll(Excel.Sheets['Затраты'].Cells[ie,6].Value,'.',''));

if not VarIsNull(Excel.Sheets['Затраты'].Cells[ie,7].Value) then
ac_excel:=Trim(ac_excel+ReplaceStrAll(Excel.Sheets['Затраты'].Cells[ie,7].Value,'.',''));

if Pos('.',ac_excel)<>0 then
ac_excel:=ReplaceStrAll(ac_excel,'.','');

{ if ac_excel='300248' then
begin
ShowMessage('300248 !');
end;}

if (Length(Trim(ac_excel))=4) then
ac_excel:=Trim(ac_excel)+'00'
else if (Length(Trim(ac_excel))=2) then
ac_excel:=Trim(ac_excel)+'0000';

dm.TBase.First;
for i:=1 to dm.TBase.RecordCount do
begin
if (dm.TBase.FieldByName('DT').AsString = Trim(ac_excel)) and (not dm.TBase.FieldByName('DT').isNull) then
begin
Excel.Sheets['Затраты'].Cells[ie,69].Value:=dm.TBase.FieldByName('SMR').Value;
Excel.Sheets['Затраты'].Cells[ie,73].Value:=dm.TBase.FieldByName('SH3101').Value;
Excel.Sheets['Затраты'].Cells[ie,70].Value:=dm.TBase.FieldByName('SH3102').Value;
Excel.Sheets['Затраты'].Cells[ie,71].Value:=dm.TBase.FieldByName('SH3103').Value;
Excel.Sheets['Затраты'].Cells[ie,72].Value:=dm.TBase.FieldByName('SH3104').Value;
Excel.Sheets['Затраты'].Cells[ie,74].Value:=dm.TBase.FieldByName('SH31ALL').Value;
Break;
end;
dm.TBase.Next;
end;
end;

Excel.Sheets['Затраты'].Columns['BQ:BV'].AutoFit;

dm.TBase.DatabaseName:='Zatraty';
dm.TBase.Active:=false;
nameBoook:=Excel.ActiveWorkBook.Name;
SaveDialog1.FileName:='Отчет1';
SaveDialog1.Title:='Задайте имя файлу для хранения этих данных';
SaveDialog1.Filter:='Excel Files (*.xls)|*.xls';
SaveDialog1.Execute;

Excel.ActiveWorkBook.SaveAs(SaveDialog1.FileName);
//Excel.ActiveWorkBook.SaveAs(formsetup.EditBase.text);

if MessageDlg('Показать результаты на экране ?',
mtConfirmation, [mbYes, mbNo], 0) = mrYes then
begin
//QuitExcel(Excel);
Application.BringTofront;
// ShowMessage('Отчет 1 этап выполнен !');
FormProgress.ProgressBar1.Position:=0;
FormProgress.Visible:=false;
Excel.Visible:=true;
end
else
begin
QuitExcel(Excel);
Application.BringTofront;
// ShowMessage('Отчет 1 этап выполнен !');
FormProgress.ProgressBar1.Position:=0;
FormProgress.Visible:=false;
end;

end;

А вот вторая

procedure TFormmain.To_Excel_etap2;
var
Excel:variant;
i,ix,iy:integer;
FullFileName,dt_excel,kt_excel:string;
begin
FormReport.Hide;

if not VarIsEmpty(Excel) then
begin
if (Excel.Workbooks.Count > 0) and (Excel.Visible) then
begin
// Excel.Quit;
//Excel := UnAssigned;
end;
end
else
Excel:=StartExcel(True);

if FileExists('prvetap2.dbf') then
begin //FileExists('prvetap2.dbf')

try
OpenDialog1.Title:='Какой файл будем открывать?';
OpenDialog1.Execute;
OpenDialog1.Filter:='Excel Files (*.xls)|*.xls';
FullFileName:=OpenDialog1.FileName;

except
exit;
end;

FormProgress.Show;
//FullFileName:= formsetup.EditBase.text + 'Схемы учета затрат.xls';

Excel.Visible:=false;
if FullFileName<>'' then
ExcelFileAdd(Excel,FullFileName) //открываем файл шаблон
else exit;

try
Excel.Sheets['33-30'].Activate;
except
ShowMessage('Открытый файл не содержит листа 33-30 !');
QuitExcel(Excel);
end;
dm.TBase.DatabaseName:='Zatraty';
dm.TBase.Active:=false;
dm.TBase.TableName:='prvetap2.dbf';
dm.TBase.Active:=true;

BegStX:=5;
EndStX:=55;

BegStY:=3;
EndStY:=50;

FormProgress.Visible:=true;

for iy:=BegStY to EndStY do
begin//iy
Progress(iy,BegStY,EndStY); //прогрессбар

//Обработаем ячейку по кредиту
if not VarIsNull(Excel.Sheets['33-30'].Cells[iy,1].Value) then
kt_excel:=Trim(ReplaceStrAll(Excel.Sheets['33-30'].Cells[iy,1].Value,'.',''));

if not VarIsNull(Excel.Sheets['33-30'].Cells[iy,2].Value) then
kt_excel:=kt_excel+Trim(ReplaceStrAll(Excel.Sheets['33-30'].Cells[iy,2].Value,'.',''));

if not VarIsNull(Excel.Sheets['33-30'].Cells[iy,3].Value) then
kt_excel:=kt_excel+Trim(ReplaceStrAll(Excel.Sheets['33-30'].Cells[iy,3].Value,'.',''));

if (Length(Trim(kt_excel))=4) then
kt_excel:=Trim(kt_excel)+'00'
else if (Length(Trim(kt_excel))=2) then
kt_excel:=Trim(kt_excel)+'0000';


for ix:=BegStX to EndStX do
begin //ix
//Обработаем ячейку по дебету
if not VarIsNull(Excel.Sheets['33-30'].Cells[1,ix].Value) then
dt_excel:=Trim(ReplaceStrAll(Excel.Sheets['33-30'].Cells[1,ix].Value,'.',''));

if (Length(Trim(dt_excel))=4) then
dt_excel:=Trim(dt_excel)+'00'
else if (Length(Trim(dt_excel))=2) then
dt_excel:=Trim(dt_excel)+'0000';


dm.TBase.First;
for i:=1 to dm.TBase.RecordCount do
begin
// Если нашли совпадение, то закинем из базы в Excel значение
if (dm.TBase.FieldByName('DT').AsString = Trim(dt_excel)) and (not dm.TBase.FieldByName('DT').isNull) and (dm.TBase.FieldByName('K').AsString = Trim(kt_excel)) and (not dm.TBase.FieldByName('K').isNull) then
begin
Excel.Sheets['33-30'].Cells[iy,ix].Value:=dm.TBase.FieldByName('SMR').AsCurrency;
break;
end;
dm.TBase.Next;
end;

end;//ix

end;//iy

Excel.Sheets['33-30'].Columns['G:BB'].AutoFit;

dm.TBase.DatabaseName:='Zatraty';
dm.TBase.Active:=false;
SaveDialog1.FileName:='Отчет1';
SaveDialog1.Filter:='Excel Files (*.xls)|*.xls';
SaveDialog1.Title:='Задайте имя файла для хранения данных';
SaveDialog1.Execute;

Excel.ActiveWorkBook.SaveAs(SaveDialog1.FileName); - ЗДЕСЬ ОШИБКА !!!!!!!!!!!!!!!!!!!!!!!!!!!

if MessageDlg('Показать результаты на экране ?',
mtConfirmation, [mbYes, mbNo], 0) = mrYes then
begin
//QuitExcel(Excel);
Application.BringTofront;
FormProgress.ProgressBar1.Position:=0;
FormProgress.Visible:=false;
Excel.Visible:=true;
end
else
begin
QuitExcel(Excel);
Application.BringTofront;
FormProgress.ProgressBar1.Position:=0;
FormProgress.Visible:=false;
end;

end //FileExists('prvetap2.dbf')
else ShowMessage('Не выполнен расчет 2 этапа !');

end;

PM MAIL   Вверх
Jojo
Дата 12.7.2004, 12:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 9.12.2003

Репутация: нет
Всего: нет



Фигово мне ...муторно smile.gif)) хелп
PM MAIL   Вверх
Albinos_x
Дата 12.7.2004, 13:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: 26
Всего: 108



Я так понимаю, ты работаешь, через ОЛЕ.
Если так, то:
Цитата
if (Excel.Workbooks.Count > 0) and (Excel.Visible) then
begin
// Excel.Quit;
//Excel := UnAssigned;
end;


1. Почему,ты не пробуешь закрыть другие объекты.
2. Если через ОЛЕ, то там можно подключиться к ранее созданной книге
Excel:= GetActiveOleObject('Excel.Application');
3. Книгу также можно закрыть:
WorkBook.Close(SaveChanges:=true, FileName:='{здесь путь и имя файла}');


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
Jojo
Дата 12.7.2004, 13:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 9.12.2003

Репутация: нет
Всего: нет



спасибо счас попробуем

Я еще попробую так перед второй процедурой закрою Excel
и заново открою ...
PM MAIL   Вверх
Albinos_x
Дата 12.7.2004, 13:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: 26
Всего: 108



Цитата
Я еще попробую так перед второй процедурой закрою Excel
и заново открою ...


Я как раз об этом говорил в первом пункте


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
Jojo
Дата 12.7.2004, 13:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 9.12.2003

Репутация: нет
Всего: нет



пробовал уже smile.gif)) до этого первый пункт
там у меня закоментарено ...забыл раскоментарить ...
Я использую позднее связывание ...
Хочу спросить чем хуже лучше-хуже раннее и позднее связывание

PM MAIL   Вверх
Albinos_x
Дата 12.7.2004, 13:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: 26
Всего: 108



Я плох в терминалогии, поясни biggrin.gif


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0525 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.