Создание файлов excel на основе таблицы
= Мир MS Excel/Статьи об Excel
Приёмы работы с книгами, листами, диапазонами, ячейками [6] |
Приёмы работы с формулами [13] |
Настройки Excel [3] |
Инструменты Excel [4] |
Интеграция Excel с другими приложениями [4] |
Форматирование [1] |
Выпадающие списки [2] |
Примечания [1] |
Сводные таблицы [1] |
Гиперссылки [1] |
Excel и интернет [1] |
Excel для Windows и Excel для Mac OS [2] |
- в таблице не должно быть объединенных ячеек. Вернее сказать так: ЕСЛИ в таблице есть объединённые ячейки, то надо быть готовым к тому, что при экспорте объединение будет отменено, и соответственно образуются лишние пустые строки и/или столбцы, что может нарушить структуру таблицы. В общем, объединённые ячейки - это зло :)
- все столбцы должны иметь уникальные названия, которые будут использоваться при слиянии. Если в таблице отсутствует первая строка с названиями столбцов, то её заменит первая строка данных, а значит, она в рассылке участвовать не будет.
На этом этапе в текстовом редакторе Word формируется документ, в который в дальнейшем будут внедряться данные электронной таблицы. Текст этого документа представляет собой общую для всех рассылок часть.
Предположим всем клиентам, у которых срок действия клубной карты истекает в следующем месяце, планируется разослать письма с уведомлением.
Текст письма будет одинаковым за исключением обращения, номера клубной карты и даты окончания её действия. Эти данные будут импортироваться из таблицы Excel (выделено синим)
Для более удобной дальнейшей работы при слиянии рекомендуется установить параметр Затенение полей в положение Всегда, чтобы отличать вставленные поля слияния от обычного текста. Если этот параметр включен, поля отображаются на сером фоне. На печать этот фон, естественно, не выводится.
Проще всего осуществить слияние данных, следуя указаниям Мастера слияния. В версиях после Word2003 Мастер слияния запускается с помощью кнопки Начать слияние на вкладке Рассылки
В версиях до Word2007 следует выполнить команду меню Сервис -- Письма и рассылки -- Слияние. Кроме того, для более удобной работы версиях до Word2007 можно вывести панель инструментов Слияние
Ещё раз обращаю внимание, что в бланке письма содержится только общий для всех писем текст, поэтому обращение выглядит как Уважаем!, а номер карты и дата пропущены.
Выбираем поле Имя, нажимаем Вставить, то же самое для поля Отчество. Закрываем окно Вставка полей слияния и добавляем пробелы между вставленными полями. Если параметр Затенение полей установлен в положение Всегда, то вставленные поля будут отчетливо видны на сером фоне. Устанавливаем курсор после №, снова нажимаем ссылку Другие элементы. , выбираем № клубной карты - Вставить. Аналогично вставляем поле Дата окончания действия карты
Кроме указанных выше полей требуется вставить окончание обращения ый(ая), которое зависит от значения поля Пол. Для этого воспользуемся специальным полем, позволяющим вставлять одно из двух значений в зависимости от данных. Поставим курсор сразу после слова "Уважаем", нажмём кнопку Правила на вкладке Рассылки и выберем вариант IF. THEN. ELSE. В версиях до Word2007 аналогичная кнопка называется Добавить поле Word и находится на панели инструментов Слияние
В раскрывшемся диалоговом окне зададим параметры
После нажатия ОК, получим результат
Автоматизация заполнения и вывода файлов по шаблонам рутинных документов это одна из та областей в отрасли строительства по которой традиционно софт, кроме бухгалтерского, находится на уровне вылизанных поделок, на мой скромный взгляд. Поэтому, развивая тему, приглашаю обсудить те проблемы и возможности, с которыми пришлось столкнуться в процессе реализации на базе MS Excel.
Со времени предыдущей статьи прошло уже пол года. За это время при помощи этой заготовки была разработана текстовая часть Исполнительной документации и сдана Заказчику. По итогам работы и отзывам редких участников в файл были внесены следующие правки, о которых я бы хотел поговорить и это 3 большие темы:
- Эстетика и юзабилити
- Оптимизация кода + нововведения
- Структура и связи
1. Эстетика и юзабилити
— Таблицы это в первую очередь таблицы, безликие ячейки с подписанными колонками и строками. Однако очень часто мы сталкиваемся с ситуацией, когда необходимы дополнительные пояснения к значению, которое будет находится в ячейке, или требуется дополнительно активизировать внимание пользователя на важности вводимого значения. Особенно важно, если у Вас, как в моем случае, строки в колонке очень длинной таблицы содержат разноплановую информацию, например: даты, виды работ, материалы, подписанты и многие др. В таких случаях у нас есть 2 инструмента для решения задачи:
Есть и минусы такого решения, в частности всплывающие подсказки могут раздражать, но в ситуации, когда на объекте 15" мониторы на ноутбуках с разрешением 1366×768 это разумный компромисс, что бы рабочая область была как можно больше.
Если внимательно проанализировать данные, то окажется что в таблице будут ячейки 3х типов:
- ячейки в которые непосредственно необходимо вводить новую текстовую информацию;
- ячейки, значение которых может принимать значение из ограниченного диапазона, введенного заранее, например: ФИО и должность подписантов;
- ячейки в которых прописаны формулы, например есть часть данных которая будет повторяться из акта в акт и такую информацию достаточно ввести один раз, например: наименование объекта, участок, организация и т.п.; либо формулы призванные реализовать технические возможности, например: переноса строки, подтягивание объемов работ, регалий по ФИО и т.п.
Здесь первая процедура постоянно будет защищать лист при помощи пароля 111, вторая будет блокировать функционал вырезать-вставить. Надо ли говорить, что это все работает только при включенных макросах, но с другой стороны без них и файл на 100% функционировать не будет.
Для случаев же п.2 разумно завести лист где столбцы будут содержать меняющиеся значения, прописать в них ссылки на диапазоны, присвоить им имена, т.е. на вкладке «Формулы» -> «Диспетчер имен» каждому диапазону присвоить имена и через вкладку «Данные» -> пункт меню «Проверка данных» -> вкладка «Параметры» -> условие проверки — «Список» реализовать выпадающее меню.
И, конечно, не забывайте ставить условия форматирования цветом, например для случаев, когда заполнены все необходимые строки в столбце через «Условное форматирование», например формула условного форматирования закрашивает ячейку, если следующие ячейки под ней содержат текст: =И(ДЛСТР(E5)>0; ДЛСТР(E6)>0)
2. Оптимизация кода + нововведения
Начать придется издалека, а именно вернуться к вопросу о реализации механизма заполнения шаблона. Если Вы решите заполнить шаблон в формате Excel и в формате Word, то это будут совершенно 2 разных механизма. В основе своей в файл Excel пишутся значения в конкретные ячейки файла или диапазоны ячеек и имеют привязку вида (у, х) (не спрашивайте почему у них строка идет впереди столбца при адресации — не знаю), например: Worksheet.Cells(y, x) = k. Отсюда же и первая мысль, что заполнять Excel-шаблон можно либо явным образом, т.е. непосредственно весь макрос будет содержать что откуда берется и куда закладывается, но что если придется вносить изменения в таблицы данных или выйдет новая форма шаблона? Отсюда вторая идея реализации, код которой описан в первой статье — это парсинг некоторых символов, которыми сперва заполняется массив, а так же в свою очередь содержит файл шаблона в нужных местах. Затем в каждой строке шаблона ищется совпадение с элементами массива поочередно, если совпадение есть, то порядковый номер массива привязан к строке таблицы откуда берутся данные, а столбец берется с листа в котором мы указываем какие именно акты мы хотим вывести. Итого несколько вложенных циклов, что накладывает ограничения на форматирование шаблона Excel, чем проще — тем лучше, потому что чем больше ячеек парсить — тем дольше будет происходить заполнение шаблона данными.
По многочисленным просьбам мною была интегрирована возможность вывода в шаблон формата Word, и здесь на самом деле есть 2 способа вывода текста:
когда мы так же считываем массив управляющих кодов, вручную прописываем их в шаблоне через «Вставка» -> «Закладки» и дальше просто прогоняем макросом присваивая закладке данные из соответствующей ей ячейке в файле Excel.
Здесь вынесена в отдельную процедуру обращение к закладке и arrСсылкиДанных(i) — это массив который содержит управляющие символы. Издержки метода, если Вам потребуется сослаться на значение Закладки в другом месте, например дату нужно использовать в заголовке и напротив фамилии каждого подписанта, то необходимо использовать в шаблоне Меню «Вставка» -> пункт меню «Перекрестная ссылка» -> Тип ссылки: «Закладка», Вставить ссылку на: «Текст закладки» и снять галочку «Вставить как гиперссылку». Что бы это отобрадзилось корректно не забудте обновить в конце макроса перед выводом поля Wd.Fields.Update
Здесь нужно обратить внимание, что у каждой таблицы в Word есть свой внутренний номер, методом нехитрого перебора Вы найдете нужный, а дальше принцип тот же, что и в Excel.
Между выводами в файлы форматов Word и Excel есть огромная пропасть, которая заключается в следующем:
Шаблон Excel требует перед использованием настроить отображение под конкретный принтер, т.к. фактическая область печати разнится от модели к модели. Так же перенос строки текста возможен, но только в пределах ячейки/объединенных ячеек. В последнем случае не будте автораздвигания строки, в случае переноса текста. Т.е. Вам вручную придется заранее определит границы области, которые будут содержать текст, который в свою очередь в них еще должен убраться. Зато Вы точно задали границы печати и выводимого текста и уверены, что не съедет информация (но не содержание) с одного листа на другой.
Шаблон Word при настройке автоматически переносит текст на последующую строку, если он не убрался по ширине ячейки/строки, однако этим самым он вызывает непрогнозируемый сдвиг текста по вертикали. Учитывая тот факт, что по требованиям к Исполнительной документации в строительстве ЗАПРЕЩЕНО один акт печатать на 2х и более листах, то это в свою очередь так же рождает проблемы.
Вторым большим нововведением стал отказ от реализации переноса текстовых строк с макроса VBA и заменой на функцию Excel, благодаря чему ускорилась работа с файлом.
Для первой строки:
<=ЕСЛИОШИБКА(ЕСЛИ($F$20<>"-"; ПСТР('Данные для проекта'!$C$3; СУММ(ДЛСТР(F$1:F1))+1;105-ПОИСКПОЗ(" *"; ПРАВСИМВ(ПСТР('Данные для проекта'!$C$3; СУММ(ДЛСТР(F$1:F1))+1;105); СТРОКА($1:$10));)));"-")>
Здесь используется принцип массивов, т.е. вводится такой текст по Ctrl + Shift + Enter, а не обычному Enter. Сами формулы располагаются в ячейках F1 и F2. 'Данные для проекта'!$C$3 — ссылка на наименования объекта, длина текста которого более 105 символов. Перенос организуется в случае превышения длины текста в 105 символов.
Еще одним нововведением стал общий реестр, а так же контроль списания материалов по актам АОСР, но здесь ничего нового, просто парсинг соответствующих строк в свяске ИНДЕКС + ПОИСКПОЗ, которые расписаны во многих мануалах.
3. Структура и связи
Но мой пост так бы и остался рядовым постом с очередной игрой в изобретание велосипеда инструментами, которые рассчитаны на совершенно другое, если бы ни одно НО(!) Месячно-суточный график.
Идея о том, что можно именно на него много чего повесить, например заполнение Общего журнала работ в части Раздела 3 — наименование работ по датам, очередность и необходимость Актов освидетельствования скрытых работ и не только — завладела моими мыслями. Обычно в Excel закрашивают даты, в зависимости от диапазонов дат — начало и конец, но не на стройке. На стройке в календарном графике пишут объемы, а в зависимости от того с какой даты напротив наименования работ стоят объемы и по которую — получаются диапазоны дат отчетных периодов. На скриншоте серым помечены объемы попадающие в систематизированные отчетные периоды (1мес). Таким образом получается, что если:
Хотя в среднем для каждодневных задач автоматизация не требуется, бывают случаи, когда она может быть необходима. Создание множества диаграмм, рисунков, таблиц и отчётов может утомить, если вы работаете вручную. Так быть не должно. Специально к старту нового потока курса Fullstack-разработчик на Python делимся с вами кейсом постройки конвейера на Python, с помощью которого Excel и Word легко интегрировать: нужно создать таблицы в Excel, а затем перенести результаты в Word, чтобы практически мгновенно получить отчёт.
Openpyxl
Встречайте Openpyxl — возможно, одну из самых универсальных связок [биндингов] с Python, которая сделает взаимодействие с Excel очень простым. Вооружившись этой библиотекой, вы сможете читать и записывать все нынешние и устаревшие форматы Excel, то есть xlsx и xls.
Openpyxl позволяет заполнять строки и столбцы, выполнять формулы, создавать 2D и 3D диаграммы, маркировать оси и заголовки, а также предоставляет множество других возможностей, которые могут пригодиться.
И самое важное — этот пакет позволяет вам перебирать бесконечное количество строк и столбцов в Excel, тем самым избавляя вас от всех этих надоедливых вычислений и построения графиков, которые вам приходилось делать раньше.
Python-docx
Затем идёт Python-docx, этот пакет для Word — то же самое, что Openpyxl для Excel. Если вы ещё не изучили его документацию, вам, вероятно, стоит взглянуть на неё. Python-docx — без преувеличения один из самых простых и понятных мне наборов инструментов, с которыми я работал с тех пор, как начал работать с самим Python.
Python-docx позволяет автоматизировать создание документов путём автоматической вставки текста, заполнения таблиц и рендеринга изображений в отчёт без каких-либо накладных расходов. Без лишних слов давайте создадим наш собственный автоматизированный конвейер. Запустите Anaconda (или любую другую IDE по вашему выбору) и установите эти пакеты:
Автоматизация Microsoft Excel
Сначала загрузим уже созданный лист Excel, вот так:
Теперь переберём все строки в нашей таблице, чтобы вычислить и вставить значения мощности, умножив ток на напряжение:
Как только это будет сделано, мы используем рассчитанные значения мощности, чтобы сгенерировать линейную диаграмму, которая будет вставлена в указанную ячейку, код показан ниже:
Автоматически созданная таблица Excel
Извлечение диаграммы
Теперь, когда мы сгенерировали нашу диаграмму, нам нужно извлечь её как изображение, чтобы мы могли использовать её в нашем отчёте Word. Сначала укажем точное местоположение файла Excel, а также место, где должно быть сохранено изображение диаграммы:
Затем откройте электронную таблицу, используя следующий метод:
Позднее вы сможете перебирать все объекты диаграммы в электронной таблице (если их несколько) и сохранять их в указанном месте:
Автоматизация Microsoft Word
Теперь, когда у нас есть сгенерированное изображение диаграммы, мы должны создать шаблон документа, который в принципе является обычным документом Microsoft Word (.docx), сформированным именно так, как мы хотим: отчёт содержит шрифты, размеры шрифтов, структуру и форматирование страниц.
Теперь всё, что нам нужно сделать, — создать плейсхолдеры для сгенерированного нами контента, то есть табличные значения и изображения, и объявить их с именами переменных, как показано ниже.
Шаблон документа Microsoft Word
Любой сгенерированный контент, включая текст и изображения, может быть объявлен в двойных фигурных скобках >. В случае таблиц вам нужно создать таблицу со строкой шаблона со всеми включёнными столбцами, затем нужно добавить одну строку вверху и одну строку ниже со следующей нотацией:
На рисунке выше — имена переменных:
table_contents для словаря Python, в котором будут храниться наши табличные данные;
Index для ключей словаря (первый столбец);
Power, Current и Voltage для значений словаря (второй, третий и четвёртый столбцы).
Затем импортируем наш шаблонный документ в Python и создаём словарь, в котором будут храниться значения нашей таблицы:
Далее импортируем ранее созданное в Excel изображение диаграммы и создадим другой словарь для создания экземпляров всех объявленных в документе шаблона переменных-заполнителей:
И, наконец, визуализируем отчёт с нашей таблицей значений и изображением диаграммы:
Результаты
И вот — автоматически сгенерированный отчёт Microsoft Word с числами и созданной в Microsoft Excel диаграммой. Мы получили полностью автоматизированный конвейер, его можно использовать, чтобы создать столько таблиц, диаграмм и документов, сколько вам потребуется.
Автоматически сгенерированный отчёт
Исходный код
Вот мой репозиторий на GitHub с шаблоном документа и исходным кодом для этого туториала. А вот ссылка на курс Fullstack-разработчик на Python, который сделает из вас настоящего универсального солдата от кодинга.
Узнайте, как прокачаться и в других специальностях или освоить их с нуля:
Как автоматически по требованию создать новый файл на основе нужных данных из других (другого) файла?
Вижу так: подготовил данные в исходном файле, в нем же нажал кнопку и новый файл из данных выбранного диапазона сформировался
Как автоматически по требованию создать новый файл на основе нужных данных из других (другого) файла?
Вижу так: подготовил данные в исходном файле, в нем же нажал кнопку и новый файл из данных выбранного диапазона сформировался Igor_N
Привет!
1. Прочитать правила форума
2. Подготовить файл-пример
3. Поздороваться
4. Описать исходную ситуацию и желаемый результат
Привет!
1. Прочитать правила форума
2. Подготовить файл-пример
3. Поздороваться
4. Описать исходную ситуацию и желаемый результат Russel
Доброе утро, день, вечер, ночь!
Как автоматически по требованию создать новый файл на основе нужных данных из других (другого) файла?
Вижу так: подготовил данные в исходном файле, в нем же нажал кнопку и новый файл из данных выбранного диапазона сформировался, данные поместились в определенное место.
Подготовил 2 файла:
1) Исходный с данными , вычислениями, результатом и, конечно же, с волшебной кнопкой
2) Файл с итогом вычислений в который после нажатия кнопки "перелились" только те данные которые мне нужно и поместились в нужные мне ячейки
Доброе утро, день, вечер, ночь!
Как автоматически по требованию создать новый файл на основе нужных данных из других (другого) файла?
Вижу так: подготовил данные в исходном файле, в нем же нажал кнопку и новый файл из данных выбранного диапазона сформировался, данные поместились в определенное место.
Подготовил 2 файла:
1) Исходный с данными , вычислениями, результатом и, конечно же, с волшебной кнопкой
2) Файл с итогом вычислений в который после нажатия кнопки "перелились" только те данные которые мне нужно и поместились в нужные мне ячейки Igor_N
Доброе утро, день, вечер, ночь!
Как автоматически по требованию создать новый файл на основе нужных данных из других (другого) файла?
Вижу так: подготовил данные в исходном файле, в нем же нажал кнопку и новый файл из данных выбранного диапазона сформировался, данные поместились в определенное место.
Подготовил 2 файла:
1) Исходный с данными , вычислениями, результатом и, конечно же, с волшебной кнопкой
2) Файл с итогом вычислений в который после нажатия кнопки "перелились" только те данные которые мне нужно и поместились в нужные мне ячейки Автор - Igor_N
Дата добавления - 22.02.2019 в 11:44
= Мир MS Excel/Статьи об Excel
Приёмы работы с книгами, листами, диапазонами, ячейками [6] |
Приёмы работы с формулами [13] |
Настройки Excel [3] |
Инструменты Excel [4] |
Интеграция Excel с другими приложениями [4] |
Форматирование [1] |
Выпадающие списки [2] |
Примечания [1] |
Сводные таблицы [1] |
Гиперссылки [1] |
Excel и интернет [1] |
Excel для Windows и Excel для Mac OS [2] |
Если нам не требуется (а иногда и нежелательно) обновлять в документе таблицу или диаграмму, полученную из Excel, то используем внедрение. При этом в документ помещается статическая копия данных, т.е. внедрённый объект становится частью документа Word и уже никак не связан с источником данных. Размер файла документа при этом, естественно, увеличивается.
Если же нам нужно поддерживать данные, полученные из Excel, в актуальном состоянии, следует использовать связывание. При этом в документ помещается ссылка на объект Excel, соответственно, при изменении исходной таблицы или диаграммы данные в документе также изменятся.
1 способ. Через буфер обмена
Это самый простой и очевидный способ. Выделяем на листе Excel диапазон ячеек или диаграмму, любым способом выполняем команду Копировать, переходим в документ Word и выполняем команду Вставить. При этом таблица вставляется как таблица Word с возможностью редактирования средствами Word, а диаграмма в версиях до Word 2007 включительно вставляется как внедрённый объект (см. ниже) , а начиная с Word 2010 - как рисунок . Чтобы диаграмма начиная с Word 2010 вставилась как внедренный объект, следует использовать Параметры вставки
и в раскрывшемся диалоговом окне на вкладке Создание ищем в списке строчку Лист Microsoft Excel и нажимаем ОК
После этого на странице документа мы видим фрагмент листа Excel, а также ленту с вкладками (или меню) Excel.
Тот же результат получится, если на вкладке Вставка раскрыть список под кнопкой Таблица и выбрать вариант Таблица Excel.
В версиях до Word 2003 включительно можно использовать кнопку Добавить таблицу Excel на Стандартной панели инструментов.
Таким образом, мы можем создавать таблицу Excel, используя все возможности этой программы, прямо в документе.
Если мы хотим создать внедрённую диаграмму, то в диалоговом окне Вставка объекта на вкладке Создание выбираем строчку Диаграмма Microsoft Excel. В этом случае будет создан не один лист Excel, а два: на первом будет пример диаграммы, а на втором - исходные данные для неё, которые следует заменить своими исходными данными.
После того как таблица/диаграмма создана, щелчок мыши вне рамки объекта возвращает нас в документ. Если требуется вернуться к редактированию объекта, достаточно сделать по нему двойной щелчок мышкой.
Примечание. Если у Вас параметр Затенение полей установлен в положение Всегда, а заливка ячеек отсутствует, то таблица будет затенена. На печать, естественно, она будет выводиться без заливки.
Для этого на вкладке Вставка в группе Текст нажимаем кнопку Объект и в раскрывшемся диалоговом окне переходим на вкладку Создание из файла. С помощью кнопки Обзор находим в Проводнике нужный файл Excel и нажимаем ОК.
При этом в документ вставляется лист, который был активен при последнем сохранении книги. Но войдя в режим редактирования объекта, можно перейти на любой другой лист.
Изначально лист Excel вставляется в масштабе 100%, из-за этого большая таблица или диаграмма может выйти за край страницы документа. В этом случае размером вставленного объекта управляют с помощью размерных маркеров по углам и по серединам сторон рамки выделения. Кроме того, такие же размерные маркеры доступны, если войти в режим редактирования объекта.
В чём отличие? Если Вы перемещаете размерные маркеры, находясь в режиме редактирования объекта, то Вы увеличиваете/уменьшаете количество видимых строк/столбцов.
Если же Вы ту же самую операцию делаете, не входя в режим редактирования, то Вы просто растягиваете/сжимаете рисунок
Создать внедрённый объект из файла можно также, перетащив мышкой значок файла Excel на страницу документа Word
Примечание. Иногда после редактирования таблицы и возвращения в Word, мы видим, что таблица отображается не полностью, она как бы "уехала" вверх или влево.
В этом случае следует вернуться в режим редактирования и обратить внимание, какая ячейка осталась активной.
Выделяем на листе Excel диапазон ячеек или диаграмму, выполняем команду Копировать, переходим в документ Word и даём команду Специальная вставка. Размещение этой команды зависит от версии Word.
В версиях до Word 2003 включительно она находится в меню Правка. Начиная с Word 2007 эту команду можно найти в раскрывающемся списке кнопки Вставить на вкладке Главная. Кроме того, начиная с Word 2010 в контекстном меню присутствует команда Параметры вставки, с помощью которой можно выбрать варианты связывания.
Для установления связи с файлом источником при создании объекта из файла достаточно в диалоговом окне Вставка объекта поставить флажок Связь с файлом
Если выбран вариант Да, то данные в таблице документа обновятся в соответствии с последними изменениями в книге Excel.
Если во время изменения данных в электронной таблице документ Word открыт, то связанная таблица обновляется автоматически (по умолчанию).
Чтобы установленная связь работала, требуется, чтобы файл с электронной таблицей не переименовывался и не перемещался. Если всё же такое произошло, то чтобы заново прописать путь к источнику, можно воспользоваться диалоговым окном Связи из контекстного меню связанной таблицы.
Как видим, в этом диалоговом окне есть возможность Сменить источник , а также Разорвать связь , если таковая больше не требуется. Кроме того, здесь же можно выбрать способ обновления связи: автоматически или по запросу .
В версии до Word 2007 это диалоговое окно также открывается при выполнении команды меню Правка -- Связи.
В Word 2007 его можно открыть, нажав кнопку Office и выбрав команду Подготовить -- Изменить ссылки на файлы.
Начиная с Word 2010 для этого выбираем вкладку Файл -- Сведения -- Связанные документы -- Изменить связи с файлами.
Читайте также: