![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| Jojo |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 9.12.2003 Репутация: нет Всего: нет |
Открываю Excel переношу из БД данные
оставляю файл Excel открытым на экране пользователя ..... далее вторая процедура тоже должна переносить данные только на второй лист этой же книги ...... и так далее Сохраняю каждый раз после переноса данных файл Excel во второй раз сохранения ошибка - "Ошибка доступа к файлу" Другими словами у меня образуется 2 объекта Excel ... как все проверить, что объект уже существует и не создавать второй если уже есть один объект Excel |
|||
|
||||
| Albinos_x |
|
|||
![]() Evil Skynet ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3288 Регистрация: 28.5.2004 Где: X-6120400 Y-1 4624650 Репутация: 26 Всего: 108 |
Кинь лучше код, и подпиши где возникает ошибка
-------------------- "Кто владеет информацией, тот владеет миром" Уинстон Черчилль |
|||
|
||||
| Jojo |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 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; |
|||
|
||||
| Jojo |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 9.12.2003 Репутация: нет Всего: нет |
Фигово мне ...муторно
|
|||
|
||||
| Albinos_x |
|
|||
![]() Evil Skynet ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3288 Регистрация: 28.5.2004 Где: X-6120400 Y-1 4624650 Репутация: 26 Всего: 108 |
Я так понимаю, ты работаешь, через ОЛЕ.
Если так, то:
1. Почему,ты не пробуешь закрыть другие объекты. 2. Если через ОЛЕ, то там можно подключиться к ранее созданной книге Excel:= GetActiveOleObject('Excel.Application'); 3. Книгу также можно закрыть: WorkBook.Close(SaveChanges:=true, FileName:='{здесь путь и имя файла}'); -------------------- "Кто владеет информацией, тот владеет миром" Уинстон Черчилль |
|||
|
||||
| Jojo |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 9.12.2003 Репутация: нет Всего: нет |
спасибо счас попробуем
Я еще попробую так перед второй процедурой закрою Excel и заново открою ... |
|||
|
||||
| Albinos_x |
|
|||
![]() Evil Skynet ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3288 Регистрация: 28.5.2004 Где: X-6120400 Y-1 4624650 Репутация: 26 Всего: 108 |
Я как раз об этом говорил в первом пункте -------------------- "Кто владеет информацией, тот владеет миром" Уинстон Черчилль |
|||
|
||||
| Jojo |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 10 Регистрация: 9.12.2003 Репутация: нет Всего: нет |
пробовал уже
там у меня закоментарено ...забыл раскоментарить ... Я использую позднее связывание ... Хочу спросить чем хуже лучше-хуже раннее и позднее связывание |
|||
|
||||
| Albinos_x |
|
|||
![]() Evil Skynet ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3288 Регистрация: 28.5.2004 Где: X-6120400 Y-1 4624650 Репутация: 26 Всего: 108 |
Я плох в терминалогии, поясни
-------------------- "Кто владеет информацией, тот владеет миром" Уинстон Черчилль |
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |