Ещё одна интересная бага обнаружилась, связанная с локализацией офиса и используемой
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;