Excel の自動化で解決できない問題があります。「外部データのインポート」機能を模倣したい。インポート用に複数のデータベーステーブルを選択すると、フラットテーブルではすでに完全に機能しますが、ピボットテーブルでは機能しません。
手動の方法
外部キー (トランザクション テーブルの「アカウント」) でリンクされた 2 つのテーブル (アカウントとトランザクション) を持つ Access データベースがあります。両方をすぐにピボットテーブルにインポートしたい。通常は、[データ] -> [外部データ] をクリックし、ダイアログで両方のテーブルを選択し、[ピボットテーブル レポート] を選択して [OK] をクリックします。これで、ピボットテーブルがアクティブ シートに表示され、右側に、インポートされたテーブルの階層内のすべてのフィールドを提供するフィールド リストが表示されます。
これは、前述のデータベース ファイルで模倣したいものです。誰でもこれがどのように機能するか考えていますか?
私が試したこと
不完全で欠陥のあるコードを記録するため、マクロを記録して適応させようとしましたが、役に立ちませんでした。記録されたコードにはデータ モデルの作成が含まれていないため不完全ですが、それは明らかに必要です (?)。コードが実行されないため欠陥があり、構文が正しくありません。
次のように、1 つのデータベース テーブルからピボットテーブルを正常に作成できます。
Excel.PivotCaches pivotCaches = workbook.PivotCaches();
Excel.PivotCache pivotCache = pivotCaches.Create(Excel.XlPivotTableSourceType.xlExternal,
Type.Missing, Type.Missing);
pivotCache.Connection = conStr;
pivotCache.MaintainConnection = true;
pivotCache.CommandText = "Accounts";
pivotCache.CommandType = Excel.XlCmdType.xlCmdTable;
Excel.PivotTables pivotTables = sheet.PivotTables();
Excel.PivotTable pivotTable = pivotTables.Add(pivotCache, sheet.get_Range("A3", "C20"), "Pivot", Type.Missing, Type.Missing);
しかし、複数のデータベース テーブルを取得しようとした多くの試行のそれぞれで失敗します。
複数のテーブルに行く方法は何ですか?
テーブル名と結合フィールドを必ずしも知っているとは限りません。さらに、テーブル間の区別を失いたくないので、フィールドの階層選択のためにピボットテーブル フィールド リストに保存する必要があります。さらに、キャッチオール SQL クエリは、パフォーマンスを著しく低下させます。
私を助けてください!
PS: 私は Office 2013 を使用しており、選択した言語は C# です。
/edit1: 後で、データベース テーブルが変更された場合 (手動で更新を呼び出す)、ピボットテーブルも更新する必要があります。
/edit2: 複数のワークシートがフィールド リストに個別に表示される限り、複数のワークシートをピボットテーブルのソースとして使用する方法にも完全に満足しています。