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

две вещи:

TableRange1 не включает в себя заголовок сводной таблицы, так вот почему вы получаете «не может изменить» ошибку. Используйте TableRange2 для выбора всей сводной таблицы.

Кроме того, вы не можете делать PasteSpecial на Cut, поэтому используйте аргумент Destination метода Cut. Вот как это будет выглядеть в VB:

pivotTable.TableRange2.Cut Destination:=NewRange 
+0

Привет, спасибо за ответ. К сожалению, он по-прежнему падает с той же ошибкой. Пробовал делать range.cut (destination), range.copy (missing) + range.delete (отсутствует) + workheet.paste (newRange) и до сих пор не повезло. –

+0

Вы так не говорите, но я предполагаю, что вы также попробовали TableRange2. Я бы попробовал его с простым диапазоном, например «Activesheet.Range (« A1 »)». Кроме того, вы указали две ошибки в исходном вопросе. Пожалуйста, будьте более конкретными. –

+0

Я пробовал широкий спектр решений этой проблемы и на протяжении всего тестирования, я наткнулся на «невозможно изменить сводную таблицу». что один из них произошел один раз, и я не совсем помню, как его воспроизводить, но я помню, что сообщение было в том же духе. вторая ошибка - это «отказ метода объекта». Опять же, я довольно уверен, что это сообщение об ошибке (оно появляется на французском языке, так что это правильный перевод с английского сообщения, которое я считаю). Наконец, я попытался выполнить TableRange2 без успеха. Я попробую с простым диапазоном, как вы предлагаете –

Смежные вопросы