2017-02-01 8 views
1

以前の開発者からプロジェクトを継承し、コードを調整しています。残念ながら、彼がやったやり方は、私の新しい要求のために働かないだろう。VSTO Excelをデータセット(.XSD)にバインドする方法

私はXSD(C#Datasetオブジェクト)を作成し、データベースから埋めました。 データが実際にデータベースから取得されていることを確認し、データセットに入力します。

データセットをシート全体にバインドしてデータを表示する最適な方法は何ですか。私はリストオブジェクトや他のコントロールにデータセットをバインドする方法の多くのオンラインの例を見てきましたが、単純にExcelシートにダンプするのはどうでしょう。データソースを設定するためにワークブック/ワークシートへの参照を取得するにはどうすればよいですか。

+0

への私の応答は、私がデータソースとしてデータセットに設定することができます任意のシートのプロパティ、またはワークブックがあります参照しますか、これは本当にそれを行う方法です。 – logixologist

答えて

1

バインディングはWPFまたはWinFormsの経験に基づいて、相対的な用語で、より良い方法は、混乱を避けるために、代わりにを抽出とを公開と考えることであり得ます。


方法

あなただけがデータを知っているが、データの行と列が含まれます配列へデータをループするために最善。

アレイが完成したら、ページに公開します。ここに私が使用した基本コードがあります。


public static int LastRow { get; set; } 
public static int LastColumn { get; set; } 

public static void PublishToSheet(this WorksheetBase theSheet, 
            int startRow, 
            int startColumn, 
            ref string[,] OutputArray) 
{ 

    var totalRows = OutputArray.GetLength(0); 
    var maxColumns = OutputArray.GetLength(1); 

    var range = theSheet.Range[theSheet.Cells[startRow, startColumn], 
           theSheet.Cells[startRow + totalRows - 1, 
               startColumn + maxColumns - 1] 
           ]; 
    range.NumberFormat = "@"; 
    range.Value2 = OutputArray; 

    LastRow = totalRows; 
    LastColumn = maxColumns; 

} 

私は、私は、さらに他のデータのページで作業できるようにするためにLastRowLastColumnの性質を持っているが追加する必要があります。データを抽出するために

使用

string[,] OutputArray = new string[2, 2]; 

OutputArray[0, 0] = "Alpha"; 
OutputArray[0, 1] = "Beta"; 
OutputArray[1, 0] = "Gamma"; 
OutputArray[1, 1] = "Delta"; 

this.PublishToSheet(10, 4, ref OutputArray); 

How to best fetch a cell value from excel using VSTO?

+0

ありがとうございます。私はこのようにそれを調べます。 – logixologist

関連する問題