作成日: 2018/11/02 最終更新日: 2018/12/18
文書種別
不具合
状況
修正済み
詳細
■事象
VLOOKUP関数(またはHLOOKUP関数)で、外部データにデータ連結している(DataSourceプロパティにデータオブジェクトを設定している)SPREADを参照すると、
検索対象に該当するデータが含まれていても、正しい検索結果を返しません(数式が設定されたセルに値が表示されません。)
■サンプルコード(C#)
VLOOKUP関数(またはHLOOKUP関数)で、外部データにデータ連結している(DataSourceプロパティにデータオブジェクトを設定している)SPREADを参照すると、
検索対象に該当するデータが含まれていても、正しい検索結果を返しません(数式が設定されたセルに値が表示されません。)
■サンプルコード(C#)
private void Form1_Load(object sender, EventArgs e)
{
//サンプル用DataTableを作成します。
DataTable dt = new DataTable("Employees");
dt.Columns.Add("test1", typeof(string));
dt.Columns.Add("test2", typeof(string));
dt.Rows.Add("0001", "DATA_0001");
dt.Rows.Add("0002", "DATA_0002");
// VLOOKUP参照用のシートを追加し、シート名を変更します。
fpSpread1.Sheets.Count = 2;
fpSpread1.Sheets[1].SheetName = "MST";
// 作成したDataTableを上記シートに連結します。
fpSpread1.Sheets["MST"].DataSource = dt;
// VLOOKUP関数を設定します。
fpSpread1.ActiveSheet = fpSpread1.Sheets[0];
fpSpread1.ActiveSheet.Cells[0, 1, 10, 1].Formula = "IF(A1=¥"¥",¥"¥",VLOOKUP(A1,MST!$A$1:$B$2,2,FALSE))";
// VLOOKUP関数が参照するセルのセル型を設定します。
var tcell = new FarPoint.Win.Spread.CellType.TextCellType();
fpSpread1.ActiveSheet.Columns[0].CellType = tcell;
}
{
//サンプル用DataTableを作成します。
DataTable dt = new DataTable("Employees");
dt.Columns.Add("test1", typeof(string));
dt.Columns.Add("test2", typeof(string));
dt.Rows.Add("0001", "DATA_0001");
dt.Rows.Add("0002", "DATA_0002");
// VLOOKUP参照用のシートを追加し、シート名を変更します。
fpSpread1.Sheets.Count = 2;
fpSpread1.Sheets[1].SheetName = "MST";
// 作成したDataTableを上記シートに連結します。
fpSpread1.Sheets["MST"].DataSource = dt;
// VLOOKUP関数を設定します。
fpSpread1.ActiveSheet = fpSpread1.Sheets[0];
fpSpread1.ActiveSheet.Cells[0, 1, 10, 1].Formula = "IF(A1=¥"¥",¥"¥",VLOOKUP(A1,MST!$A$1:$B$2,2,FALSE))";
// VLOOKUP関数が参照するセルのセル型を設定します。
var tcell = new FarPoint.Win.Spread.CellType.TextCellType();
fpSpread1.ActiveSheet.Columns[0].CellType = tcell;
}
回避方法
Service Pack 2(v11.0.4503.2012)で修正済み。
Service Pack 2を適用せずに対処する方法としては、シートのDataSourceプロパティにデータオブジェクト(DataTable)を直接設定するのではなく、SpreadDataBindingAdapterを使用する方法が有効です。
上記のサンプルコードの場合、データ連結部分を以下のように変更します。
■サンプルコード(C#)
Service Pack 2を適用せずに対処する方法としては、シートのDataSourceプロパティにデータオブジェクト(DataTable)を直接設定するのではなく、SpreadDataBindingAdapterを使用する方法が有効です。
上記のサンプルコードの場合、データ連結部分を以下のように変更します。
■サンプルコード(C#)
//fpSpread1.Sheets["MST"].DataSource = dt;
// ↓
var data = new FarPoint.Win.Spread.Data.SpreadDataBindingAdapter();
data.DataSource = dt;
data.Spread = fpSpread1;
data.SheetName = "MST";
data.MapperInfo = new FarPoint.Win.Spread.Data.MapperInfo(0, 0, dt.Rows.Count, dt.Columns.Count);
data.FillSpreadDataByDataSource();
fpSpread1.Sheets["MST"].RowCount = dt.Rows.Count;
fpSpread1.Sheets["MST"].ColumnCount = dt.Columns.Count;
// ↓
var data = new FarPoint.Win.Spread.Data.SpreadDataBindingAdapter();
data.DataSource = dt;
data.Spread = fpSpread1;
data.SheetName = "MST";
data.MapperInfo = new FarPoint.Win.Spread.Data.MapperInfo(0, 0, dt.Rows.Count, dt.Columns.Count);
data.FillSpreadDataByDataSource();
fpSpread1.Sheets["MST"].RowCount = dt.Rows.Count;
fpSpread1.Sheets["MST"].ColumnCount = dt.Columns.Count;
旧文書番号
83364