私のT4テンプレートは、Excel COMオブジェクトをインスタンス化して、いくつかのセル値を読み取り、それらからC#クラスを作成します。最初にExcelの読み取りロジックを通常のC#で記述しましたが、これは正常に機能します。このテストで使用するコードスニペットは次のとおりです。
Worksheet xlWorkSheet;
string cellContents = xlWorkSheet.Cells.Item[1, 1].Value;
ただし、テストコードをT4テンプレートに移植することはできません。次のエラーが表示されます。
Error 1: Compiling transformation: 'object' does not contain a definition for 'Value' and no extension method 'Value' accepting a first argument of type 'object' could be found (are you missing a using directive or an assembly reference?)
これを解決する唯一の方法は、手動キャストを追加することです。
string cellContents = (xlWorkSheet.Cells.Item[1, 1] as Range).Value as string;
T4は「通常の」C#コンパイラを使用しているため、通常のコードと同じように動的バインディングを処理できるという印象を受けました。しかし、どうやら、違いがあります。この場合、どのタイプにキャストするかを推測できたので、問題を解決できました。しかし、一般的にはそうではありません。この遅延バインディングをT4テンプレートで機能させる方法はありますか?