Когда я Вордовский файл сохраняю в формат TXT, то в конце файла добавляется содержимое верхних колонтитулов (для нечётной и чётной страницы). Как сделать так, чтобы колонтитулы не экспортировались в TXT-файл?
Встроенных инструментов для этого нет. Значит вам надо сначала подготовить документ - удалить в нём ненужное, а затем сохранять в текстовый формат.
Или можно написать макрос, который будет копировать содержимое основной части документа в текстовый файл.
Я пытался найти способ полностью удалить колонтитулы средствами VBA, но так и не нашёл. Ведь мало затереть их содержимое: в этом случае они всё равно будут экспортироваться, только в виде пустой строки. Нужно их каким-то образом «грохнуть».
Цитата:
Ведь мало затереть их содержимое:
Что вы подразумеваете под "затереть"? Какие действия вы делаете (какие кнопки щёлкаете), чтобы затереть?
Я имел в виду – удалить тот текст, который набит в колонтитуле. Но сам по себе колонтитул ведь никуда не девается...
Я просто не могу сообразить, как правильно разрулить эту проблему, куда мне копать.
У меня такое впечатление, что эта задача должна легко решаться, но не соображу, как.
Если удалить текст в колонтитуле, то, соответственно, в txt-файл не запишется колонтитул - ведь писать то нечего.
Хм. А ведь точно... Где-то я, видимо, тупил.
А всё-таки с ними что-то не то.
Удаляю колонтитулы таким образом:
Спойлер
Dim HeaderFooter As HeaderFooter
With ActiveDocument
.PageSetup.DifferentFirstPageHeaderFooter = True
.PageSetup.OddAndEvenPagesHeaderFooter = True
For Each HeaderFooter In .Sections(1).Headers
If HeaderFooter.Exists Then HeaderFooter.Range.Delete
Next
End With
Правильно?
Так вот: результат следующий: после сохранения Вордовского файла в TXT в конце TXT появляются пустые строки, 13 штук. Тот же самый результат, если я без всякого удаления колонтитулов просто попытаюсь сохранить Вордовский файл в TXT, только тогда вместо соответствующих пустых строк будет помещено содержимое колонтитулов. Причём это легко отследить, если добавить куда-нибудь в текст символы не из кириллической кодовой страницы: тогда Ворд откроет окно с параметрами преобразования кодировок, и в конце окна как раз видны эти «новорождённые» пустые строки. Точнее, не совсем пустые: часть пустых, а часть имеет в начале строки 4 пробела (это в моём случае, у других, возможно, не совсем так). Похоже на то, что эти строки имеют отношение к колонтитулам.
Если не макросом удалять колонтитулы, а вручную, то такая же проблема?
Там была интересная ситуация: первый раз удалил вручную, сохранил – никаких пустых строк не добавилось. Я уже обрадовался, что нашёл, где собака зарыта. Но при последующих экспериментах пустые строки стабильно появлялись.
Кстати, колонтитулы при их удалении макросом физически не удаляются, они только очищаются. Это легко проверить, повторно напустив этот макрос на тот же текст.
То есть проблема есть и при ручном удалении? Вы заходите в колонтитул, всё выделяете, удаляете и затем пересохраняете в txt-файл и пустые пространства на месте колонтитулов?
Да, именно так. Но при этом неизвестно, откуда этот хвост берётся: возможно, что это какие-то внутренние «осколки» из самого Ворда, а не из документа.
Значит макрос не виноват.
Значит проблема в самом Ворде.
После того, как вы удалили колонтитулы, визуально в документе всё нормально, сверху ничего лишнего нет?
Сейчас создал пустой ворд-файл, пересохранил его, в конце есть пустые абзацы.
Значит программисты Майкрософта так сделали. Просто нужно принять это.
Может быть пустые абзацы формируют не колонтитулы, а что-то другое.
Но и колонтитулы тоже. В этом можно убедиться, набив какую-нибудь информацию в каждый из колонтитулов.
По идее, от колонтитулов должно сохраняться 6 строк: 3 от верхнего колонтитула, и 3 от нижнего. А у меня их 12 (точнее, 13, но одна строка, видимо, это последняя строка документа).
Я создал пустой ворд-файл, добавлял, удалял колонтитулы. После удаления колонтитулов, ничего лишнего нет в txt-файле.
Может быть есть нижние колонтитулы, в которых есть пустые абзацы. Ваш макрос работает с колонтитулом первой страницы и колонтитулами чётных, нечётных страниц. Возможно, что в документе есть колонтитулы, в которых есть пустые абзацы, но этих колонтитулов в документе сейчас не видно - колонтитулы станут видны при появлении страниц.
Чтобы убрать влияние разных видов колонтитулов, пройдитесь по всем разделам и уберите галочки для колонтитула первой страницы и колонтитулов чётных и нечётных страниц. После этого вы будете видеть все колонтитулы и будете уверены, что нет скрытых колонтитулов.
«После удаления колонтитулов, ничего лишнего нет в txt-файле» – так Вы же писали на предыдущей странице, что у Вас тоже добавляются пустые строки...
Нижним колонтитулом я вообще не пользуюсь. Но всё равно я его в том макросе удаляю таким же образом, просто я не стал добавлять этот код в то сообщение.
Вообще сколько я себя помню – в конец TXT-файла всегда добавлялось несколько пустых строк при сохранении его из Вордовского документа.
Да, на всякий случай: я работаю с doc-файлами, а не с docx. В Ворде 2010.
«пройдитесь по всем разделам» – я предварительно удаляю все разделы и принудительные разрывы страниц:
Спойлер
.Execute FindText:="^b", ReplaceWith:="", Replace:=wdReplaceAll
.Execute FindText:="^m", ReplaceWith:="", Replace:=wdReplaceAll
Так что у меня остаётся один основной раздел.
Да, я писал, что добавляются пустые строки, - это я ещё тогда не понимал, что за пустые строки.
Но у меня не было проблем с колонтитулами в пустом новом файле.
Если вы удаляете все разделы и все колонтитулы, то тогда удаляйте и особые колонтитулы.
Этим кодом вы создаёте особые колонтитулы:
.PageSetup.DifferentFirstPageHeaderFooter = True
.PageSetup.OddAndEvenPagesHeaderFooter = True
Хотя это не поможет - колонтитулы то ведь всё равно останутся. Эти команды могут скрыть колонтитул, но не удаляют его - колонтитул появится в txt-файле.
Этим кодом вы создаёте особые колонтитулы:
.PageSetup.DifferentFirstPageHeaderFooter = True
.PageSetup.OddAndEvenPagesHeaderFooter = True
Не создаю, а открываю к ним доступ. Если эти параметры имеют значение False, то содержимое соответствующих колонтитулов вышеприведённым макросом не удаляется. Т.е. вне зависимости от значения этих параметров цикл выполняется ровно три раза, и каждый раз как будто успешно. Но если к соответствующему колонтитулу доступ не открыт, то при повторном выполнении макроса видно, что изменения в колонтитуле не произошли.
Но и после «удаления» всех трёх колонтитулов цикл успешно выполняется три раза, т.е. физического удаления колонтитулов не происходит.
Для чистоты эксперимента удалил файл Normal.dotm – таким образом новый Вордовский документ стал «как слеза младенца». Сохранил документ в txt. Результат тот же: добавляются 12 дополнительных строк.
Новый пустой ворд-документ даёт 12-ть пустых строк в txt-файле?
Да, именно так. Причём без шаблона Normal.dotm!
Word 2010.
Точнее, не совсем пустой документ: вставил туда букву под ударением, чтобы выдалось окно конвертации сохраняемого файла.
А если обычную русскую букву вставить, то будет 12-ть пустых абзацев?
Так. Опять попробовал без шаблона. Ничего не добавилось.
Попробовал с шаблоном: там у меня прописаны колонтитулы для нечётных и чётных страниц. Добавились 4 строки.
Попробовал свой рабочий экспериментальный файл. При одном сохранении в него добавились 6 строк, при другом – 12 строк.
Я уже давно склоняюсь к выводу, что Ворд в процессе работы где-то у себя в памяти оставляет хвосты, и тут они и выплывают.
Можете проблемный файл выложить на форуме?
Вот сам файл, а также результат его сохранения в TXT.
Удалите все колонтитулы, пересохраните в txt-файл, убедитесь, что есть проблема, и выложите файлы на форуме.
Можно сохранить текст из Ворда в txt-файл без Сохранить как, а просто создать текстовый файл и в него скопировать весь текст. В этом случае не будет ничего непредвиденного и не надо будет разгадывать тайны Ворда.
Ворд, кроме того, что добавляет пустые абзацы по какому-то только ему известному алгоритму, так ещё и добавляет спереди пробелы, если в тексте есть отступы. Возможно есть и ещё какие-то действия Ворда, которые проявят себя позже.
«Можно сохранить текст из Ворда в txt-файл без Сохранить как, а просто создать текстовый файл и в него скопировать весь текст» – это конечно, я так и собирался сделать, если не удастся разобраться с тем, где собака зарыта. Но хотелось бы всё-таки разобраться.
Удалите все колонтитулы, пересохраните в txt-файл, убедитесь, что есть проблема, и выложите файлы на форуме.