私はここで知恵の限界に来ており、それほど複雑であってはならないことをしようとして 1 日を失いました。
Sybase クエリから返された Recordset があります。このレコードセットは、Excel でピボットテーブルを作成するために使用されました。ここまでは順調ですね。ピボットテーブルの値を変更したいので、新しい値を使用してレコードセット内の特定のレコードを更新します。RS で問題なく更新を行うことができ、値は次回反復するときに RS に保存されます。
問題は、値がピボット テーブルに反映されないことです。私が試してみました:
pivotTable.Refresh();
- COMException: PivotTable クラスの RefreshTable メソッドが失敗しました
pivotTable.PivotCache().Refresh();
- ComException: HRESULT からの例外: 0x800A03EC
pivotTable.Update();
- 例外ではありませんが、変更はピボット テーブルに反映されません。
また、レコードセットのクローンを作成し、そこからまったく新しいピボット テーブルを作成しようとしましたが、Recordset
データが含まれていますが、PivotCache.RecordCount
0 です
コード:
var app = ExcelAppHelper.GetExcelApp();
if (app.ActiveCell == null || app.ActiveCell.PivotTable == null)
return;
PivotTable pivotTable = app.ActiveCell.PivotTable;
var rs = (Recordset)pivotTable.PivotCache().Recordset;
rs.MoveFirst();
s_lastSelectedPivotTree = new PivotFilterTree();
RecalculateSelectedValues(vmMain);
while (!rs.EOF)
{
if (s_lastSelectedPivotTree.Contains(rs.Fields))
{
foreach (var dataFieldName in s_lastSelectedDataFields)
{
// update the values in the RS
rs.Fields[dataFieldName].Value = newValue;
}
// commit the modifications into the RS
rs.Update(Type.Missing, Type.Missing);
}
rs.MoveNext();
}
rs.MoveFirst();
// here is the magic line that will show me the updated pivot table
pivotTable.Update();
誰でもこれを行う方法を知っていますか? レコードセットを変更してからピボット テーブルを「更新」し、レコードセットに基づいてピボット テーブルを再計算します。
ありがとうショーン