我的带有 1 个查询表和 3 个数据透视表的 Excel 文件在没有数据的情况下刷新时大小为 9MB

Posted

技术标签:

【中文标题】我的带有 1 个查询表和 3 个数据透视表的 Excel 文件在没有数据的情况下刷新时大小为 9MB【英文标题】:My Excel file with 1 QueryTable and 3 PivotTables is 9MB in size when refreshed with no data 【发布时间】:2011-03-16 13:53:38 【问题描述】:

所以这是我的问题:

我创建了一个 Excel 报告,该报告将从我的网站下载,但可以自行刷新。基本上,用户将下载文件,然后在第一个选项卡上输入他们的日期范围,然后点击刷新按钮来获取他们的数据。然后通过存储过程调用检索此数据并将其放置在 QueryTable 中,由 3 个单独的数据透视表引用。

在开发和测试之后,我注意到文件大小是 14MB,但后来意识到我在 QueryTable 中保存了 18,000 多条记录。所以我想我会简单地用未来的日期刷新数据,从而不返回任何数据,保存它,然后托管那个没有保存数据的小得多的文件。

但是,当我这次保存时,即使 QueryTable 中有 0 条记录,文件大小仍然是 9MB。我不想托管没有数据的 9MB 文件,而且我确定我的用户也不想下载没有数据的 9MB 文件。

当我创建 QueryTable 时,我最初将 SaveData 属性设置为 True。但是,当尝试缩小文件大小时,我每次刷新数据时都将其设置为 false。这是我刷新 VBA 代码的全部内容:

Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Sub RefreshTables()

Dim connstring As String
Dim startDate As String
Dim endDate As String

connstring = "my connection string"
startDate = Range("Parameters!B6").Value
endDate = Range("Parameters!B7").Value

Range("Parameters!D9").Value = "Refreshing..."

Worksheets("Data").ListObjects("DataTable").QueryTable.Connection = connstring
Worksheets("Data").ListObjects("DataTable").QueryTable.CommandText = "EXEC my_storedproc '" & startDate & "', '" & endDate & "'"
Worksheets("Data").ListObjects("DataTable").QueryTable.SaveData = False
Worksheets("Data").ListObjects("DataTable").QueryTable.Refresh BackgroundQuery:=False

Dim w As Worksheet, p As PivotTable
For Each w In ThisWorkbook.Worksheets
    For Each p In w.PivotTables
        p.RefreshTable
        p.Update
    Next
Next

Range("Parameters!D9").Value = "Complete"
Sleep (500)
Range("Parameters!D9").Value = ""

End Sub

另外,我进入了我的每个数据透视表到选项> 数据并取消选中“使用文件保存源数据”复选框。保存文件时,这并没有减少文件大小。

我觉得 Excel 仍在某种缓存或其他东西中保存旧数据,我不知道如何删除它。

【问题讨论】:

【参考方案1】:

您能否使用代码和数据源建立一个新的电子表格,按照您上面所说的进行相同的设置,然后保存它。看看它是否有效值得刷新,但完成后不要保存。希望该文件应该很小。

【讨论】:

这就是我必须做的。显然,在 savedata 已经为 true 之后将其设置为 false 没有任何意义。 Excel 仍将旧数据保存在缓存中。从头开始重建文件似乎是唯一的选择。

以上是关于我的带有 1 个查询表和 3 个数据透视表的 Excel 文件在没有数据的情况下刷新时大小为 9MB的主要内容,如果未能解决你的问题,请参考以下文章

EXCEL 2010学习笔记 —— 数据透视表

带有“exists”子句和多个表的 SQL 子查询

共享使用数据模型构建的数据透视表的 PivotCache

Excel数据透视表制作 这6个技巧超好用

数据透视表的有效方法

带有交叉表的 Postgres 数据透视表