![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Некорректная передача строкового параметра при работе с Excel [Delphi, Windows]
BiN © (2006-01-31 17:34:00)При выполнении следующего кода
procedure OpenFile(const FileName: String);
var
ExcelApp: Variant;
WorkBook: Variant;
Temp: Variant;
begin
try
ExcelApp := CreateOleObject('Excel.Application');
Temp:=FileName;
CurrentBook:=ExcelApp.Workbooks.Add(Temp); //exception
......
end;
выпадает ошибка о ненайденном файле. Происходит это, только когда в имени открываемого файла присутствуют символы национальной раскладки (например 'D:\ИмяФайла.xls').
Тем не менее, при передаче в качестве параметра константы вида
CurrentBook:=ExcelApp.Workbooks.Add('D:\ИмяФайла.exe');
ошибка не возникает.
Использование StringToOleStr не помогло.
Причем, в сообщении excel-я имя файла представлено верно, без замены русских букв на '????'.
Проблема усугубляется еще тем, что ошибка возникает только на одной машине, у других пльзователей (их более чем 100) - всё в порядке.
Еще один немаловажный момент: приложение запускается в терминальной сессии 2003-го сервера.
Просьба натолкнуть на путь истинный.
С уважением,
BiN (2006-02-01 11:32:00) [1]Если кому интересно, вызов MultiByteToWideChar с заданием кодовой страницы 1251 и флагом MB_PRECOMPOSED решил проблему.
Всем еще раз спасибо.
Набережных С. (2006-02-01 08:40:00) [2]
> BiN © (31.01.06 21:29) [3]
> Пока что обхожу проблему, используя для ввода входного параметра
> метод ExcelApplication.GetOpenFilename вместо TOpenDialog-
> а. Вроде работает.
Работает - не трогай!
:)))
BiN (2006-01-31 21:29:00) [3]
> umbra © (31.01.06 19:24) [1]
>
> значит ли это, что у всех пользователей одинаковый оффис
> и они этот оффис пользуют на одной и той же ОС?
>
Да, Office у них одной версии (2002) и сервис-паки, кстати, тоже. Другое дело, что могли съехать региональные настройки, но, при осмотре паталогий не обнаружено.
> Набережных С. © (31.01.06 21:04) [2]
>
>
> > BiN © (31.01.06 17:34)
>
> Попробуй MultiByteToWideChar с явным заданием кодовой страницы.
>
Спасибо, попробую.
Пока что обхожу проблему, используя для ввода входного параметра метод ExcelApplication.GetOpenFilename вместо TOpenDialog-а. Вроде работает.
Набережных С. (2006-01-31 21:04:00) [4]
> BiN © (31.01.06 17:34)
Попробуй MultiByteToWideChar с явным заданием кодовой страницы.
umbra (2006-01-31 19:24:00) [5]2 BiN © (31.01.06 17:34)
первое, что приходит вголову - у этого конкретного клиента нет доступа к конкретному файлу-шаблону. Но, судя по
> Происходит это, только когда в имени открываемого файла
> присутствуют символы национальной раскладки
дело не в этом.
> приложение запускается в терминальной сессии 2003-го сервера
значит ли это, что у всех пользователей одинаковый оффис и они этот оффис пользуют на одной и той же ОС?