如何刷新数据透视图

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何刷新数据透视图相关的知识,希望对你有一定的参考价值。

当数据源中的数据更改后,数据透视表默认不会自动刷新。可以通过右击数据透视表,在弹出的快捷菜单中选择“刷新数据”(Excel 2003)或“刷新”(Excel 2007)来手动刷新数据透视表。如果需要自动刷新数据透视表,可以用下面的两种方法:
一、VBA代码
用一段简单的VBA代码,可以实现如下效果:当数据源中的数据更改后,切换到包含数据透视表的工作表中时,数据透视表将自动更新。假如包含数据透视表的工作表名称为“Sheet1”,数据透视表名称为“数据透视表1”。
1.按Alt+F11,打开VBA编辑器。
2.在“工程”窗口中,双击包含数据透视表的工作表,如此处的“Sheet1”表。
3.在右侧代码窗口中输入下列代码:
Private Sub Worksheet_Activate()
Sheets("Sheet1").PivotTables("数据透视表1").RefreshTableEnd Sub
4.关闭VBA编辑器。
二、打开工作簿时自动刷新数据透视表
Excel 2003:
1.右击数据透视表,在弹出的快捷菜单中选择“表格选项”。弹出“数据透视表选项”对话框。
2.在“数据源选项”下方选择“打开时刷新”。
3.单击“确定”按钮。
Excel 2007:
1.右击数据透视表,在弹出的快捷菜单中选择“数据透视表选项”。弹出“数据透视表选项”对话框。
2.选择“数据”选项卡,选择“打开文件时刷新”。
3.单击“确定”按钮。
这样,以后当更改数据源并保存后,重新打开该工作簿时,数据透视表将自动刷新。
参考技术A F9,或者重新计算都可以

从后台扩展更新核心数据存储后,如何刷新 SwiftUI 视图?

【中文标题】从后台扩展更新核心数据存储后,如何刷新 SwiftUI 视图?【英文标题】:How do I refresh my SwiftUI view when my core data store has been updated from a background extension? 【发布时间】:2019-10-27 12:26:04 【问题描述】:

我有一个带有意图扩展目标的 SwiftUI 应用程序。我还有一个位于共享应用组的核心数据存储。

intents 扩展可以在 Shortcuts 应用中使用newBackgroundContext() 成功地将数据写入存储。我的 SwiftUI 应用程序可以从 viewContext 的应用程序组中读取数据,但只有当我强制退出应用程序并重新打开它时。

我想我需要一种方法让我的应用知道它已在不同的上下文中更新,但我不确定如何做到这一点?

我尝试在应用委托中设置context.automaticallyMergesChangesFromParent = true,并在SwiftUI 视图中将context.refreshAllObjects() 添加到onAppear,但这似乎没有任何区别。

mergeChanges(fromContextDidSave:) 看起来很有希望,但我不确定如何获得通知。

我是 Core Data 的新手,很困惑,所以任何指向正确方向的指针都会很棒,谢谢!

这是我当前代码的净化版本:

应用代理

 lazy var persistentContainer: NSCustomPersistentContainer = 
        let container = NSCustomPersistentContainer(name: "exampleContainerName")
        container.loadPersistentStores  description, error in
            if let error = error 
                print("error loading persistent core data store")
            
        
        return container
    ()

    func saveContext () 
        let context = persistentContainer.viewContext
        if context.hasChanges 
            do 
                try context.save()
             catch 
                print("error saving core data context")
            
        
    

class NSCustomPersistentContainer: NSPersistentContainer 
    override open class func defaultDirectoryURL() -> URL 
        var storeURL = FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: "exampleAppGroupName")
        storeURL = storeURL?.appendingPathComponent("exampleContainerName")
        return storeURL!
    

场景代理

guard let context = (UIApplication.shared.delegate as? AppDelegate)?.persistentContainer.viewContext else 
            fatalError("Unable to read managed object context.")


if let windowScene = scene as? UIWindowScene 
let window = UIWindow(windowScene: windowScene)
            window.rootViewController = UIHostingController(rootView: ExampleView.environment(\.managedObjectContext, context))
            self.window = window
            window.makeKeyAndVisible()

Swift UI 视图

import SwiftUI
import CoreData

struct ExampleView: View 

    @Environment(\.managedObjectContext) var managedObjectContext
    @FetchRequest(
        entity: ExampleEntityName.entity(),
        sortDescriptors: [
            NSSortDescriptor(keyPath: \ExampleEntityName.date, ascending: false),
        ]
    ) var items: FetchedResults<ExampleEntityName>

    var body: some View 
        VStack 
            List(items, id: \.self)  item in
                Text("\(item.name)")
            
        
    

意图扩展

class NSCustomPersistentContainer: NSPersistentContainer 
    override open class func defaultDirectoryURL() -> URL 
        var storeURL = FileManager.default.containerURL(forSecurityApplicationGroupIdentifier: "exampleContainerName")
        storeURL = storeURL?.appendingPathComponent("exampleAppGroupName")
        return storeURL!
     


let persistentContainer: NSCustomPersistentContainer = 
    let container = NSCustomPersistentContainer(name: "exampleContainerName")
    container.loadPersistentStores  description, error in
        if let error = error 
            print("error loading persistent core data store: \(error)")
        
    
    return container
()

let context = persistentContainer.newBackgroundContext()

let entity = NSEntityDescription.entity(forEntityName: "ExampleEntityName", in: context)
let newEntry = NSManagedObject(entity: entity!, insertInto: context)
newEntry.setValue(Date(), forKey: "date")
newEntry.setValue("Hello World", forKey: "name")

do 
    try context.save()
 catch 
    print("Failed saving")

【问题讨论】:

看看这个***.com/a/58530246/6594394 【参考方案1】:

不知道您是否找到了答案,但我在共享应用组中使用 UserDefaults 和意图扩展时遇到了类似的问题。最终对我有用的是在 SceneDelegate 的以下方法中添加一个调用来加载项目:

func sceneWillEnterForeground(_ scene: UIScene) 
        // Called as the scene transitions from the background to the foreground.
        // Use this method to undo the changes made on entering the background.
        SiriResponseManager.shared.grabUD()
    

在我的示例中,我使用了一个单例,其中包含从 UserDefaults 加载项目的方法。这个单例类是一个 ObservableObject。在我加载的第一个视图中(在我的情况下为 ContentView),我将 ObservedObject 变量分配给我的单例类并检索我的单例中的 @State 变量以填充我的视图中的字符串。

希望这会有所帮助。

【讨论】:

【参考方案2】:
class Data: ObservableObject 

    @Published var dataToUpdate: Int 


struct UpdateView : View 

@EnvironmentObject data: Data


   ...body ... 
     // use data.dataToUpdate here
  

只需像您在此示例中看到的那样定义数据。然后在数据库更改时填充 dataToUpdate...当然这只是一个简化的示例,只有一个 Int 值...

【讨论】:

以上是关于如何刷新数据透视图的主要内容,如果未能解决你的问题,请参考以下文章

如何添加拉表视图以刷新 uitableview 内的数据

更新表格视图单元格中的核心数据值后如何刷新

如何获得oracle物化视图 定时刷新时 刷新所用的时间 或者是监控 物化视图在jobs中建立的job任务的执行时间

知道如何防止 Android Widget 中显示的列表视图在每次刷新数据时闪烁吗?

如何做到物化视图的自动刷新

如何在不刷新整个页面的情况下刷新视图中的数据?有角度的