![]() |
Бланк в Excel (печатная форма) Возник интересный вопрос. Допустим есть шаблон excel - сверху шапка, снизу подвал, а посредине строки с данными. Шаблон формата А4. И есть набранная база в другом листе. Причем, в каждой строке базы может быть длинный текст (за счет чего высота строки может быть в 2-3-4.. раза больше стандартной - в зависимости от количества текста). Так вот, нажимая на кнопку "Сформировать", данные из базы переносятся в шаблон (в среднюю часть). Если в шаблоне заканчивается место, то автоматически создается новый лист (такой же шаблон) и база продолжает заполняться в спец. место в шаблоне, т.е. в среднюю часть листа. И т.д. пока не закончится база. Таким образом может сформироваться комплект листов формата А4, подготовленный к печати. А вопрос в следующем. Как сделать так, чтобы геометрические размеры формы (шаблона) оставались неизменными независимо от количества строк? Ведь, к примеру, в сформированном комплекте листов формата A4 один лист может содержать 10 строк, а другой лист - 5 строк, а третий лист - 15 строк - все зависит от заполненности строк базы. Реально ли создать подобную реализацию? PS На самом деле в Word это по умолчанию возможно - колонтитулы и в средине табличка, которая в зависимости от заполнения переходит на новую страницу. Но интересует именно в Excel. |
Так как формат остаётся неизменным, то задача сводится к определению необходимого количества строк для имеющегося текста. Не так сложно если формат текста един. |
В Excel тоже есть колонтитулы, и при заполнении "строками" всей страницы - они переходят на следующую страницу (правда целиком, а не построчно как в MS Word. Ваш шаблон сделан неграмотно - правильнее не плодить Листы Excel, а продолжать документ "вниз". Кнопка Сформировать вызывает (или содержит) VBA-код макроса, в нем нужно убрать формирование новых листов и проверить что Разрывы страниц не задаются явно. А еще скажу что просьба попахивает перфекционизмом :-)) В современном мире и в период кризиса это ни к чему. |
1-lexabard >Да, формат текста един. Но в каждом листе будет разное количество строк. Тем не менее, суммарная высота строк (с учетом границ) должна быть одинаковая и составлять формат А4. [quote=economist;38393681]В Excel тоже есть колонтитулы[/quote]Они примитивнее, чем в Word, и основную надпись (штамп в чертежах) там не нарисуешь. [quote=economist;38393681]ш шаблон сделан неграмотно - правильнее не плодить Листы Excel, а продолжать документ "вниз". [/quote]Я видел два варианта подобных шаблонов: разбивка по листам и разбивка вниз. У каждого плюсы и минусы. Важно, чтобы при печати выходили листы одного размера (формат А4 с рамкой по ГОСТу). [quote=economist;38393681] А еще скажу что просьба попахивает перфекционизмом :-)) [/quote]Безусловно! :) Но у проектировщиков и нормоконтролёров так принято, чтобы всё было четко и по ГОСТу :) Конечно, в AutoCAD я бы без проблем организовал подобное, но требуют в Excel. Поэтому пытаюсь понять, как реализовать без косяков и кривизны эту идею. То, что валяется в инете немного не то, кривовато и т.д. Видимо, без VB здесь не обойтись. Но не силен я в нем. |
Дайте ссылку на скрипт. |
А это нужно только для печати или еще для чего-то? |
Помню были спец листы по черчению с рамками по ГОСТу, так я к тому, что может вы эти рамки отдельно в ворде напечатаете, а содержимое в экселе при печати используете листочки из п.1 =) |
AVF - если "формат А4 с рамкой по ГОСТу" - в Excel можно вставить как "Подложку" листа (ч/з Разметка страницы). Суммарную высоту строк можно "подогнать", дейтсивтельно, только кодом на VBA. Он позволяет вычислять абсолютные координаты лев/верх. углов ячеек и менять их высоту методами: Cells(rownum, columnnum).Left= Cells(rownum, columnnum).Top= Cells(rownum, columnnum).RowHeight= что позволяет вписать в нужную высоту любое кол-во строк с любым текстом. В ГОСТах по вузовским дипломам не содержится правила равенства высоты в текстовых таблицах на разных листах. Трамбуйте нормоконтролеров, а лучше дайте правильно взятку и посадите того козла/козу. |
ащиппка: Cells(rownum, columnnum).EntireRow.RowHeight= |
Текущее время: 01:44. Часовой пояс GMT +3. |