我的带有 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的主要内容,如果未能解决你的问题,请参考以下文章