По вашему запросу ничего не найдено :(
Убедитесь, что запрос написан правильно, или посмотрите другие наши статьи:
img
В этой статье мы расскажем как интегрировать Python c Excel и Word, чтобы без проблем создавать автоматические отчеты. Microsoft Excel и Microsoft Word – это, без доли сомнений, две наиболее широко используемые программы как в мире бизнеса, так и в некорпоративной сфере. Они практически являются синонимами слову «работа». Как правило, не проходит и недели, чтобы мы тем или иным способом не воспользовались их преимуществами. И хотя для обычных повседневных задач автоматизация не требуется, бывают случаи, когда она может стать необходимостью. А именно, когда у вас есть множество диаграмм, рисунков, таблиц и отчетов, которые необходимо сделать, это может стать очень утомительным занятием, если все это выполнять вручную. А это не должно быть так. На самом деле существует способ создать конвейер в Python, где можно будет легко интегрировать эти программы для создания электронных таблиц в Excel, а затем передавать результаты в Word для создания отчета практически мгновенно. Openpyxl Познакомьтесь с Openpyxl, возможно, одной из самых универсальных привязок в Python, которая превращает взаимодействие с Excel буквально в прогулку по парку. Используя этот пакет, вы сможете читать и записывать все новые и старые форматы Excel, то есть .xlsx и .xls. Openpyxl позволяет заполнять строки и столбцы, выполнять формулы, создавать 2D- и 3D-диаграммы, маркировать оси и заголовки, а также имеет множество других возможностей, которые могут пригодиться. Однако здесь наиболее важно то, что этот пакет позволяет вам перебирать бесконечное количество строк и столбцов Excel, тем самым избавляя вас от всех этих утомительных вычислений и построения графиков, которые вам приходилось делать ранее самим. Python-docx А затем появляется Python-docx – пакет для Word – то же, что Openpyxl для Excel. Если вы все еще не изучили их документацию, то вам все же стоит на нее взглянуть. Python-docx – без преувеличения один из самых простых и понятных наборов инструментов, с которыми я работал с тех пор, как начал работать с Python. Он позволяет автоматизировать создание документов, автоматически вставляя текст, заполняя таблицы и отображая изображения в отчете без каких-либо усилий. Без лишних церемоний давайте создадим наш собственный автоматизированный конвейер. Запустите IDE по вашему выбору и установите следующие пакеты: pip install openpyxlpip install python-docx Автоматизация Microsoft Excel Для начала загрузим уже созданную книгу Excel (как показано ниже): workbook = xl.load_workbook('Book1.xlsx') sheet_1 = workbook['Sheet1'] Затем мы пройдемся по всем строкам в нашей электронной таблице для того, чтобы вычислить и вставить значение мощности, которую мы получим, умножив ток на напряжение: for row in range(2, sheet_1.max_row + 1): current = sheet_1.cell(row, 2) voltage = sheet_1.cell(row, 3) power = float(current.value) * float(voltage.value) power_cell = sheet_1.cell(row, 1) power_cell.value = power Как только мы сделаем это, то мы сможем использовать рассчитанные значения мощности для построения линейной диаграммы, которая будет вставлена в указанную ячейку, как показано ниже: values = Reference(sheet_1, min_row = 2, max_row = sheet_1.max_row, min_col = 1, max_col = 1) chart = LineChart() chart.y_axis.title = 'Power' chart.x_axis.title = 'Index' chart.add_data(values) sheet_1.add_chart(chart, 'e2') workbook.save('Book1.xlsx') Извлечение диаграммы Теперь, когда мы построили нашу диаграмму, нам нужно ее извлечь в формате изображения для того, чтобы мы могли использовать ее в нашем отчете Word. Для начала объявим точное местоположения нашего файла Excel, а также место, куда мы хотим сохранить изображение получившейся диаграммы: input_file = "C:/Users/.../Book1.xlsx" output_image = "C:/Users/.../chart.png" Затем необходимо получить доступ к таблице, используя следующий метод: operation = win32com.client.Dispatch("Excel.Application") operation.Visible = 0 operation.DisplayAlerts = 0 workbook_2 = operation.Workbooks.Open(input_file) sheet_2 = operation.Sheets(1) И далее вы можете перебрать все диаграммы в таблице (если их больше одной) и сохранить их в указанном месте: for x, chart in enumerate(sheet_2.Shapes): chart.Copy() image = ImageGrab.grabclipboard() image.save(output_image, 'png') passworkbook_2.Close(True) operation.Quit() Автоматизация Microsoft Word Теперь, когда у нас есть изображение диаграммы, мы должны создать шаблон документа, который представляет собой обычный документ Microsoft Word (.docx), сформированный именно так, как нам необходимо, чтобы наш отчет имел определенный тип и размер шрифта, нужное форматирование и структуру страницы. Далее, все, что нам необходимо сделать, это создать заполнители для нашего автоматизированного содержимого, то есть значений таблиц и изображений, и объявить их с переменными, как показано ниже. Внутри двойных фигурных скобок {{variable_name}} может быть объявлен любое автоматизированное содержимое, включая текст и изображения. Для таблиц вам необходимо создать таблицу с шаблонной строкой, в которую включены все столбцы, а затем вам необходимо добавить еще одну строку выше и одну строку ниже со следующими обозначениями: Первая строка: {%tr for item in variable_name %} Последняя строка: {%tr endfor %} На рисунке выше указаны следующие имена переменных: table_contents для словаря Python, в котором будут храниться наши табличные данные. Index для ключей словаря (первый столбец). Power, Current и Voltage для значений словаря (второй, третий и четвертый столбцы). Затем мы импортируем наш документ-шаблон в Python и создаем словарь, в котором будут храниться значения нашей таблицы: template = DocxTemplate('template.docx') table_contents = []for i in range(2, sheet_1.max_row + 1): table_contents.append({ 'Index': i-1, 'Power': sheet_1.cell(i, 1).value, 'Current': sheet_1.cell(i, 2).value, 'Voltage': sheet_1.cell(i, 3).value }) Далее мы импортируем изображение диаграммы, которое ранее мы создали в Excel, и создаем еще один словарь для создания экземпляров всех переменных-заполнителей, объявленных в документе-шаблоне: image = InlineImage(template,'chart.png',Cm(10))context = { 'title': 'Automated Report', 'day': datetime.datetime.now().strftime('%d'), 'month': datetime.datetime.now().strftime('%b'), 'year': datetime.datetime.now().strftime('%Y'), 'table_contents': table_contents, 'image': image } И, наконец, мы отображаем отчет с нашей таблицей значений и изображением диаграммы: template.render(context) template.save('Automated_report.docx') Заключение И вот, мы получили автоматически созданный отчет Microsoft Word с числами и диаграммами, созданными в Microsoft Excel. При этом у вас есть полностью автоматизированный конвейер, который можно использовать для создания любого количества таблиц, диаграмм и документов. Исходный код программы import openpyxl as xl from openpyxl.chart import LineChart, Reference import win32com.client import PIL from PIL import ImageGrab, Image import os import sys from docx.shared import Cm from docxtpl import DocxTemplate, InlineImage from docx.shared import Cm, Inches, Mm, Emu import random import datetime import matplotlib.pyplot as plt ######## Generate automated excel workbook ######## workbook = xl.load_workbook('Book1.xlsx') sheet_1 = workbook['Sheet1'] for row in range(2, sheet_1.max_row + 1): current = sheet_1.cell(row, 2) voltage = sheet_1.cell(row, 3) power = float(current.value) * float(voltage.value) power_cell = sheet_1.cell(row, 1) power_cell.value = power values = Reference(sheet_1, min_row = 2, max_row = sheet_1.max_row, min_col = 1, max_col = 1) chart = LineChart() chart.y_axis.title = 'Power' chart.x_axis.title = 'Index' chart.add_data(values) sheet_1.add_chart(chart, 'e2') workbook.save('Book1.xlsx') ######## Extract chart image from Excel workbook ######## input_file = "C:/Users/.../Book1.xlsx" output_image = "C:/Users/.../chart.png" operation = win32com.client.Dispatch("Excel.Application") operation.Visible = 0 operation.DisplayAlerts = 0 workbook_2 = operation.Workbooks.Open(input_file) sheet_2 = operation.Sheets(1) for x, chart in enumerate(sheet_2.Shapes): chart.Copy() image = ImageGrab.grabclipboard() image.save(output_image, 'png') pass workbook_2.Close(True) operation.Quit() ######## Generating automated word document ######## template = DocxTemplate('template.docx') #Generate list of random values table_contents = [] for i in range(2, sheet_1.max_row + 1): table_contents.append({ 'Index': i-1, 'Power': sheet_1.cell(i, 1).value, 'Current': sheet_1.cell(i, 2).value, 'Voltage': sheet_1.cell(i, 3).value }) #Import saved figure image = InlineImage(template,'chart.png',Cm(10)) #Declare template variables context = { 'title': 'Automated Report', 'day': datetime.datetime.now().strftime('%d'), 'month': datetime.datetime.now().strftime('%b'), 'year': datetime.datetime.now().strftime('%Y'), 'table_contents': table_contents, 'image': image } #Render automated report template.render(context) template.save('Automated_report.docx')
img
В статье мы попытаемся разобраться в том, что такое Ephone и Ephone-DN в CME (CUCME) , в чем их отличие и как с ними работать. Если описать все в двух словах, то для CME Ephone это телефонный аппарат, а Ephone-DN это телефонный номер. А теперь рассмотрим это подробнее. Настройка Ephone-DN Ephone-DN в простом представлении это телефонный номер (Directory Number), который может быть назначен на одну или несколько кнопок IP телефона Cisco. Каждый созданный ephone-dn можно настроить в режиме single-line или dual-line. Вот в чем разница: Single-line ephone-dn: в этом режиме ephone-dn может одновременно посылать и принимать только один вызов. Если звонок приходит на ephone-dn, который уже учавствует в разговоре, то вызывающий абонент услышит сигнал “занято” Dual-line ephone-dn: в этом режиме телефон может управиться с двумя одновременными вызовами. Это полезно для функций консультативного трансфера, конференций и функции ожидания вызова. Обычно dual-line используется для IP-телефонов пользователей, а single-line для сетевых функций, таких как интерком или пейджинг. Рассмотрим конфигурацию этих двух вариантов: CME#conf t – вход в режим конфигурации CME(config)#ephone-dn 1 – создание ephone-dn c меткой 1 (метка используется при привязке к ephone, ограничивается параметром max-dn) CME(config-ephone-dn)# number 1000 – указание номера (до 16 цифр) CME(config-ephone-dn)#exit – выход в предыдущее меню CME(config)#ephone-dn 2 dual-line – создание ephone-dn в режиме dual-line CME(config-ephone-dn)#number 1001 – указание номера Новые версии IOS поддерживают конфигурацию octo-line, которая включает поддержку восьми звонков на линии. Такая конфигурация можно использоваться для телефонов на ресепшене, shared lines (когда много людей используют один и тот же номер) или как ресурс конференции. Также при создании ephone-dn можно указать дополнительный номер, используя команду secondary, например для приема вызовов с ТфОП используя DID(Direct Inward Dial) . CME(config)#ephone-dn 2 dual-line CME(config-ephone-dn)#number 1001 secondary 849964919131001 Настройка Ephone Ephone представляет собой конфигурацию, которая применяется к определенному IP-телефону Cisco или софтфону. Для добавления телефона необходимо ввести команду ephone, затем метку (метка ограничивается параметром max-ephones), после чего мы провалимся в раздел конфигурации ephone, где нужно логически связать ephone-dn с физическим IP телефоном, который он представляет. Для этого используется MAC-адрес телефона Cisco, узнать можно который тремя способами: он написан на коробке из под телефона, он написан на задней панели самого телефона и его можно найти в настройках самого телефона в меню настроек. Рассмотрим пример: CME(config)#ephone 1 – создание ephone с меткой 1 CME(config)#mac-address 0014.1c48.12ab – MAC-адрес телефона, с которым будет связан ephone 1 Связывание Ephone и Ephone-dn Теперь можно связать созданные Ephone и Ephone-dn, и делается это при помощи присваивания ephone-dn к физической кнопке телефона ephone . Синтаксис команды следующий: button [физическая кнопка] [разделитель] [метка ephone-dn] Например, рассмотрим пример, в котором мы присваиваем ephone-dn 2 на первую клавишу на телефоне ephone 1: CME(config)#ephone 1 – вход в меню настройки ephone CME(config-ephone)#button 1:2 – сопоставление ephone-dn с клавишей CME(config-ephone)#restart – перезагружает телефон, после чего он перекачивает конфигурационный файл с tftp сервера. Разделитель в виде двоеточия обозначает, что это будет обычный звонок. Существует несколько видов разделителей: : - обычный звонок, визуальная индикация включена b – звуковой сигнал (beep). Визуальная индикация на телефоне такая же, как и при обычном звонке f – функциональный звонок. Тип звонка отличается при внутренних и внешних вызовах m – режим мониторинга на общей линии (shared line). Индикатор состояния линии показывает, используется ли линия. Может использоваться как быстрый набор для просматриваемой линии. Отсутствует возможность принимать звонки. w – режим просмотра для всех линий, у которых этот номер является основным s – тихий звонок, подавляет звуковые сигналы и звук ожидания вызова для этой линии. Визуальная индикация такая же, как и при обычном звонке. Выглядеть это будет так: На телефон можно назначить несколько линий, путем ввода нескольких команд button в режиме конфигурации ephone. Для проверки можно использовать команду show ephone: CME# show ephone ephone-1 Mac:0014.1c48:12ab TCP socket: [5] activeLine:0 REGISTERED in SCCP ver 8 and Server in ver 8 mediaActive:0 offhook:0 ringing:0 reset:0 reset_sent:0 paging 0 debug:0 caps:7 IP: 192.168.1.6 14719 7912 keepalive 2702 max_line 2 dual-line button 1: dn 2 number 1001 CH1 IDLE CH2 IDLE button 2: dn 1 number 1000 CH1 IDLE
img
Session Border Controller (контроллер граничных сессий) - сетевое устройство, которое может обеспечить безопасность VoIP, а так же соединять несовместимые (разнородные) сигнальные протоколы и медиа потоки, поступающие от различных устройств. SBC – устройства используются в корпоративных сетях и сетях провайдеров услуг и, как правило, развертываются на границе сети (точка входа провайдера в корпоративный контур). В основном, несмотря на способность устройств поддерживать H.323, SCCP и прочие, фокус работы SBC сделан на обеспечении безопасности SIP – протокола, а так же сопряжении различных версий SIP. Основная идея SBC защищает от атак сеть телефонии и соответствующие сервера, выполняя роль B2BUA (back-to-back user agent), схожую по типу работы с SIP прокси – сервером. Контроллер терминирует каждую сессию (завершает), а затем заново ее инициирует, выступая в роли агентского сервера UAS (User Agent Server) и агентским клиентом UAC (User Agent Client), работая с каждым из «плеч» вызова по отдельности. На базе собственных мощностей SBC реализует списки контроля доступа ACL, ограничение DDOS атак, а так же анализ пакетов на предмет искажения информации с целью нанести ущерб. Анализируя SIP, SBC анализирует заголовки и поле полезной нагрузки. Особенно это актуально в SDP – сообщениях, к которым может применяться множество правил модификации. Помимо сигнальной информации, SBC обрабатывает RTP потоки, тем самым, обеспечивает не только шифрование медиа, но и выполняет функции транскодинга (преобразования потока из одного кодека в другой) в случаях, когда две стороны SIP – коммуникации не могут согласовать параметры передачи данных в сообщениях SDP. Кстати, на SBC обычно реализуют так называемый SIP forking, который позволяет дублировать сессию на третье устройство, например, такое как система записи телефонных разговоров. В современных версиях SBC, сигнальная информация и потоки изолированы друг от друга (с точки зрения обработки устройством) – это обеспечивает высокие параметры масштабирования. Давайте рассмотрим на примеры схемы ниже принцип работы SBC:
ВЕСЕННИЕ СКИДКИ
40%
50%
60%
До конца акции: 30 дней 24 : 59 : 59