Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.07.2015, 12:28   #1
alex89d
Пользователь
 
Регистрация: 05.06.2014
Сообщений: 42
По умолчанию Delphi+Exсell

Доброго времени суток! Столкнулся со следующей проблемой. При работе моей программы есть необходимость работать с файлами exsel. Все работает правильно, и стабильно, но при попытке открыть другой файл вне программы, вываливается ошибка 'Вызов был отклонен'. Работаю через OLe. Как организовать правильную работу программы с Excel.
alex89d вне форума Ответить с цитированием
Старый 08.07.2015, 12:33   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А просто запускать через ShellExecute() не хочешь?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 08.07.2015, 12:52   #3
alex89d
Пользователь
 
Регистрация: 05.06.2014
Сообщений: 42
По умолчанию

Это же не выход!))

raised exception class EolesysError with message "Вызов был отклонен"

Последний раз редактировалось Stilet; 08.07.2015 в 13:01.
alex89d вне форума Ответить с цитированием
Старый 08.07.2015, 13:02   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Это же не выход!
Ну как знаешь. Я с OLE контейнером предпочитаю не работать вообще.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 08.07.2015, 13:51   #5
Toxa
Форумчанин Подтвердите свой е-майл
 
Аватар для Toxa
 
Регистрация: 01.12.2006
Сообщений: 514
По умолчанию

давай код и показывай в какой момент ошибка валится
Пишу на Delphi за еду
Toxa вне форума Ответить с цитированием
Старый 08.07.2015, 14:09   #6
alex89d
Пользователь
 
Регистрация: 05.06.2014
Сообщений: 42
По умолчанию

Код:
function xls_to_stringgrid(agrid: tstringgrid; axlsfile: string): boolean;
const
xlcelltypelastcell = $0000000b;
xlCalculationManual = -4135; xlAutomatic = -4105;
var
xlapp, sheet: variant;
rangematrix: variant;
x, y, k, r: integer;
begin
result := false;
xlapp := CreateOleObject('Excel.Application');
try
 // xlapp.EnableEvents := False;   
 xlapp.visible := false;
 xlapp.ScreenUpdating:=false;  
 xlapp.ErrorCheckingOptions.BackgroundChecking:=false;
 xlapp.ErrorCheckingOptions.NumberAsText:=false;
 xlapp.ErrorCheckingOptions.InconsistentFormula:=false;

xlapp.workbooks.open(axlsfile);
xlapp.Calculation:= xlCalculationManual;
xlapp.DisplayAlerts := False; 
sheet := xlapp.workbooks[extractfilename(axlsfile)].worksheets[1];
sheet.cells.specialcells(xlcelltypelastcell, emptyparam).Activate;
x := xlapp.activecell.row;
y := xlapp.activecell.column;
agrid.rowcount := x;
agrid.colcount := y;
rangematrix := xlapp.range['A1', xlapp.cells.item[x, y]].value;
k := 1;
repeat
for r := 1 to y do
agrid.cells[(r-1), (k)] := rangematrix[k, r];
inc(k);
agrid.rowcount := k;
until k > x;
rangematrix := unassigned;
finally
if not varisempty(xlapp) then
begin
xlapp.quit;
xlapp:=null;
xlapp := unassigned;
sheet := unassigned;
result := true;
end;
end;
end

Валится когда пытаюсь запустить новую книгу Exsel вне программы.Ошибка наверно в процессе excel.exe так как идет совместный доступ

Последний раз редактировалось Serge_Bliznykov; 08.07.2015 в 14:28.
alex89d вне форума Ответить с цитированием
Старый 08.07.2015, 14:38   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А я думал ты OleContainer используешь и намекал на него...
Вызов отклоняется на методе Open()?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 08.07.2015, 14:48   #8
alex89d
Пользователь
 
Регистрация: 05.06.2014
Сообщений: 42
По умолчанию

все возможно происходит изза этого
sheet.cells.specialcells(xlcelltype lastcell, emptyparam).Activate;. Так программа видит два процесса пытается работать с последним запущенным, но поскольку ничего не находит - валится. Как сделат так чтоб прога работала только со своим процессом, и получала данные только от него, тогда вероятнее всего ошибоки сыпаться перестанут.
alex89d вне форума Ответить с цитированием
Старый 08.07.2015, 15:06   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

А можно узнать, что призвана делать данная функция?
подозреваю, что ее можно переписать совсем по другому и короче.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 08.07.2015, 15:48   #10
alex89d
Пользователь
 
Регистрация: 05.06.2014
Сообщений: 42
По умолчанию

функция экспортирует файл excel в стриинггрид)
alex89d вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не изменяется интерфейс моей программы при переходе с Delphi 7 на Delphi 2010 Elvisnya Общие вопросы Delphi 3 28.04.2011 15:59
На Delphi 7 сделать игру кто хочет стать миллионером в delphi 7 666dart666 Помощь студентам 11 04.11.2010 17:57
Rad Studio 2011 XE: новое в Delphi, C++ Builder, RadPHP и Delphi Prism savva-paladin Софт 18 02.10.2010 20:24
Delphi. Как нарисовать в Delphi два движущиеся шара с определенной скоростью? redred Общие вопросы Delphi 10 11.12.2007 10:43
Как открыть БД, написанную в Delphi если нf другой машине Delphi нет? dagarik БД в Delphi 7 22.10.2007 17:54