Страницы: 1 2 След.
RSS
Пустая книга Excel 2010 - 137 КБ, Откуда берется размер?
 
Добрый вечер, форумчане!
У меня была книга Excel 2010 размером 460 КБ. Я удалил полностью все данные, а ее размер остался 137 КБ. Не пойму, где спрятана информация. Скрытых листов не вижу.
Прикрепить не могу из-за ограничений в размере прикрепляемого файла.
Есть какие-то идеи?
 
Что-то осталось в книге. Запакуйте её и покажите.
 
Юрий, я заархивировал книгу. Размер ее стал 129 КБ. Прикрепить все равно не могу. Как Вам ее показать?
 
Ctrl+End на листах куда вас заносит - за пределы данных?..
Сохранить в *.xlsb - что дает?..
Изменено: Z - 14.01.2013 20:20:24
"Ctrl+S" - достойное завершение ваших гениальных мыслей!.. ;)
 
Для начала попробуйте ещё: F5 - выделить - объекты. Если найдутся - удалите их.
 
Юрий, Ctrl+End меня перенес в ячейку F14.
F5 - выделить - объекты   -  не найдено ни одного объекта.
Когда указываю "выделить пустые ячейки", выделяет диапазон A1:F14. Удалял строки и столбцы - не помогло. Именованных диапазонов нет.
Сохранил в *.xlsb - файл пустой размером 137 КБ.
 
Шлите на почту, посмотрим.
 
Здесь были?
 
Модулей нет, форматы очистил. Не помогло.
когда я сохраняю книгу, выскакивает сообщение: "... документ содержит макросы, элементы управления ActiveX, данные пакета расширения XML или веб-компоненты..."
Пробовал очистку от макросов через Plex. Опять не помогло.
Изменено: Дмитрий Вдовин - 14.01.2013 22:06:41
 
В Вашей книге имен - как блох (точнее - 52). Но блошки хитрые, спрятаны  :)  

Ctrl+G в редакторе VBA, в появившееся окно Immediate:
for each n in activeworkbook.Names:n.Visible =True:next

Любуйтесь своими именами  :)
 
Цитата
vikttur пишет:
имен - как блох
А ведь по приведённой мною ссылке есть про имена: "Именованные диапазоны". Просто нужно читать внимательно.
 
Юра, тут другой случай. Вернее, имена есть, но их нет для обычного пользователя  :)
 
Понял )) Беру свои слова обратно.
 
Это кто ж так их спрятал? И главное - зачем? :)
 
vikttur, огромное спасибо за предоставленную возможность полюбоваться скрытыми именами. Вот уж удивили.
Не ожидал...
Все обнаруженные имена я удалил, очистку от макросов через Plex сделал, но при сохранении файла снова выскочило сообщение "... документ содержит макросы, элементы управления ActiveX, данные пакета расширения XML или веб-компоненты...". И по прежнему не удается переместить копию листа книги ОТКУДА в книгу КУДА. Размер моего файла стал 117 КБ вместо 137. Может еще что-то осталось? Можно ли вернуть моему файлу так сказать первозданный вид?
Изменено: Дмитрий Вдовин - 14.01.2013 22:51:32
 
Ответ на вопрос "кто и зачем их спрятал?" я думаю мы так и не узнаем, так как эта книга досталась мне, так сказать, по наследству. И я просто хочу убрать из нее все лишнее.
Пытался копировать данные в новую книгу, но все хвосты, как я понял, переходят следом.

Думаю, что все-таки придется книгу создавать заново, чтобы избавиться от "наследства"...
 
Лучше всего перенести данные в новую книгу.
Не листами, не полностью копируя данные. Копировать и вставить значения спецвставкой.
 
Спасибо за совет.
 
Можете переслать мне этот файл для коллекции?
Посмотрю и напишу причину аномалии.
 
Понять "вес" файла можно так:
Сменить расширение на .zip
и затем уже анализировать, возможно в файле много картинок (допустим зашиты в ленту и скрыты)
Спасибо
 
Спасибо Виктору (vikttur), что переслал мне файлы.
Это было не просто, так как Gmail блокирует опасные на его взгляд файлы (Exe, Dll, ActiveX)

Посмотрел в архиве файл 1.xlsx
В нем, как было отмечено уже, много "левых" имен.
Удаляются таким кодом:
Код
Sub Del_Names()
  Dim n As Name
  For Each n In ActiveWorkbook.Names
    'Debug.Print n.Name, n.RefersTo
    n.Delete
  Next
End Sub

Код можно записать, например, в книгу персональных макросов или в новую книгу, затем активировать проблемную, нажать Alt-F8 и выполнить Del_Names

Но главная причина большого размера файла не в именах, а в том, что в книге сохранены 1584774 Байт всевозможных стилей. Их (частично) можно увидеть на вкладке "Главная" – "Стили ячеек".
Удалить стили можно таким кодом:
Код
Sub Del_Styles()
  Dim stl As Style
  On Error Resume Next
  For Each stl In ActiveWorkbook.Styles
    stl.Delete
  Next
End Sub

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

Но стили лучше удалить вручную так:
1. Добавить ZIP расширение файля, т.е. файл 1.xlsx переименовать в 1.xlsx.zip
2. Архиватором (у меня это RAR) открыть файл 1.xlsx.zip
3. Внутри папки xl удалить файл styles.xml
4. Закрыть архиватор и переименовать файл обратно в 1.xlsx
5. При загрузке в excel проигнорировать предупреждение и нажать кнопку Да (согласиться)
6. Сохранить файл

Аналогично вручную можно было бы удалить и все внешние ссылки (были в именах), удалив в архиве внутри папки xl папку externalLinks
Изменено: ZVI - 15.01.2013 01:58:29
 
Есть ещё один старый казацкий способ
Неиспользуемые имена, стили, числовые форматы Excel автоматически удаляет при полистовом копировании содержимого в новую книгу
Для небольшой книги это можно делать врукопашную
Вы можете попробовать программку-фитнесс, написанную совместно с Алексеем (Alex_ST), которая как раз этим и занимается http://www.excelworld.ru/forum/3-903-3
В Вашем случае надо будет снять галочку "Защищать имена" (обычно их не стоит спешить удалять)
Изменено: v__step - 15.01.2013 23:10:56
 
Не  буду утверждать, что всегда, но при копировании листов в другую книгу имена тянутся следом. Не исследовал, но мысль такая (логичная): копируются те имена книги, которые имеют ссылки на этот лист.
 
Могу не только подтвердить Ваше предположение, но и добавить ему уверенности (очень редкий случай, когда я категоричен)
Аналогично ведут себя и стили, только для них нет ссылки, лишь прямое использование, но Excel - умница, он всё понимает правильно
Что касается ссылок на имена, то всё сильней и интересней: сохранятся и те имена, на которые есть каскадные ссылки (через другие имена), и те, на которые ссылаются фигуры, диаграммы, формулы проверок и условного форматирования
Изменено: v__step - 20.01.2013 17:30:06
 
Еще для коллекции: в Excel существует такая вещь как Представления (Custom Views), которые создаются программой по умолчанию и которые можно добавлять и изменять по желанию. Так вот эти Представления создают скрытые имена содержащие расширение*_wvu.*, которые содержат формулы, состоящие из ссылок на видимые строки используемого диапазона на каждом из листов. Если используются фильтры, скрытые или группированные строки и столбцы, формулы в этих именах могут вырастать до гигантских размеров и создавать некоторые проблемы типа сообщения: "Длина одной или нескольких формул в данной книге превышает допустимую длину, равную 8192 знакам. Чтобы обойти это ограничение, следует сохранить данную книгу в формате двоичной книги Excel".
KL
 
Владимир (v__step), перенос листа в новую книгу проблему не решал.
В книге 1.xlsx тоько лист1, нет данных, только форматы, стили, имена, размеры ячеек т.п.
На листе1 используемый диапазон A1:F14, т.е. всего 84 ячейки.
Стили занимали 1583774 Байта, после переноса в отдельную книгу - 1575831 Байт, как видим, разница небольшая, перенос в новую книгу в данном случае был неэффективным.

Кирилл, папка sheetViews занимает всего 11 Байт, т.е. представлений там тоже минимум.
Но про *_wvu.* не знал – спасибо!

Если интересно, то точная статистика файлa 1.xlsx выглядит так:
Размер файла 137187 Байт, но помним, что это, по сути, ZIP-архив, неупакованный размер – 1659280 Байт.
Количество стилей – 6950, использовано стилей – 4.
Все имена – скрытые, их количество– 211, в том числе: битых имён - 124, имён с внешними ссылками – 48.

После удаления имён и невстроенных стилей (подправил немного код для стилей) размер файла стал 14045 Байт.
Код
Sub Del_Names()
  Dim n As Name
  For Each n In ActiveWorkbook.Names
    'Debug.Print n.Name, n.RefersTo
    n.Delete
  Next
End Sub

Sub Del_Styles()
  Dim stl As Style
  On Error Resume Next
  For Each stl In ActiveWorkbook.Styles
    If Not stl.BuiltIn Then stl.Delete
  Next
End Sub


Мусор в файле, похоже, накоплен не годами, а веками (с времен Очакова и покоренья Крыма). Чего там в форматах только нет! Но видно, что работа велась серьезная.
Изменено: ZVI - 16.01.2013 07:50:10
 
Фотоотчёт  :)

Файл со стилями
Изменено: Johny - 16.01.2013 09:04:46
There is no knowledge that is not power
 
Цитата
ZVI пишет:
перенос листа в новую книгу проблему не решал
Скорее всего, фраза "полистовое копирование содержимого" неправильно понята

Метод изложен в книге Джона Уокенбаха "Профессиональное программирование на VBA в Excel 2002" - с. 559 ("... Excel 2003" - с. 581)
Это глава "Создание и использование надстроек", раздел "Размер файлов"

Автор рекомеднует его для ответственной операции - подготовки надстроек, и не случайно
Процедуры в этой ветке удаляют всё без разбора, но удалить стили и имена в общем случае значит убить книгу

Порядок действий (возможены вариации):
 - создаём чистую книгу с числом листов равным числу листов в старой книге
 - листы переименовываем в соответствии с названиями листов старой книги
 - устанавливаем режим переноса объектов вместе с ячейками, если объекты нужны в новой книге
 - содержимое листов копируем: на каждом листе выделяем всё (кроме всего того, что лучше оставить в прошлой жизни), далее Copy >> Paste
 - вручную переносим фильтры, настройки печати, настройки окон, код VBA, цветовую палитру, сценарии
Если есть необходимость защиты имён, значит в старой книге предварительно должны быть созданы ссылки (на локальные имена - на родительском листе)
Те листы, для которых фитнесс нежелателен, надо перетянуть за ярлычок
Изменено: v__step - 20.01.2013 17:34:37
 
Если можно, просьба переслать мне эту волшебную книгу по почте
Я не верю, что она не может быть очищена методом копирования данных
Вероятно, копировались листы целиком, а не содержимое листов (принципиальное отличие)
Метод многократно испытан, в том числе в автоматическом режиме, с помощью дополнительной программы-тестера для чистки нескольких тысяч книг подряд
Вопрос принципиальный, т.к. метод должен идеально подойти для чистки именно такой книги
Изменено: v__step - 20.01.2013 17:28:10
 
И как это я эту интересненькую тему про фитнесс пропустить умудрился?
(ну не отображаются у меня зелёненькие метки около новых/обновлённых постов :evil:  :!: )
И в самом деле, нужно будет сбацать процедурку, которая выведет в форму список ВСЕХ имён в книге и их значений с чекбоксами рядом, показывающими удалять или нет имя при нажатии кнопки "Удалить имена".
Только вот не знаю, когда возьмусь и на что намотать чтобы не забыть? (на бороду уже пробовал - слишком короткая, ничего не держится и потому теряется :) )
С уважением, Алексей (ИМХО: Excel-2003 - THE BEST!!!)
Страницы: 1 2 След.
Читают тему
Наверх