数据透视表手动更新不起作用

2023-12-08

我有一个数据透视表,我试图根据数组中的值选择某些数据透视项。我需要这个过程更快,所以我尝试使用 application.calculation = xlcalculationmanual 和pivottables.manualupdate = true,但似乎都不起作用;每次我更改数据透视项时,数据透视表仍然会重新计算。

我可以采取不同的措施来防止 Excel 每次重新计算吗?

这是我的代码:

Application.Calculation = xlCalculationManual

'code to fill array with list of companies goes here    

dim PT As Excel.PivotTable
Set PT = Sheets("LE Pivot Table").PivotTables("PivotTable1")

Sheets("LE Pivot Table").PivotTables("PivotTable1").ManualUpdate = True

dim pivItem As PivotItem

'compare pivot items to array.  If pivot item matches an element of the array, make it visible=true, otherwise, make it visible=false
For Each pivItem In PT.PivotFields("company").PivotItems
    pivItem.Visible = False 'initially make item unchecked
    For Each company In ArrayOfCompanies()
        If pivItem.Value = company Then
            pivItem.Visible = True
        End If
    Next company
Next pivItem

数据透视表.手动更新 [ = 设置 ]
True 会导致 RefreshTable 从数据透视表中清除数据,而不是刷新它
False 允许 RefreshTable 正常工作。
默认值为 False。
调用过程结束后该属性自动重置为 False (重要的)

在进行更新之前应将此属性设置为 true(例如更改数据透视项 Visible 属性)
下面是一些用 C# 编写的代码作为示例:

    private void FilterByPivotItems(PivotField pf, List<string> pivotItemNames)
    {
        PivotItems pis = pf.ChildItems;

        if (pf.Orientation != 0)
        {
            int oldAutoSortOrder = 0;

            if (pf.AutoSortOrder != (int)Constants.xlManual)
            {
                oldAutoSortOrder = pf.AutoSortOrder;
                pf.AutoSort((int)Constants.xlManual, pf.Name);
            }

            int pivotItemsCount = pf.PivotItems().Count;

            for (int i = 1; i <= pivotItemsCount; i++)
            {
                PivotItem pi = pf.PivotItems(i);

                // check if current pivot item needs to be hidden (if it exists in pivotItemNames)
                var match = pivotItemNames.FirstOrDefault(stringToCheck => stringToCheck.Equals(pi.Value));

                if (match == null)
                {
                    TryFilterPivotItems(pi, false, true);
                }
                else
                {
                    TryFilterPivotItems(pi, true, true);
                }
            }

            if (oldAutoSortOrder != 0)
            {
                pf.AutoSort(oldAutoSortOrder, pf.Name);
            }

            PivotTable pt = pf.Parent as PivotTable;
            if (pt != null)
            {
                // changing a pivot item triggers pivot table update
                // so a refresh should be avoided cause it takes a lot and is unnecessary in this case
                pt.Update();
            }
        }
    }

    private void TryFilterPivotItems(PivotItem currentPI, bool filterValue, bool deferLayoutUpdate = false)
    {
        try
        {
            PivotField pf = currentPI.Parent;
            PivotTable pt = pf.Parent as PivotTable;

            if (currentPI.Visible != filterValue)
            {
                if (deferLayoutUpdate == true && pt != null)
                {
                    // just keep these three lines stick together, no if, no nothing (otherwise ManualUpdate will reset back to false)
                    pt.ManualUpdate = true;
                    currentPI.Visible = filterValue;

                    // this may be redundant since setting Visible property of pivot item, resets ManualUpdate to false
                    pt.ManualUpdate = false;
                }
                else
                {
                    currentPI.Visible = filterValue;
                }
            }
        }
        catch (Exception ex)
        {

        }
    }

    private void TryFilterPivotItems(PivotField pf, string itemValue, bool filterValue, bool deferLayoutUpdate = false)
    {
        try
        {
            PivotItem currentPI = pf.PivotItems(itemValue);
            TryFilterPivotItems(currentPI, filterValue, deferLayoutUpdate);
        }
        catch (Exception ex)
        {

        }
    }

总之,ManualUpdate 属性更改不会持续很长时间(在我的测试中,我可以看到它会尽快重置为 false,因此我建议您在想要进行更改时将其设置为 true对于枢轴项目)

有关 Excel 中更新含义的更多信息,您可以检查以下内容:
枢轴刷新与更新——有真正的区别吗?

参考:
Title: 使用 VBA 和 .NET 进行 Excel 编程
By: 杰夫·韦伯,史蒂夫·桑德斯
打印 ISBN:978-0-596-00766-9|国际标准书号 10:0-596-00766-3
电子书 ISBN:978-0-596-15951-1|国际标准书号 10:0-596-15951-X

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数据透视表手动更新不起作用 的相关文章

随机推荐

  • 将 CString 转换为 CTime

    In 智能设备MFC应用 我已成功转换CTime to CString 现在我想把它转换回来 CString to CTime 我怎样才能做到这一点 Use COleDateTime ParseDateTime CString 然后将其转换
  • PrimeFaces 数据表滚动条位于所需位置

    当我添加新记录 在默认可视区域之外 并更新数据表时 我有一个包含 100 多条记录的可滚动数据表 数据表从记录 0 加载 而我需要前一个位置的数据表视图 我的数据表代码
  • App.xaml 的 EventSetter 上出现错误 CS1061

    我试图通过我的代码创建一个元素并为其关联一个样式 还关联其 EventSetter 该样式工作完美 但当我尝试运行该函数时它不起作用 App xaml
  • 窗函数的确定性排序顺序

    I ve a status表 我想获取最新的详细信息 Slno ID Status date 1 1 Pass 15 06 2015 11 11 00 this is inserted first 2 1 Fail 15 06 2015 1
  • 这是否需要显式同步?

    我有两个线程 我想确保我在 LinkedBlockingQueue 上正确执行同步 这是正确的吗 或者 messageToCommsQueue 上的显式同步不需要吗 宣言 private LinkedBlockingQueue
  • 使用 python 2.5 将 zip 文件下载到本地驱动器并将所有文件解压到目标文件夹

    我正在尝试将 zip 文件下载到本地驱动器并将所有文件提取到目标文件夹 所以我想出了解决方案 但它只是将文件从一个目录 下载 到另一个目录 但它不适用于下载文件 对于提取 我可以让它在 2 6 中工作 但不能在 2 5 中工作 因此 我绝对
  • 错误:“stod”未在此范围内声明

    我正在开发一个 C 项目 我需要将字符串转换为双精度数 但我不断收到错误 stod 未在此范围内声明 仓促答复将不胜感激 include
  • 使用react-native切换手电筒(世博会)

    我正在尝试从我的反应本机导出应用程序切换手电筒 这Plugin不起作用 因为我正在使用 expo flashMode 属性世博相机组件允许我在拍照时切换闪光灯 有没有办法以其他方式切换手电筒 解决了React Native Expo 项目中
  • 单元测试 typescript 指令模板 karma-jasmine,html 未定义

    最近 我开始使用 karma jasmine 对我的打字稿代码进行单元测试 在为服务和简单 指令创建并运行测试用例后 我为自定义指令创建了一个测试用例 该测试用例有一个控制器 正在注入一项服务 并使用 4 个作用域变量与外界通信 这是一个简
  • Google Apps 脚本 - 从 HTML 创建 PDF 时不显示图像

    我正在尝试编写一个脚本 该脚本将输出带有已输入表单的值的 PDF 在此 PDF 中 我想在页面顶部添加一个徽标 该徽标是 Google Drive 文件夹中的图像 基于这个问题 和其他 图像需要转换为 base64 然后添加到 HTML 我
  • 泛型类型的实例[重复]

    这个问题在这里已经有答案了 我的问题是这样的 为什么不能用 new T 实例化泛型类型 而用类 Class 的 newInstance 就可以呢 您需要使用反射 newInstance 因为在编译时 需要链接其构造函数的类是未知的 所以编译
  • 如何使用JavaScript函数重定向到Struts2中的另一个jsp页面

    我想在打开时使用 JavaScript 函数将 JSP 重定向到另一个页面BeforeLogin页 但我收到以下错误消息 找不到 Struts 调度程序 这通常是由于使用 Struts 标签而没有关联的过滤器造成的 Struts 标签仅在请
  • 如何将 eval() 函数与变量列表一起使用?

    我有一个字符串形式的函数列表 y x 3 x 2 y 2 17 2 functions in list 我有一个清单Sympy Symbol对象 基本上是变量 whos name属性对应于函数字符串中的变量名称 Symbol x Symbo
  • 客户可配置的 ASP.NET 网站安全性,用于对页面和按钮访问进行细粒度控制

    我有一个 ASP NET 2 0 还没有 ajax 网站 将以编译的形式部署在多个客户站点上 通常该站点仅是 Intranet 一些客户信任他们的所有人 并且不关心限制对网站和 或页面功能的访问 另一些客户不信任任何人 只希望某些人和 或组
  • 哪个 Visual Studio 组件包含 MSVC Hostx 文件? [复制]

    这个问题在这里已经有答案了 My NET溶液含有一个editbin命令输入PostBuild events 我们尝试创建一个Docker容器用于编译我们的解决方案 为此 我们安装了VS17与安装人员 我们找不到哪个成分我们应该选择得到edi
  • 在Python中读取JSON格式的字符串

    我在 python 中有一个简单的 Websockets 服务器 它从 Android 应用程序客户端接收消息 我尝试以 JSON 格式从客户端生成消息负载 但我觉得 仅当它在字符串中时才起作用 我发现的一种解决方案是保留消息字符串 但采用
  • PHP中检查变量是否为数字和正整数?

    例如 说 如何检查变量是否存在 post id是一个数字 并且是一个正整数 即 0 9 不是浮点数 分数或负数 EDIT 无法使用is int cause GET返回一个字符串 认为我需要使用intval or ctype digit 后者
  • Windows 上的 Eclipse 上的 OpenCV

    我正在尝试在 Windows 上安装 opencv 这是我的步骤 从网站下载opencv 2 4 3 运行exe 将文件夹解压到同一路径中 打开eclipse 之前设置并配置了MinGW 创建了新项目 XYZ 添加了新文件夹 src 添加了
  • 在 nlog 中以编程方式创建数据库以启用 DatabaseTarget

    我正在 C 中创建一个 DatabaseTarget 对象 并使用它将数据记录到 NLog 数据库中 如果数据库不存在 nlog 目标将失败 我想检查数据库是否存在 以及是否没有创建它和日志表 我可以看到 targetDB Install
  • 数据透视表手动更新不起作用

    我有一个数据透视表 我试图根据数组中的值选择某些数据透视项 我需要这个过程更快 所以我尝试使用 application calculation xlcalculationmanual 和pivottables manualupdate tr