【问题标题】:C# Excel VSTO - Possible to move a pivottable?C# Excel VSTO - 可以移动数据透视表吗?
【发布时间】:2012-01-23 18:49:32
【问题描述】:

我正在尝试在 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 失败。 - 类似于无法修改数据透视表的内容。

有人做过吗?他们能否确认这确实可行或不可行?有示例代码吗?

非常感谢, 肖恩

【问题讨论】:

  • 你用什么库来操作excel表格?

标签: c# excel vsto paste pivot-table


【解决方案1】:

两件事:

TableRange1 不包含数据透视表的标题,这就是您收到“无法修改”错误的原因。使用 TableRange2 选择整个数据透视表。

此外,您不能对 Cut 执行 PasteSpecial,因此只需使用 Cut 方法的 Destination 参数。这就是它在 VB 中的样子:

pivotTable.TableRange2.Cut Destination:=NewRange

【讨论】:

  • 您好,感谢您的回答。不幸的是,它仍然因同样的错误而崩溃。尝试做 range.cut(destination), range.copy(missing) + range.delete(missing) + worksheet.paste(newRange) 仍然没有运气。
  • 您没有这么说,但我假设您也尝试过 TableRange2。我会尝试使用简单的范围,例如“Activesheet.Range("A1")”。此外,您在原始问题中列出了两个错误。请更具体。
  • 我尝试了多种解决方案来解决这个问题,在整个测试过程中,我偶然发现了“无法修改数据透视表”。那件事发生过一次,我不太记得如何重现它,但我记得信息是沿着这些路线的。第二个错误是“对象的方法切割失败”。再一次,我很担心这是错误消息(它以法语出现,所以我相信这是英文消息的正确翻译)。最后,我确实尝试了 TableRange2,但没有成功。我会像你建议的那样尝试一个简单的范围
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多