1

C# クラスから F# クラス ライブラリに渡された Excel ワークシートのデータを処理しようとしています。C# プロジェクトは Excel アドイン プロジェクトであり、F# クラスはこれです。

namespace DataLib
open System
open System.Reflection
open System.Collections.Generic
open FSharpx.TypeProviders.Excel
open Microsoft.FSharp.Core.CompilerServices
open System.IO
open System.Linq
open System.Text
open System.Windows.Forms
open Microsoft.Office.Core
open Microsoft.Office.Interop.Excel
open Microsoft.Office.Tools.Excel
type sheet = Microsoft.Office.Interop.Excel.Worksheet
type Class1() = 
    member this.X = "F#"
    member this.Readsheet (sh:obj)=
        let sht = sh:?>Worksheet// exception here
        let v=sh.Cells.[1,1] // Exception COM object does not have Cells property etc...
        sh.Range.Item(1,1).ToString() //error here ca

したがって、このように C# からクラスを呼び出すと

using DataLib;

public void useExcel(sh as Excel.Worksheet) //Excel.Worksheet is Excel Interop object
{
      Class1 one = new Class1()
      one.Readsheet(sh) //Exception thrown here in F# class
}
4

2 に答える 2

0

問題はもう少し複雑だと思います。Microsoft.Office.Tools.Excelフレームワークへの参照をF#ライブラリプロジェクトに追加しました。それはノーノーです!コンパイラエラーが発生します。F#では、VSTO C#プロジェクトの一部であるF#ライブラリを作成している場合は、F#ライブラリでもMicrosoft.Tools.Office.Excel名前空間を参照しないでください。そうしないと問題が発生します!したがって、Microsoft.Office.Interop.Excelアセンブリへの参照のみをプロジェクトに追加し、F#ファイルでMicrosoft.Office.Interop.Excelを開きます。

于 2012-12-20T21:39:19.427 に答える