サーバーにアップロードするために、特定の形式のテスト ケースのリストから Excel シートを作成する必要があります。ファイルに「予想」と「実際」の2次元範囲を入力するのに苦労しました。同じメソッドを使用して、ヘッダー (1 次元配列) とステップ (2 次元配列) を設定します。
フローは次のとおりです。
- TestCase 範囲 (いくつかのヘッダー + ステップ) の資金を回収します。たとえば、最初の反復では A1 から E14 です。
- ヘッダーの testCase 範囲内のサブ (ローカル) 範囲を削除します (例: A1 から C1)。
- ヘッダーの testCase 範囲内の別のサブ (ローカル) 範囲を削除します (私の場合: D1 から E14)。
- 2 つのサブ範囲にテスト ケースの値 (ヘッダーとステップ) を設定します。
- 次のスプレッドシートの範囲 (私の場合は A14 から E28) を同じローカルの範囲 (ステップ 2 ~ 3) で払い戻すことで繰り返し、それらを入力します。
ソース値は、テストケースのステップを表す Dictionary です (キー = 予期され、値 = 実際)。
私が使用するコードは次のとおりです。
public class TestCase
{
public Dictionary<string, string> steps;
}
Microsoft.Office.Interop.Excel.Application excelApp = new Microsoft.Office.Interop.Excel.Application();
Workbooks workBooks = excelApp.Workbooks;
Workbook workbook = workBooks.Add(XlWBATemplate.xlWBATWorksheet);
Worksheet worksheet = (Worksheet)workbook.Worksheets[1];
excelApp.Visible = true;
foreach (TestCase testCase in TestCaseList.Items.GetList())
{
Range worksheetRange = GetRangeForTestCase(worksheet);
//The step above is equivalent to:
// Range worksheetRange = worksheet.get_Range("A1", "E14");
//for the first foreach iteration.
Range stepsRange = worksheetRange.get_Range("D1", "E14");
//This is a local range within the worksheetRange, not the worksheet,
//so it is always have to be between D1 to E14 for a 14th steps test case.
//Anyway, it should work at least for the 1st iteration.
//for test evaluation only. All cells between D1 to E14 are filled with "ccc"
test.Value = "ccc";
//This list of pairs which are converted to Array[,] is about to be converted to a two dimensional array
list = new List<object>();
foreach (KeyValuePair<string, string> item in testCase.Steps)
{
//Here I build the inside Array[,]
object[] tempArgs = {item.Key, item.Value};
list.Add(tempArgs);
}
object[] args = { Type.Missing, list.ToArray() };
test.GetType().InvokeMember("Value", System.Reflection.BindingFlags.SetProperty, null, test, args);
//Now, all the "ccc" within the Excel worksheet are disapeared, so the Range is correct, but the value of args[] are not set!!
}
このコードを実行した実際の結果は、範囲が定義されている (おそらく正しく) ことですが、その値は null に設定されていますが、実行時に args 配列に正しい値が表示されます。また、より広い範囲を設定して range.Value = "Pake value" を入力しようとしましたが、コードの平和を実行した後、ステップの正しい範囲が空白になることがわかりました! したがって、範囲は正しく、配列には値が入力され、InvokeMember メソッドは正しく呼び出されます :) しかし、すべての値が null に設定されています..
ヘルプ...