[C#->Excel] Как заставить работать метод AddPicture с Office200

MICH51

Необходимо на C# написать экспорт данных из БД в файл Excel. В числе прочего экспортируются картинки (файлы *.jpg). Экспорт картинок осуществляется с помощью метода AddPicture. Проблема в том, что реализация AddPicture различна для Office 2000 и 2003.
Так для Office 2000 сигнатура метода следующая:
expression.AddPicture(FileName, LinkToFile, SaveWithDocument, Left, Top, Width, Height)

где LinkToFile и SaveWithDocument переменные типа LONG.
Для Office 2003 на первый взгляд то же:
expression.AddPicture(FileName, LinkToFile, SaveWithDocument, Left, Top, Width, Height)

но LinkToFile и SaveWithDocument уже переменные типа MsoTriState!
Итого:
Excel.Worksheet) xl.Worksheets[1]).Shapes.AddPicture(strDir, 
Microsoft.Office.Core.MsoTriState.msoTrue, Microsoft.Office.Core.MsoTriState.msoTrue,
iLeft, iTop, iWidth, iHeight);

прекрасно работает на компьютере на котором установлен Office 2003, но вылетает с ошибкой на компьютере с Office 2000 (данное исключение даже не ловится try...catch).
Как можно написать процедуру экспорта картинок не зависящую от установленного пакета Office?

klyv

может, анализировать Excel.Application.Version?

MICH51

Я продумывал и пробовал такой вариант, но дело в том, что даже если выяснить версию установленного Офиса и попытаться разнести соответствующие вызовы в if ... else ..., то такую конструкцию просто не пропускает компилятор. Говорит как обычно в этих случаях, типа "не могу привести тип Long к типу MsoTriState".
А может кто знает как отключить проверку соответствия типов компилятором? Хотя бы для одного оператора?

Fragaria

MsoTriState
True, False, IDontKnow? :)

pitrik2

русские прогеры что ли писали?
Tri вместо Three

Fragaria

Tri - это не от русского.
Это от латинского triplus - тройной.

Andbar

Варианта два: либо собирать отдельно куски кода, вызывающие функции для разных версий офиса, либо (имхо, предпочтительный вариант) использовать позднее связывание.
Мне последний способ не раз приходилось использовать при вызове некоторых функций из-под Delphi, т.к. они попросту нормально не работают. Там это делается через приведение типа к OLEVariant.
Оставить комментарий
Имя или ник:
Комментарий: