Показать сообщение отдельно
Старый 19.12.2008, 12:52   #53  
Likefire is offline
Likefire
Заноза в заднице
Аватар для Likefire
MCBMSS
Лучший по профессии 2009
 
547 / 50 (3) ++++
Регистрация: 22.10.2007
Адрес: Москва
Записей в блоге: 1
Ещё одна интересная бага обнаружилась, связанная с локализацией офиса и используемой CurrentThread.CurrentCulture. Выглядит это так:

Использован старый формат, либо библиотека имеет неверный тип. (Исключение из HRESULT: 0x80028018 (TYPE_E_INVDATAREAD))

Скорее всего речь в несовместимости локализации и culture. Точного ответа и внятных объяснений на этот вопрос найти не удалось, однако есть некие строки, которые должны по идее исправить положение:
1. Присвоить CurrentCulture значение инвариатной CultureInfo до объявления класса приложения (Application) Interop.Excel (у меня это как раз-таки вызвало упомянутую выше ошибку, но только на ангельском языке) - что это дает, мне неведомо, а объяснения из MSDN на ангельском же языке до меня не очень доходят:

Код:
 
System.Threading.Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.InvariantCulture;

2. Точно указать используемую культуру. Для этого какминимум надо знать, какая культура нужна. Хотя скорее всего, речь о том, что тогда уж лучше в свойствах IIS задать значение необходимой культуры, хотя...

Код:
// перед объявлением класса приложения (Application) Interop.Excel:
System.Globalization.CultureInfo oldCI = System.Threading.Thread.CurrentThread.CurrentCulture;
    System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US");
//...
// <выполнение процедур с данными excel>
// ...
// после строки "currApp.Workbooks.Close();":
System.Threading.Thread.CurrentThread.CurrentCulture = oldCI;
__________________
Лень мудрого человека - это необходимое средство нейтрализации кипучей активности руководящих им дураков!