Итак, вот моя проблема:
Я создал отчет Excel, который будет загружен с моего веб-сайта, но сам по себе может быть обновлен.Обычно пользователь загружает файл, затем вводит диапазон дат на первой вкладке и нажимает кнопку обновления, чтобы получить свои данные.Затем эти данные извлекаются с помощью вызова хранимой процедуры и помещаются в QueryTable, который содержит 3 отдельные ссылки на сводные таблицы.
После разработки и тестирования я заметил, что размер файла составляет 14 МБ, но затем понял, что сохранил его с 18 000+ записи в QueryTable.Поэтому я решил, что в будущем я просто обновлю данные датами, таким образом, не возвращая никаких данных, сохраню их и разместлю этот файл намного меньшего размера, без сохраненных данных.
Однако, когда я сохранил его на этот раз,даже с 0 записями в QueryTable размер файла по-прежнему составляет 9 МБ.Я не хочу размещать файл 9 МБ без данных, и я уверен, что мои пользователи не хотят загружать файл 9 МБ без данных.
Когда я создал 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 все еще сохраняет старые данные в каком-то кэше или что-то в этом роде, и я не могу понять, как их удалить.