Как заархивировать файл эксель

Обновлено: 07.07.2024

Базы данных Microsoft Access можно организовать и управлять ими, периодически архивая старые или неактивные записи. Вы можете архивировать все таблицы в базе данных, определенные таблицы или только определенные записи, например записи, которые старше определенной даты. В этой теме объясняется, как с помощью трех различных вариантов архивировать данные в базе данных Access.

В этой статье

Когда стоит архиварить?

Если база данных на компьютере содержит данные, которые вы больше не планируете использовать, но хотите, чтобы они были под рукой на тот случай, если в какой-то момент времени они нужны или соответствуют политике хранения данных, лучше сохранить такие данные с помощью архива. Архивка также часто используется для хранения данных на основе условий даты, например в конце месяца.

Способы архивировать данные

В таблице ниже перечислены способы архивировать данные, описание метода, пояснение того, когда следует использовать каждый из них, и другие конкретные факторы, которые следует учитывать при этом.

Используйте, когда.

Другие рекомендации

Периодически создает архивную копию определенной таблицы и заменяет ее пустой копией.

Все записи в таблице отвечают условиям, которые используются для определения того, нужно ли архивировать.

ПРИМЕР. В таблице хранится суточная температура (суточная температура). Каждый год вы архивуете таблицу и начинаете с пустой таблицы.

Возможно, придется обработать целостность данных. Дополнительные сведения см. в разделе "Работа над целостностью данных".

Периодически сделайте архивную копию задней базы данных, а затем замените ее пустой. Требуется разделенная база данных (включаемая в себя: файл задней базы данных, содержащий все таблицы, и файл передней базы данных, содержащий все остальные объекты базы данных).

Все записи в большинстве таблиц базы данных отвечают условию, которое используется для определения того, нужно ли архивировать.

ПРИМЕР. База данных состоит из нескольких таблиц с разными типами ветвей. Каждый год вы архивировать все таблицы.

Если у вас есть таблицы под поиска (таблицы, которые используются для хранения значений для поиска, например почтовые индексы или отделы), может потребоваться импортировать эти данные в новую базу данных.

Базу данных необходимо архивировать вручную. Для этого метода нельзя использовать макрос.

Периодически выполняется запрос, который выбирает записи для архива и добавляет данные в архивную таблицу, а затем выполняется запрос для выбора тех же записей (из исходной таблицы) и их удаления.

Некоторые записи в таблице отвечают условию, используемое для определения того, следует ли архивировать.

ПРИМЕР. Если дате регистрации не менее года, необходимо архивировать транзакции с библиотекой (ид.).

Возможно, придется поработать целостность данных, особенно если записи, которые вы хотите архивировать, находятся на стороне отношение "один-ко-многим". Дополнительные сведения см. в разделе "Работа над целостностью данных".

Предупреждение: Если вам нужно использовать параметры в запросах, следует создать форму для обработки параметров. В противном случае вы рискуете потерей данных.

Работа над целостностью данных

Если записи, которые вы хотите архивировать, связаны с записями в других таблицах, может потребоваться обойти эту связь. Если записи, которые вы хотите архивировать, являются "детскими" записями (они относятся к стороне "многие" отношение "один-ко-многим" ), вы можете без проблем архивировать их. Если записи, которые вы хотите архивировать, являются родительскими (они относятся к стороне "один" записи отношение "один-ко-многим" ), при архиве связанных с ними "детских" записей могут:

Запретить удаление родительских записей. Это может привести к проблемам, если вы уже добавили родительские записи в архивную таблицу.

Становятся "потерянными" записями, которые принадлежат к неуществимой родительской записи. Это может привести к проблемам с целостностью данных и функциями базы данных, в которой используются потерянные записи.

Чтобы учет целостности данных учитывался, сэкономим на следующих действиях:

Определите, какие "детские" записи относятся к записям, которые вы хотите архивировать. Например, чтобы архивировать записи активов, которые находятся в библиотеке, сначала определите, имеются ли в них транзакции, например были ли активы возвращены, но были ли они возвращены.

Выполните одно из следующих действий:

Если "детские" записи всегда можно безопасно удалить, убедитесь, что в связи обеспечивается целостность данных, что приводит к каскадным удалениям. Это гарантирует удаление всех связанных "детских" записей.

Если не всегда можно безопасно удалить "детские" записи, можно зафиксировать все таблицы базы данных.

Создание запроса, в который выбираются родительские записи без записей "ребенок". Затем используйте этот первый запрос для создания запросов на архив (см. раздел "Периодические перемещение записей в архивную таблицу"), а не родительской таблицы.

Периодический заменять таблицу

Если вы хотите архивировать все данные в таблице, можно периодически заменять ее пустой копией.

Важно: Если архивная таблица связана с другими таблицами, может потребоваться обработать целостность данных.

В области навигации выберите таблицы, которые вы хотите архивировать, нажмите CTRL+C, а затем нажмите CTRL+V.

В диалоговом окне "В таблицу как" в диалоговом окне "Параметры влки" выберите "Только структура" и нажмите кнопку "ОК".

Access называет копию копией исходного имени таблицы.

В области навигации щелкните исходную таблицу правой кнопкой мыши и выберите в shortcut-меню пункт "Переименовать".

Указать для таблицы другое имя, например "DailyTemperatureExtremes_archive_2019".

В области навигации щелкните правой кнопкой мыши пустую копию и выберите в shortcut-меню пункт "Переименовать". Переименуем таблицу с именем исходной таблицы.

Периодически заменять все таблицы

При использовании разделенной базы данных можно периодически заменять все таблицы пустой копией.

Для этого сначала подготовьте пустую копию. Если ее дизайн не изменится, эту пустую копию можно будет использовать повторно при каждом архиве. Чтобы архивировать существующую базу данных, просто переименуем ее, чтобы показать, что она является архивом, и сохраните пустую копию в качестве новой.

Подготовка пустой копии задней базы данных

Сначала импортировать определения таблиц для всех таблиц в задней базе данных.

На вкладке "Файл" нажмите кнопку "Создать",выберите "Пустаябаза данных" и нажмите кнопку "Создать".

На вкладке "Внешние данные" в группе "Импорт & связи" нажмите кнопку Access.

В диалоговом окне "Внешние данные — База данных Access" выберите "Импорт таблиц, запросов, форм, отчетов,макроса и модулей в текущую базу данных" и нажмите кнопку "Обзор".

В диалоговом окне "Импорт объектов" нажмите кнопку "Параметры".

В области "Импорт таблиц"выберите "Только определение".

На вкладке "Таблицы" нажмите кнопку "Выбрать все",выберите "ОК",а затем нажмите кнопку "Закрыть".

Добавление данных в любые таблицы подпапок в пустой копии

Для каждой таблицы подылаемой таблицы сделайте следующее:

Ссылка на таблицу подытогов в существующей базе данных.

Создайте запрос на добавление, в который будут добавлены все записи из исходной копии.

Замена задней базы данных пустой копией

Прежде всего переименуем существующую базу данных, чтобы показать, что она является архивом. Затем откройте пустую копию и сохраните ее с использованием исходного имени задней базы данных.

Перейдите на вкладку "Файл" и нажмите кнопку "Сохранить базу данных как". Вам может быть предложено закрыть все открытые объекты. Если да, нажмите кнопку "ОК". Откроется диалоговое окно "Сохранить как".

В окне "Сохранить в" (в верхней части диалоговое окно "Сохранить как") убедитесь, что файл сохраняется в том же месте, где и исходная архивная база данных.

В поле "Имя файла" введите имя исходной задней базы данных.

В поле "Тип сохранения" выберите базу данных Access (*.accdb).

Периодические перемещение записей в архивную таблицу

Процесс включает четыре шага, которые требуют создания пустой копии таблицы с записями, которые нужно архивировать, создания запроса на приложение для копирования записей из исходной таблицы в архивную таблицу, создания запрос на удаление удаления архивных записей из исходной таблицы и, наконец, создания макроса для выполнения обоих запросов, которые можно выполнить при необходимости архивации. Этот на первый взгляд сложный процесс может быть простым, если вы выполните действия в том порядке, в котором они представлены ниже.

Шаг 1. Создание таблицы архива

Чтобы сохранить все архивные записи в одной таблице, сделайте это один раз. В архивной таблице, создаданной на этом этапе, будут удержаны все архивные записи.

Чтобы удалить старую таблицу архива при создании новой, а не на этом этапе, можно запрос на создание таблицы данные в архивную таблицу с помощью архивной таблицы. Для этого переперейти к шагу 2.

Чтобы использовать новую архивную таблицу при каждом архиве, а также сохранить старые архивные таблицы, переименуйте старую таблицу архива, прежде чем создавать новую. Если архивировать по дате, можно назвать старые архивные таблицы в соответствии с диапазоном дат, который они представляют.

В области навигации выберите таблицу с записями для архивации, нажмите CTRL+C, а затем нажмите CTRL+V.

В поле "Имя таблицы" удалите слова "Копия" и "Архив" к существующему имени таблицы и нажмите кнопку "ОК". Например, если исходная таблица называется "Транзакции", архивная таблица будет называтьсяTransactions_archive.

Вставка таблицы

В диалоговом окне "В таблицу как" в диалоговом окне "Параметры в таблицы"выберите "Только структура".

Шаг 2. Создание запроса на приложение для копирования данных в таблицу архива

На вкладке Создание в группе Запросы нажмите кнопку Конструктор запросов.

Добавьте таблицу с записями, которые нужно архивировать.

В окне конструктора запросов дважды щелкните звездочку (*) в таблице, которую вы только что добавили. Имя таблицы и звездочка будут отображаться в первом столбце на сетке запроса.

Примечание: Звездочка означает, что запрос должен включать все поля таблицы в результаты запроса. При использовании звездочки при добавлении или удалении полей результат запроса соответствующим образом корректируется.

В окне конструктора запросов дважды щелкните поле, которое вы хотите использовать для указания условия, которое записи должны соответствовать перед архива. Например, если в таблице "Транзакции" есть поле "Дата регистрации" и вы хотите архивировать все записи, в которых эта дата более года, дважды щелкните поле и оно появится в следующем пустом столбце на сетке запроса.

Бланк запроса

Повторите это шаг, если вы хотите использовать условия для дополнительных полей.

Если значения условия изменяются при каждом архиве, следует сделать так, чтобы запрос запрашивал данные. Для этого используйте параметр в строке "Условия", чтобы ввести данные в запросе. Чтобы использовать параметр, используйте выражение, как обычно, но вместо заданного значения используйте короткий вопрос, окруженный квадратными скобками. Например, можно использовать выражение<[Архивировать транзакции, завершенные до:],например:

Выражение с параметрами

Дополнительные сведения об использовании параметров см. в статье "Основные сведения о запросах".

Вы также можете использовать строку или строку для указания альтернативных условий. Дополнительные сведения об использовании условий см. в статье Примеры условий запроса.

Совет: Если вы используете поле даты для указания условия и хотите архивировать все записи старше текущей даты, введите <Date() в строке "Условия" для поля даты.

Выполните одно из следующих действий:

Если вы уже создали таблицу архива, добавьте в нее указанные записи с помощью запроса на добавление.

На вкладке Разработка в группе Тип запроса выберите команду Добавить.

В диалоговом окне "Приложение" в поле "Имя таблицы" выберите имя архивной таблицы и нажмите кнопку "ОК".

Добавление записей в таблицу

В сетке конструктора запросов появится строка "В приложение".

Для всех полей, которые использовались для указания критериев, очистка строки "Приложение". (Только звездочка должна иметь значение для приложения "К.")

Строка "Добавление записей в таблицу" бланка запроса

Если вы еще не создали таблицу архива, создайте ее с помощью запроса на создание таблицы архива с помощью указанных ниже записей.

На вкладке Конструктор в группе Тип запроса нажмите кнопку Создание таблицы.

В диалоговом окне "Сделайте таблицу" в поле "Имя таблицы" введите имя архивной таблицы и нажмите кнопку "ОК".

Нажмите сочетание клавиш CTRL+S, чтобы сохранить запрос.

Шаг 3. Создание запроса на удаление для удаления данных из исходной таблицы

На вкладке Создание в группе Запросы нажмите кнопку Конструктор запросов.

Добавьте таблицу с записями, которые нужно архивировать.

В окне конструктора запросов дважды щелкните звездочку (*) в таблице, которую вы только что добавили. Имя таблицы и звездочка будут отображаться в первом столбце на сетке запроса.

В окне конструктора запросов дважды щелкните те же поля, которые использовались для указания условия в запросе на добавили.

В строке "Условия" можно задать условия для добавленных полей. Дополнительные сведения об использовании условий см. в статье Примеры условий запроса.

Важно: Если в запросе на приложение или таблицу использовался параметр, убедитесь, что запрос на удаление также сделает это. Следует также помнить, что для обоих запросов введите одинаковое значение. Если ввести другие значения параметров, данные могут потеряться. Чтобы предотвратить потерю данных, можно использовать форму для сбора значений и сделать так, чтобы запросы запрашивали в нее входные значения. Дополнительные сведения см. в статье "Знакомство с запросами".

На вкладке Конструктор в группе Тип запроса нажмите кнопку Удаление.

В сетке конструктора запросов появится строка "Удалить".

Строка "Удалить" бланка запроса

Нажмите сочетание клавиш CTRL+S, чтобы сохранить запрос.

Шаг 4. Создание макроса для запуска запросов на приложение и удаление

На вкладке Создание в группе Макросы и код нажмите кнопку Макрос.

Щелкните стрелку вниз рядом с кнопкой "Добавить новую действие"и выберите "ОткрытьQuery".

Появится действие OpenQuery с аргументами.

В поле "Имя запроса" выберите запрос на приложение или таблицу, созданный на шаге 2.

Щелкните стрелку вниз рядом с кнопкой "Добавить новую действие"и выберите "ОткрытьQuery".

Появится действие OpenQuery с аргументами.

В поле "Имя запроса" выберите запрос на удаление, созданный на шаге 3.

Можно ли сжать файл (таблицы в Ексель) в 10 раз в формате zip? Как это сделать?

Файл с Excel файлами весит 2 гб, а сжать их в формате zip до 200 мб?

  • Вопрос задан более двух лет назад
  • 2972 просмотра

Простой 5 комментариев

2ord

2ord

Если файлов много и они занимают 2 ГБ, то наверное лучше использовать Access.

longclaps

Veritas23, смешно, да.
В анамнезе больше 100 вопросов - неужто все такие дебильные некорректные?

Если файл xlsx, рекомендую фокус: переименуйте его из xlsx в zip и откройте.
Секрет фокуса, как уже писали в ответах, в том, что xlsx это фактически zip-контейнер, в котором все хранится.
Его можно сархивировать в zip\что угодно другое, и если выставить высокую степень сжатия, оно ужмется еще, но не так сильно, как старый excel.

Например, имею файл 1.4мб xlsx, архив в zip с максимальной степенью сжатия дал архив с размером 1 мб. Так что на 10 раз я бы не рассчитывал.

Сохранение этого же файла в xlsb дало результат 1.3мб. Zip-архивирование с максимальным сжатием xlsb 1.3 мб дало архив с размером 1.2 мб.

В общем, ответ - нет.

А еще можно файл экселя сохранить как бинарную книгу (xlsb) - очень размер уменьшает.

bopoh13

2ord

CSV - это текстовый формат для обмена между различными программами и он отлично сжимается. Этот формат не имеет прямого отношения к Excel, а просто ассоциирован с ним в Windows и при его открытии происходит операция импорта.

ZIP - это контейнер, в который можно сжимать файлы с различными алгоритмами сжатия. Если используется WinZIP из последних версий, то в нем есть поддержка сильных алгоритмов сжатия, таких как BZIP2, LZMA.

Имеет смысл импортировать CSV в какую-либо нормальную БД, ну хоть в Access.

Зависит от содержимого.
Чудес на свете не бывает. Для того или иного типа файлов подходит определенный алгоритм архивации.
Можно поиграться с ключами архиватора.

Раньше, кстати, была такая вещь, как . Zip-бомба
Файл архива маленький, а при распаковке занимал сотни мегабайт, для времен когда диски были меньше гига было неприятное явление. Сам файл состоял из нулей, единиц, пробелов. Они очень хорошо паковались.

Зип бомба и сейчас есть, можно терабайт упаковать в файл примерно метр. И да ни каких нулей и едениц, там строго однотипные данные, например все единицы. Это упаковывается гораздо лучше

kagary06

Коэффициент сжатия зависит от данных, которые содержатся в этом Excel файле.
Если там в основном содержаться текстовые данные, то вполне реально сжать такой файл в 10 раз, но это зависит от алгоритма и уровня сжатия.

Когда вы выполните архивацию исходного Excel файла в архив, тогда и сможете узнать во сколько раз zip-алгоритм позволяет сжать те данные, которые содержатся в Excel файле.


Для начала рассмотрим структуру zip-архива

Пример архива из двух файлов. Источник CodeProject

Как видно каждый файл кодируется четырьмя блоками, два из которых опциональны. Каждый блок имеет специальную сигнатуру (последовательность из 4-х байт), которая в текстовом редакторе выглядит как PK. что позволяет легко определять начало этих блоков. Local Header помимо сигнатуры содержит поля: размер сжатых данных файла, размер несжатых данных, контрольную сумму CRC32 для данных и другие. Central Header содержит те же данные, что и File Header, на который ссылается, а так же указание места, где File Header находится (число байт от начала файла, так называемый offset) и некоторые другие. End of Central Dir (EOCD) содержит число файлов в архиве и место первого Central Header. Формат zip предполагает обработку с конца файла, т.е. сначала читается EOCD секция, потом Central Header нужного файла, по нему находится File Header и потом выполняется переход к сжатым данным. Более подробное описание структур и полей можно увидеть здесь.

Примерный вид sheet1.xml (добавлены переносы строк и отступы для читаемости)



Hex-данные исправленного архива в Hex-редакторе HxD.

Обратите внимание, что используется обратный порядок байт, так сигнатура 0x04034b50 записана как 50 4b 03 04 , а длина файла sheet1.xml — 0x0000020C = 0x20C = 524 (байт) как 0С 02 00 00 .

В соответствии с документацией File Header имеет следующую структуру


Открыв архив, в hex-редакторе визуально легко найти данные sheet1.xml . Чуть выше находится сигнатура PK — это и будет началом File Header. Встав на нее справа (красная полоска), получим выделение слева (толстый красный квадрат) и позицию 0x17E3 в строке состояния — это положение от начала файла заголовка File Header для файла sheet1.xml .

Учитывая, что тип uint32_t — это 4 байта, а uint16_t — два, получаем следующую картинку, где
голубой прямоугольник — сигнатура, оранжевый — метод сжатия, два серых — дата и время изменения файла и синий — это контрольная сумма, за которой идут два зеленых, содержащих сжатый и несжатый размеры.


Чтобы внести изменения после вставки данных листа на позицию 3, отмеченную стрелочкой, необходимо из hex-редактора выписать в скольких байтах от начала файла находятся следующие поля (ниже приводятся получившиеся значения в моем файле template.xlsx ):

  1. CRC = 0x17F1 . Добавив +4 получится смещение для сжатого размера, и еще +4 несжатого
  2. Начало данных файла (стрелка 2) = 0x1819
  3. Место куда будут дописаны данные (стрелка 3) = 0x1969
  4. Конец данных файла = 0x1A24
  5. CRC в Central Header для sheet1.xml = 0x1C69
  6. Отступ в EOCD = 0x1CAF и старое значение в нем 0x1A25 , которое нужно будет увеличить на длину добавленных данных
  1. В массив байт читаются данные шаблона
  2. Вычисляется «накапливаемый» CRC32, сначала по данным шаблона от начала данных (2) до тега sheetData (3), потом по вставляемым данным, а потом от sheetData до конца файла
  3. Обновляются биты CRC и длины в структурах FileHeader и Central Header в массиве байт
  4. Формируется результирующий массив, как данные файла из шаблона до тега sheetData + вставляемые данные + данные шаблона после sheetData , который и будет итоговым результатом.


где 2 указывает на второй узел в файле xl\sharedStrings.xml .

Таким образом Excel экономит место, храня одинаковые строки как одно значение. Чтобы не менять в архиве еще и sharedString , строки можно писать сразу в sheet1.xml , применив атрибут inlineStr :


Не стоит забывать про маскирование спец-символов XML — < > & ' " символов. В итоге должно получаться что то вида


Сам Excel заполняет больше XML-атрибутов, например номера строк и используемые диапазоны, но они опциональны.

Если размер файла слишком велик, попробуйте сделать его более управляемым, следуя советам ниже.

Сохранение таблицы в двоичном формате (XSLB)

Чтобы уменьшить размер файла, можно сохранить таблицу в виде двоичной книги (XSLB), а не формата по умолчанию (XSLX). По умолчанию используется формат XML, что важно при использовании данных в сторонних программах, так как XML является открытым стандартом. Однако в большинстве целей двоичного формата достаточно и он сохраняется в файле меньшего формата.

Перейдите в меню > параметры >Сохранить.

В списке Сохранениефайлов в этом формате в списке Сохранить книги выберите Excel Двоичная книга.

Сохранение в двоичном формате

Этот параметр задает двоичный формат по умолчанию. Если вы хотите сохранить по умолчанию Excel книгу (.xlsx), но сохранить текущий файл как двоичный, выберите параметр в диалоговом окке Сохранить как.

Примечание: Если файл находится в SharePoint, возможно, вы не видите параметр Сохранить как. В этом случае вы можете сохранить копию на локальном диске, сохранить ее как двоичное, а затем заменить исходный файл новым двоичным.

Перейдите в > сохранить как и, если файл сохраняется впервые, выберите расположение.

В списке типов файлов выберите Excel Двоичная книга (XLSB).

Сохранение в Excel двоичной книги

Сохранение таблицы в двоичном формате (XSLB)

Чтобы уменьшить размер файла, можно сохранить таблицу в виде двоичной книги (XSLB), а не формата по умолчанию (XSLX). По умолчанию используется формат XML, что важно при использовании данных в сторонних программах, так как XML является открытым стандартом. Однако в большинстве целей двоичного формата достаточно и он сохраняется в файле меньшего формата.

Перейдите в меню > параметры >Сохранить.

В списке Сохранениефайлов в этом формате в списке Сохранить книги выберите Excel Двоичная книга.

Этот параметр задает двоичный формат по умолчанию.

Если вы хотите сохранить по умолчанию Excel книгу (.xlsx), но сохранить текущий файл как двоичный, выберите параметр в диалоговом окне Сохранить как:

Выберите Файл > Сохранить как.

В списке Тип файла выберите Excel двоичной книги (XLSB).

Уменьшение количества таблиц

Если у вас есть таблицы с данными, которые вы не используете и которые не содержат формул, удалите их из таблицы.

Чем больше точек данных в книге, тем больше размер файла. Если удалить неиспользование данных, размер файла уменьшится.

Сохранение изображений с более низким разрешением

Откройте меню Файл, выберите раздел Параметры, а затем — Дополнительно.

В области Размер и качество изображениясделайте следующее:

Выберите Отменить редактирование данных. Этот параметр удаляет хранимые данные, которые используются для восстановления исходного состояния изображения после его изменения. Обратите внимание, что если удалить данные редактирования, восстановить изображение будет нельзя.

Убедитесь, что не выбрано сжатие изображений в файле.

В списке Разрешение по умолчанию выберите разрешение 150ppi или более низкое. В большинстве случаев разрешение не должно быть выше.

Параметры размера и качества изображения

Сжатие рисунков

Выберите рисунок в документе. На ленте появится вкладка Формат рисунка.

На вкладке Формат рисунка в группе Настройка выберите Сжать рисунки.

В области Параметры сжатиясделайте следующее:

Чтобы сжать все рисунки в файле, снимайте снимок Применить только к этому рисунку. Если этот параметр выбран, изменения, внесенные здесь, будут влиять только на выбранный рисунок.

Выберите Удалить обрезанные области рисунков. Этот параметр удаляет обрезанные данные рисунка, но вы не сможете их восстановить.

В области Разрешениесделайте следующее:

Выберите Использовать разрешение по умолчанию.

Параметры сжатия рисунков

Не сохранения кэша данных с файлом

Если таблица содержит таблицу, можно уменьшить размер файла, не экономя кэш исходных данных в файле, а обновляя кэш данных при его открытие.

Выберите любую ячейку в таблице.

На вкладке Анализ таблицы в группе Таблица выберите Параметры.

В диалоговом окне Параметры таблицы выберите вкладку Данные и сделайте следующее:

Чтобы сохранить исходные данные с файлом, с помощью сохранения исходных данных с помощью сохранения.

Читайте также: