C # Excel VSTO - можно переместить сводную таблицу? - PullRequest
2 голосов
/ 19 декабря 2011

Я пытаюсь переместить сводную таблицу в 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 не удалось.- Что-то вроде того, что невозможно изменить сводную таблицу.

Кто-нибудь когда-нибудь делал это?Могут ли они подтвердить, что это действительно возможно или нет?Любой пример кода?

Большое спасибо, Шон

1 Ответ

2 голосов
/ 20 декабря 2011

Две вещи:

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

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

pivotTable.TableRange2.Cut Destination:=NewRange
...