2011-12-19 4 views
2

VSTOでピボットテーブルを移動しようとしましたが、まったく成功しません。私の論理は、ピボットテーブルの範囲を見つけてカットし、ワークシート上にデータが存在しないと確信する新しい範囲に貼り付けることでした。C#Excel VSTO - ピボットテーブルを移動することはできますか?

public static void MovePivotTable(string sheetName, PivotTable pivotTable, int newX, int newY, int width, int height) 
    { 
     try 
     { 
      Worksheet worksheet = GetOrCreateWorksheet(sheetName); 

      Range topLeft = (Range)worksheet.Cells[newX, newY]; 
      Range bottomRight = (Range)worksheet.Cells[newX + width, newY + height]; 
      Range newRange = worksheet.get_Range(topLeft, bottomRight); 

      pivotTable.TableRange1.Cut(Missing.Value); 

      newRange.PasteSpecial(XlPasteType.xlPasteAll, XlPasteSpecialOperation.xlPasteSpecialOperationNone, 
       Missing.Value, Missing.Value); 

      return; 
     } 
     catch (Exception) 
     { 
     } 
     finally 
     { 
     } 
    } 

ただし、私はいつも例外が発生します。どちらか: - PasteSpecialに失敗しました。 - 行に沿って、ピボットテーブルを変更できないことがあります。

これまで行ったことがありますか?彼らはこれが本当に可能であるかどうかを確認できますか?任意のサンプルコード?

多くのおかげで、 ショーン

+0

どのライブラリでExcelシートを操作していますか? –

+0

@EmmanuelNそのVSTO。 –

答えて

2

2つのこと:あなたが「変更することはできません」というエラーを取得している理由ですので

TableRange1は、ピボットテーブルのヘッダーが含まれていません。 TableRange2を使用してピボットテーブル全体を選択します。

また、CutではPasteSpecialを実行できないため、CutメソッドのDestination引数を使用してください。これはVBでどのように見えるかです:

pivotTable.TableRange2.Cut Destination:=NewRange 
+0

こんにちは、お返事ありがとうございます。残念ながら、それは同じエラーでクラッシュします。 range.cut(destination)、range.copy(missing)+ range.delete(missing)+ worksheet.paste(newRange)を実行しようとしましたが、まだ運がありません。 –

+0

あなたはそう言っていませんが、あなたもTableRange2を試したと思います。 Activesheet.Range( "A1") "のような単純な範囲で試してみます。また、元の質問に2つのエラーを記載しました。より具体的にしてください。 –

+0

私はこの問題の解決策を幅広く試していましたが、テスト中、「ピボットテーブルを変更することは不可能です」と言われました。 1回起こったと私はかなりrepropduceする方法を思い出さないが、私はメッセージがそれらの行に沿っていたことを思い出してください。 2番目のエラーは「オブジェクトのメソッド切断」です。再び、私はこれがエラーメッセージ(フランス語で表示されるので、私が信じる英語のメッセージから正しい翻訳になっている)であることを確信しています。最後に、私は成功なしでTableRange2を試しました。あなたが提案するような簡単な範囲で試してみる –

関連する問題