1

アセンブリを動的にロードする必要があります。現在、「Microsoft.Office.Microsoft.Office.Interop.dll」を使用しています。Excelファイルを開いて、そこからシートとデータを取得する必要があります。どうすればそれができるか教えてもらえますか?

Assembly SampleAssembly = Assembly
          .Load("Microsoft.Office.Interop.Excel, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c");

if (SampleAssembly != null)
{
    Type type = SampleAssembly.GetType("Microsoft.Office.Interop.Excel.ApplicationClass");
    Object AppClass = Activator.CreateInstance(type);

   //How will I get ApplicationClass object and Workbooks objects here?
}
4

4 に答える 4

3

活用するdynamic:

 Type type = SampleAssembly.GetTypes().Single(t => t.Name == "ApplicationClass");
 dynamic appClass = Activator.CreateInstance(type);

 var workbook = appClass.Workbooks.Open("C:\\test.csv");
 var worksheet = workbook.Worksheets[1];
于 2012-09-27T05:02:08.403 に答える
2

ダイナミクスを使用できない/使用したくない場合は、使用する必要のあるExcelメソッド/オブジェクトを公開し、参照せずにコードで参照できるインターフェイス(またはインターフェイスのセット)を使用してプロジェクトを定義します。実際のExceldll。次に、Excelを参照し、動的に読み込まれる別のプロジェクトに実装します。

このようなもの:

public interface IExcelApp
{
    IExcelWorkbook OpenWbk(string aPath);
    // other stuff
}

public interface IExcelWorkbook
{
    //the stuff you need
}

実装(たとえばExcelBridgeと呼んだプロジェクト):

public class ExcelApp : IExcelApp
{
    private ApplicationClass _app;

    public ExcelApp()
    {
    }

    public IExcelWorkbook OpenWbk(string aPath)
    {
        return new ExcelWorkbook(_app.Workbooks.Open(aPath));
    }
}

public class ExcelWorkbook : IExcelWorkbook
{
    private Workbook _wbk;

    public ExcelWorkbook(Workbook aWbk)
    {
        _wbk = aWbk;
    }
}

次に、コードは次のようになります。

Assembly SampleAssembly = Assembly.Load("ExcelBridge", Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c");

if (SampleAssembly != null)
{
    Assembly YourExcelAssembly = Assembly.Load("ExcelBridge.dll");
    Type type = YourExcelAssembly .GetType("ExcelApp");
    IExcel AppClass = Activator.CreateInstance(type) as IExcelApp;

   //now you can write:
   IExcelWorkBook aWbk = AppClass.Open("your xls path");
}
于 2012-09-27T08:17:42.380 に答える
0

C# で行う方法は次のとおりです。

using Microsoft.Office.Interop.Excel;
Type type = SampleAssembly.GetType("Microsoft.Office.Interop.Excel.ApplicationClass");
var application = Activator.CreateInstance(type);
var workbook = application.Workbooks.Open(fileName);
var worksheet = workbook.Worksheets[1] as Microsoft.Office.Interop.Excel.Worksheet;
于 2012-09-27T04:25:56.650 に答える