-
Magedon © (15.05.07 11:57) [0]Это такое сообщение Ехсель выдает.
вот код
procedure TMSOfficePlug.OnConnection(const HostApp: IDispatch;
ext_ConnectMode: Integer; const AddInInst: IDispatch;
var custom: PSafeArray);
begin
FIExcel := HostApp as ExcelApplication;
...
FIExcel.DisplayAlerts[LCID] := False;// Здесь вылетает
//и потом любое другое обращение к FIExcel вызывает ошибку
//Потом Ексел умирает
Стоит у меня:
оффис 2000 (9.0.2720)
Делфа 6
Пытался использовать как делфовые компоненты так и импортировал через Import type library - результат один: с вордом все работает с екселем вылетает такое сообщение "использован старый формат, либо библиотека имеет неверный тип"
Пытался гуглить тему - ссылок много, но конкретных ответов не нашел. Так же есть много битых.
Возможно если бы знал английский вариант фразы мог бы найти побольше.
ПОДСКАЖИТЕ ЛЮДИ ДОБРЫЕ ЧТО ЭТО ТАКОЕ И КАК С ЭТИМ БОРОТЬСЯ -
clickmaker © (15.05.07 12:04) [1]uses Excel2000.pas?
-
Magedon © (15.05.07 12:09) [2]И Excel2000.pas и Excel_TLB.pas - не работает
-
Magedon © (15.05.07 12:44) [3]Ага, нашел вроде бы где собака порылась - у меня русский виндовз и англицкий екселя.(http://support.microsoft.com/default.aspx?scid=kb;EN-US;q320369)
Только вот я не знаю на каких компьютерах будет работать мой код.
Возможны различные комбинации типа индийцы на китайской винде с хебрюшным екселем.
Вопрос тогда изменяется:
Как узнать отличается ли локаль юзера от версии Екселя?
Да еще один вопрос как будет по делфиски следующее:
Dim oldCI As System.Globalization.CultureInfo = _
System.Threading.Thread.CurrentThread.CurrentCulture
System.Threading.Thread.CurrentThread.CurrentCulture = _
New System.Globalization.CultureInfo("en-US")
...
System.Threading.Thread.CurrentThread.CurrentCulture = oldCI -
clickmaker © (15.05.07 13:17) [4]так тебе наверно MAKELCID нужен?
(sortid shl 16) or langid -
Magedon © (15.05.07 15:08) [5]Я юзаю GetUserDefaultLCID. Видел где-то в примере.
А вот как узнать локаль требуемую для Екселя -
Application.International(xlCountryCode)
? -
Magedon © (15.05.07 16:33) [7]нет, не работает
-
Magedon © (16.05.07 13:59) [8]Как получить версию Excel нашел:
if XL.LanguageSettings.LanguageID[msoLanguageIDUI] = 1049
{или $0419}
then { Excel имеет русский интерфейс пользователя };
Английская версия Excel (English United States) вернет 1033 (или $0409), немецкая (German Standard) - $0407. Значения соответствуют LCID, описанным в MS SDK Help "Language Identifiers".
Вот только осталось понять как по делфийски будет
Dim oldCI As System.Globalization.CultureInfo = _
System.Threading.Thread.CurrentThread.CurrentCulture
System.Threading.Thread.CurrentThread.CurrentCulture = _
New System.Globalization.CultureInfo("en-US")
...
System.Threading.Thread.CurrentThread.CurrentCulture = oldCI -
clickmaker © (16.05.07 14:29) [9]SetThreadLocale(), что-ли?
а зачем это для екселя, если там явно LCID фигурирует? -
Magedon © (16.05.07 16:13) [10]Заработало так
...
private
FExcelLanguageID: integer;
...
procedure TMSOfficePlug.OnConnection(const HostApp: IDispatch;
ext_ConnectMode: Integer; const AddInInst: IDispatch;
var custom: PSafeArray);
begin
FIExcel := HostApp as ExcelApplication;
FExcelLanguageID := FIExcel.LanguageSettings.LanguageID[msoLanguageIDUI];
...
FIExcel.DisplayAlerts[FExcelLanguageID ] := False;// Теперь все работает
СПАСИБО ЗА ОТВЕТЫ -
имя(23.03.09 21:34) [11]Удалено модератором -
имя(23.03.09 21:34) [12]Удалено модератором