Создание web документов в excel
В одной из статей мы изучали техники преобразования листов Excel в HTML. Сегодня, кажется, все переезжают в облачные хранилища, так чем мы хуже? Новые технологии предоставления общего доступа к данным Excel через интернет – это простой способ, дающий множество возможностей и преимуществ, которые Вы можете использовать.
С появлением Excel Online Вам больше не нужен громоздкий код HTML, чтобы разместить электронные таблицы в сети интернет. Просто сохраните рабочую книгу онлайн и получайте доступ к ней буквально из любого места, откройте к ней доступ другим пользователям и работайте вместе над одной и той же таблицей. Используя Excel Online, Вы можете вставить лист Excel в веб-сайт или в блог и позволить посетителям взаимодействовать с ней, чтобы получить именно ту информацию, которую они хотят найти.
Далее в этой статье мы рассмотрим эти и многие другие возможности, которые предоставляет Excel Online.
Если Вы только начинаете знакомиться с облачными сервисами в целом и с Excel Online в частности, то лёгким стартом будет поделиться уже существующей рабочей книгой, используя привычный интерфейс Excel 2013 на Вашем компьютере.
Все листы Excel Online хранятся в веб-сервисе OneDrive (бывший SkyDrive). Как Вы, вероятно, знаете, это онлайн-хранилище появилось уже некоторое время назад, а теперь оно интегрировано в Microsoft Excel, как доступная в один клик команда интерфейса. Кроме того, гостям, т.е. другим пользователям, с которыми Вы делитесь своими таблицами, теперь не нужна собственная учётная запись Microsoft для того, чтобы просматривать и редактировать те файлы Excel, которыми Вы с ними поделились.
Если у Вас до сих пор нет учётной записи OneDrive, Вы можете создать её прямо сейчас. Этот сервис прост, бесплатен и определённо заслуживает Вашего внимания, поскольку большинство приложений пакета Microsoft Office 2013 (не только Excel), поддерживают OneDrive. После регистрации, выполните следующие шаги:
1. Войдите в Вашу учётную запись Microsoft
Excel покажет окно с предложением подтвердить, что Вы действительно хотите позволить Office соединиться с интернетом. Нажмите Yes (Да) и затем введите данные учётной записи Windows Live.
2. Сохраните лист Excel в облаке
Убедитесь, для Вашего же спокойствия, что открыта нужная рабочая книга, то есть именно та, к которой требуется открыть общий доступ в интернете. Я хочу открыть общий доступ к книге Holiday Gift List, чтобы члены моей семьи и мои друзья могли посмотреть её и посодействовать 🙂
Открыв нужную рабочую книгу, перейдите на вкладку File (Файл) и нажмите Share (Общий доступ) в левой части окна. По умолчанию будет выбран вариант Invite People (Пригласить других людей), далее Вам нужно нажать Save To Cloud (Сохранить в облаке) в правой части окна.
После этого выберите место для сохранения файла Excel. Первым в списке слева стоит OneDrive, и он выбран по умолчанию. Вам остаётся только указать папку для сохранения файла в правой части окна.
Замечание: Если Вы не видите пункт меню OneDrive, значит у Вас нет учётной записи OneDrive, либо Вы не вошли в свою учётную запись.
У меня уже создана специальная папка Gift Planner, и она показана в списке последних папок. Вы можете выбрать любую другую папку, нажав кнопку Browse (Обзор) ниже области Recent Folders (Последние папки), или создать новую папку, кликнув правой кнопкой мыши и выбрав в контекстном меню New (Создать) > Folder (Папку). Когда нужная папка будет выбрана, нажмите Save (Сохранить).
3. Предоставляем общий доступ к листу Excel, сохранённому в интернете
Ваша рабочая книга Excel уже в интернете, и Вы можете просматривать её в своём OneDrive. Если необходимо открыть общий доступ к сохранённым в интернете листам Excel, то Вам осталось сделать всего лишь один шаг – выбрать один из предлагаемых Excel 2013 способов предоставления общего доступа:
Наконец, Вам нужно выбрать, должен ли пользователь войти в свою учётную запись Windows Live, чтобы получить доступ к Вашему онлайн-листу Excel. Я не вижу какой-то определённой причины заставлять их делать это, но решать Вам.
Когда всё готово, жмите кнопку Share (Общий доступ). Каждый приглашённый получит письмо на электронную почту, содержащее ссылку на файл, к которому Вы открыли общий доступ. Чтобы открыть Ваш лист Excel онлайн, пользователю достаточно просто кликнуть по ссылке
После нажатия кнопки Share (Общий доступ), Excel покажет список контактов, которым Вы предоставили доступ к файлу. Если Вы хотите удалить из списка какой-то контакт или изменить разрешения, кликните правой кнопкой мыши по имени этого контакта и выберите соответствующий вариант в контекстном меню.
Совет: Если Вы хотите ограничить область рабочей книги Excel, которая доступна для просмотра другими пользователями, откройте на вкладке File (Файл) раздел Info (Сведения) и нажмите Browser View Options (Параметры просмотра в браузере). Здесь Вы сможете настроить, какие листы и какие именованные элементы можно отображать в интернете.
Вот и всё! Ваша рабочая книга Excel 2013 теперь в сети и доступ для выбранных пользователей к ней открыт. И даже, если Вы не любите работать совместно с кем-нибудь, этот способ позволит получить доступ к файлам Excel откуда угодно, не важно, находитесь Вы в офисе, работаете дома или где-то путешествуете.
Работа с книгами в Excel Online
Если Вы – уверенный обитатель Облачной Вселенной, то без проблем освоите Excel Online за время обеденного перерыва.
Как в Excel Online создать книгу
Чтобы создать новую книгу, нажмите маленькую стрелочку рядом с кнопкой Create (Создать) и в выпадающем списке выберите Excel workbook (Книга Excel).
Чтобы переименовать Вашу онлайн-книгу, кликните имя, заданное по умолчанию, и введите новое.
Чтобы загрузить существующую книгу в Excel Online, нажмите кнопку Upload (Загрузить) на панели инструментов OneDrive и укажите нужный файл, сохранённый на компьютере.
Как редактировать книги в Excel Online
После того, как Вы открыли книгу в Excel Online, с ней можно работать при помощи Excel Web App (так же, как и с Excel, установленном на персональном компьютере), т.е. вводить данные, сортировать и фильтровать, вычислять, используя формулы, и наглядно представлять данные при помощи диаграмм.
Существует только одно существенное различие между веб-версией и локальной версией Excel. Excel Online не имеет кнопки Save (Сохранить), потому что он сохраняет книгу автоматически. Если Вы передумали, нажмите Ctrl+Z, чтобы отменить действие, и Ctrl+Y, чтобы заново выполнить отменённое действие. Для той же цели Вы можете использовать кнопки Undo (Отменить) / Redo (Вернуть) на вкладке Home (Главная) в разделе Undo (Отменить).
Если Вы пытаетесь редактировать какие-то данные, но ничего не происходит, то, скорее всего, книга открыта в режиме только для чтения. Чтобы включить режим редактирования, кликните Edit Workbook (Редактировать книгу) > Edit in Excel Web App (Изменить в Excel Online) и вносите быстрые изменения прямо в веб-браузере. Чтобы получить доступ к возможностям более продвинутого анализа данных, например, к сводным таблицам, спарклайнам или для связи с внешним источником данных, нажмите Edit in Excel (Открыть в Excel), чтобы переключиться к Microsoft Excel на Вашем компьютере.
Когда Вы сохраните лист в Excel, он будет сохранён там, где Вы его изначально создали, то есть в облачном хранилище OneDrive.
Совет: Если Вы хотите сделать быстрые изменения в нескольких книгах, то самым оптимальным способом будет открыть список файлов в Вашем OneDrive, найти нужную книгу, кликнуть по ней правой кнопкой мыши и выбрать необходимое действие из контекстного меню.
Как в Excel Online открыть доступ к листу для других пользователей
… а затем выберите один из вариантов:
Также Вы можете установить права доступа для контактов: право только просматривать или дать разрешение на редактирование документа.
Когда лист редактируют одновременно несколько человек, Excel Online сразу показывает их присутствие и сделанные обновления, при условии, что все редактируют документ в Excel Online, а не в локальном Excel на компьютере. Если Вы нажмёте небольшую стрелку рядом с именем человека в верхнем правом углу листа Excel, то сможете увидеть, какую именно ячейку в данный момент редактирует этот человек.
Как заблокировать редактирование определённых ячеек на листе с общим доступом
Если Вы открываете доступ к онлайн-листам для Вашей команды, то, возможно, захотите дать им права на редактирование только определённых ячеек, строк или столбцов документа Excel. Для этого в Excel на локальном компьютере нужно выбрать диапазон (диапазоны), которые Вы разрешаете редактировать, а затем защитить лист.
- Выберите диапазон ячеек, который могут редактировать Ваши пользователи, откройте вкладку Review (Рецензирование) и в разделе Changes (Изменения) нажмите Allow Users to Edit Ranges (Разрешить изменение диапазонов).
- В диалоговом окне Allow Users to Edit Ranges (Разрешить изменение диапазонов) нажмите кнопку New (Создать), убедитесь, что диапазон указан правильно и нажмите Protect Sheet (Защитить лист). Если Вы хотите позволить Вашим пользователям редактировать несколько диапазонов, то снова нажмите кнопку New (Создать).
- Дважды введите пароль и загрузите защищённый лист в OneDrive.
Как внедрить лист Excel в веб-сайт или блог
Если Вы хотите опубликовать книгу Excel на веб-сайте или в блоге, сделайте для этого в Excel Web App следующие 3 простых действия:
- Откройте книгу в Excel Online, нажмите Share (Общий доступ) >Embed (Внедрить), затем нажмите кнопку Generate (Создать).
- На следующем шаге Вы определяете, как именно должен выглядеть лист в интернете. Вам доступны следующие параметры:
- What to show (Что нужно показывать). В этом разделе Вы можете указать, нужно ли внедрять книгу полностью или только её часть, например, диапазон ячеек, сводную таблицу и так далее.
- Appearance (Внешний вид). Здесь Вы можете настроить внешний вид книги (показать или скрыть линии сетки, заголовки столбцов и строк, включить ссылку для скачивания).
- Interaction (Взаимодействие). Разрешить или не разрешить пользователям взаимодействовать с Вашей таблицей – сортировать, фильтровать и вводить данные в ячейки. Если Вы разрешите ввод данных, то изменения, сделанные другими людьми в ячейках в интернете, не будут сохранены в исходной рабочей книге. Если Вы хотите, чтобы при открытии веб-страницы была открыта определённая ячейка, поставьте галочку Always start with this cell selected (Всегда начинать с этой ячейки) и кликните нужную ячейку в области Preview (Предварительный просмотр), которая находится в правой части диалогового окна.
- Dimensions (Размеры). Введите здесь ширину и высоту окна таблицы в пикселях. Чтобы увидеть фактические размеры окна, нажмите View actual size (Фактический размер представления) над окном Preview (Предварительный просмотр). Помните, что Вы можете задать размер не менее 200 х 100 пикселей и не более 640 х 655 пикселей. Если необходимо получить другой размер, выходящий за рамки этих ограничений, то позже Вы сможете изменить код в любом HTML-редакторе, непосредственно у себя на сайте или в блоге.
- Всё, что Вам осталось сделать, это нажать Copy (Копировать) ниже раздела Embed code (Код внедрения) и вставить код HTML (или JavaScript) в Ваш блог или веб-сайт.
Замечание: Код внедрения – это iframe, поэтому убедитесь, что Ваш сайт поддерживает этот тег, а блог разрешает использовать его в постах.
Внедрённый Excel Web App
То, что Вы видите ниже, это интерактивный лист Excel, который демонстрирует описанную технику в действии. Эта таблица рассчитывает, сколько дней осталось до Вашего следующего дня рождения, годовщины или какого-то другого события и окрашивает промежутки в различные оттенки зелёного, жёлтого и красного. В Excel Web App Вам нужно просто ввести Ваши события в первом столбце, затем попробуйте изменить соответствующие даты и посмотрите на результаты.
Если Вам любопытно, какая здесь использована формула, то, пожалуйста, посмотрите статью Как в Excel настроить условное форматирование дат .
Примечание переводчика: В некоторых браузерах данный iframe может отображаться некорректно или вовсе не отображаться.
Мэшапы в Excel Web App
Если Вы хотите создать более тесное взаимодействие между Вашими веб-листами Excel и другими веб-приложениями или сервисами, то можете использовать JavaScript API, доступный на OneDrive, чтобы создавать интерактивные мэшапы из своих данных.
Ниже Вы видите мэшап Destination Explorer, созданный командой Excel Web App как пример того, что разработчики могут создать для Вашего сайта или блога. Этот мэшап использует API Excel Services JavaScript и Bing Maps, и его задача – помочь посетителям сайта выбрать маршрут для путешествия. Вы можете выбрать место на карте, а мэшап покажет Вам погоду в этом месте или количество туристов, посещающих эти места. На снимке экрана ниже показано наше местоположение 🙂
Как видите, работа в Excel Online предельно проста. Теперь, когда мы познакомились с основами, Вы можете продолжить исследование его возможностей и работать со своими листами легко и уверенно!
Расширите веб-приложение SaaS, чтобы клиенты могли открывать данные с веб-страницы непосредственно Microsoft Excel. Распространенный сценарий состоит в том, что клиенты будут работать с данными в вашем веб-приложении. Затем они захотят скопировать данные в Excel документа. Например, им может потребоваться выполнить дополнительный анализ с помощью Excel. Как правило, клиент должен экспортировать данные в файл, например .csv файл, а затем импортировать эти данные в Excel. Они также должны вручную добавлять Office надстройки в документ.
Уменьшите количество действий, чтобы одна кнопка нажала на веб-страницу, которая создает и открывает Excel документ. Вы также можете встраить Office в документ и отобразить его при открываемом документе. Это гарантирует, что клиент по-прежнему имеет доступ к функциям приложения. Когда документ откроется, данные, выбранные клиентом, и Office надстройка уже доступны для их продолжения работы.
В этой статье показаны код и методы реализации этого сценария в собственном веб-приложении SaaS.
Создание нового документа Excel и встраить Office надстройки
Сначала рассмотрим, как создать Excel на веб-странице и встраить надстройки в документ. В Office пример кода надстройки OOXML показано, как встраить Script Lab в новый Office документ. Хотя пример работает с любым Office документом, мы просто сосредоточимся на Excel таблицах в этой статье. Для создания и запуска примера используйте следующие действия.
Как работает пример
Пример кода использует SDK OOXML для встройки надстройки Script Lab в Excel документ, который вы выбираете. Следующие сведения взяты из раздела О коде в файле readme.
Файл Home.aspx.cs:
Файл AddInEmbedder.cs:
- Предоставляет основную бизнес-логику, которая в этом примере представляет собой метод, который встраит Script Lab.
- Делает вызовы в помощник OOXML в зависимости от типа файла.
Файл OOXMLHelper.cs:
- Предоставляет все подробные манипуляции OOXML.
- Используется стандартный метод проверки файла Office, который является просто вызовом метода Document.Open на нем. Если файл недействителен, метод бросает исключение.
- Содержит в основном код, созданный средствами производительности Open XML 2.5 SDK, которые доступны по ссылке для SDK Open XML 2.5.
Метод GenerateWebExtensionPart1Content в файле OOXMLHelper.cs задает ссылку на ID Script Lab в Microsoft AppSource:
- Значение StoreType — "OMEX", псевдоним Microsoft AppSource.
- Значение Store — "en-US", найденное в разделе Культура Microsoft AppSource для Script Lab.
- Значение Id — это ID актива Microsoft AppSource для Script Lab.
Если вы настраивает надстройка из каталога файлового обмена для автоматического открытия, вы будете использовать различные значения:
Значение StoreType — "FileSystem".
- Значение Store — ЭТО URL-адрес сетевой доли; например, "\\MyComputerMySharedFolder\". Это должен быть точный URL-адрес, который отображается как доверенный адрес каталога в Office Центре доверия.
- Значение Id — это ID приложения в манифесте надстройки.
Дополнительные сведения об альтернативных значениях для этих атрибутов см. в тексте Автоматическое открытие области задач с помощью документа.
Использование пользовательского Fluent интерфейса
Лучше всего использовать пользовательский интерфейс Fluent, чтобы помочь пользователям перейти между продуктами Майкрософт. Всегда следует использовать значок Office, чтобы указать, Office приложение будет запущено с вашей веб-страницы. Давайте изменяем пример кода, чтобы использовать значок Excel, чтобы указать, что оно запускает Excel приложение.
Откройте пример в Visual Studio.
Откройте страницу Home.aspx .
Найдите следующий код, который является кнопкой загрузки в форме.
Замените код кнопки на следующий тег изображения.
Дополнительные сведения см. Office Значки бренда на портале Fluent пользовательского интерфейса.
Upload Excel для Microsoft OneDrive
Мы рекомендуем загружать новые документы в OneDrive, если клиент использует OneDrive. Это упрощает поиск документов и работу с ними. Давайте создадим новый пример кода и посмотрим, как можно использовать SDK microsoft Graph для отправки нового документа Excel в OneDrive.
Использование быстрого запуска для создания нового веб-приложения Graph Microsoft
Upload файл для OneDrive
Откройте решение graph-tutorial.sln в Visual Studio 2019 г. и откройтеPrivateSettings.config файл.
Добавьте новую область Files.ReadWriteto клавишу ida:AppScopes , чтобы она выглядела как следующий код.
Откройте файл Index.cshtml .
Вставьте следующий код ActionLink, чтобы создать кнопку для отправки файла в OneDrive.
Откройте файл HomeController.cs .
Вставьте следующий код для обработки запроса из ссылки действия.
Откройте файл GraphHelper.cs .
Вставьте следующий код, чтобы вызвать API microsoft Graph, чтобы создать новый файл в OneDrive.
Выберите нажмите здесь, чтобы войти и войти.
Выберите нажмите здесь, чтобы создать новый файл на OneDrive.
Откройте новую вкладку браузера и вопишитесь в свою OneDrive учетную запись. Вы увидите файл test.txt в корневой папке.
Теперь, когда вы узнали, как загрузить файл в OneDrive, вы можете повторно использовать этот код для загрузки любого Excel, который вы создаете.
Дополнительные соображения для решения
Каждое решение отличается с точки зрения технологий и подходов. Следующие соображения помогут вам спланировать изменение решения, чтобы открыть документы и Office надстройки.
Создание новой Excel таблицы с веб-страницы
В примере изменяется существующий Excel документ. Более распространенным сценарием является создание новой Excel таблицы с веб-страницы. Дополнительные сведения о создании новой таблицы можно найти в документе Create a spreadsheet, предоставив имя файла. В этой статье показано, как создать файл локально, но вы также можете создать файл в потоке с помощью перегрузки в методе SpreadsheetDocument.Create.
Чтение пользовательских свойств при старте надстройки
Инициализация Excel с данными
Как правило, когда клиент открывает Excel документа с веб-сайта, он ожидает, что документ содержит некоторые данные с веб-сайта. Существует несколько способов записи данных в документ.
- Для записи данных используйте SDK OOXML. Вы можете использовать SDK для непосредственного записи любых данных в документ. Этот подход полезен, если вы хотите, чтобы данные были доступны сразу после открытия документа.
- Передай пользовательское свойство запроса Office надстройки. При генерации документа встраив настраиваемую свойство для надстройки Office, содержаную строку запроса, которая извлекает все необходимые данные. Когда надстройка открывается, она извлекает запрос, запускает запрос и использует API Office JS, чтобы вставить результат запроса в документ.
Работа с SDK OOXML
Использование единого входного
Чтобы упростить проверку подлинности, рекомендуется, чтобы надстройка реализовала один вход. Дополнительные сведения см. в документе Enable single sign-on for Office надстройки
Откуда пошла дурацкая привычка сохранять счета, бухгалтерские и финансовые документы в формате MS Excel? Зачем хранить и передавать документы, предназначенные для печати в формате электронной таблицы, если есть специальный формат PDF? Однако, во всех бухгалтерских программах документы в первую очередь обязательно экспортируются в MS Excel и уже потом предлагаются альтернативные способы сохранения документов. От сюда и возникла задача: пусть бухгалтер сохраняет свои документы как хочет, но клиент должен получить их в формате PDF и обязательно точно в том образе, который бухгалтер сваял в шаблоне MS Excel.
В качестве бухгалтерской программы мы использовали бесплатную ВС: Бухгалтерию. (По правде сказать из этой программы можно сразу сохранять документы в PDF, но раз сказали excel, значит – excel.)
Бухгалтер выгружает XLS-файл в определенный каталог на диске, откуда мы должны его забрать, перевести в PDF и сохранить в другой каталог. Все это должно быть реализовано в виде веб-сервиса, то есть клиент должен увидеть и иметь возможность скачать свои pdf-документы в «Личном кабинете» на сайте.
Пути решения:
Первое, что захотелось сделать, – это отыскать готовую библиотеку для PHP или Perl и прямо «на лету» конвертировать файлы.
Такие библиотеки для работы с форматом Excel действительно нашлись, например: PHPExcel, PHPExcelReader, Spreadsheet::ParseExcel и др.
Эти библиотеки действительно хорошо работают, но делают именно то, для чего предназначены: выискивают данные в электронной таблице Excel и оперируют с ними.
Нам же нужно совсем иное – получить экселевскую таблицу в виде как для печати, со всеми картинками с печатями и подписями, с форматами шрифтов, и ячеек.
Итак, что делаем:
Делается это так:
Создаем конвертер в PDF
Создаем bash-файл, например с именем converter.sh
Выставьте права для запуска скрипта converter.sh (755)
Поместите в один каталог с этим скриптом (converter.sh) Excel-файл под именем sample.xls, запустите скрипт converter.sh и в каталоге появится файл sample.pdf, который будет копией печатного вида экселевского файла.
Пол-дела сделано. Теперь нам нужно организовать процесс конвертации в виде веб-сервиса.
Можно, конечно, поместить файл converter.sh в каталог /cgi-bin/ Apache и запускать сразу его, но тут уже начинаются задачи обеспечения безопасности. К вопросу безопасности такого сервиса нужно подойти очень тщательно, ведь мы собираемся передавать скрипту неизвестные файлы и разрешать ему сохранять неизвестно что на диске.
Правильный подход – это разместить файл converter.sh выше DOCUMENT_ROOT Apache, а обращаться к нему через скрипт-посредник, например, на perl, который будет лежать в каталоге /cgi-bin/ и тщательно проверять все параметры, передаваемые в converter.sh.
Какие обнаружились проблемы, после реализации сервиса конвертации.
Оказалось, что Linux не понимает файлы с именами русскими буквами в кодировке windows-1251. Что тут можно сделать:
1. Уговорить бухгалтера сохранять файлы с латинскими именами (сложно)
2. Конвертировать имя файла в utf-8 при загрузке в каталог (вполне реально)
3. Реализовать аналогичный сервис под Windows – Apache (попробую)
Под Windows конвертер реализовать тоже оказалось несложно
Я сделал так:
1. Скачал и установил LibreOffice 3.4
2. Скачал PyODConverter
3. Сохранил файл DocumentConverter.py в рабочем каталоге, например, C:\test\
4. Поменял в файле DocumentConverter.py константу DEFAULT_OPENOFFICE_PORT = 8100 (по умолчанию там был указан другой порт)
5. Поместил в каталог C:\test\ пробный файл для конвертации – test.xls
Теперь запускаем процесс конвертации.
Сначала запускаем OpenOffice в скрытом режиме. В командной строке (cmd) пишем:
"C:\Program Files\LibreOffice.org 3.4\program\soffice.exe" -headless -nologo -norestore -accept=socket,host=localhost,port=8100;urp;StarOffice.ServiceManager
Здесь важно, чтобы порт совпадал с DEFAULT_OPENOFFICE_PORT
Теперь запускаем конвертацию:
"C:\Program Files\LibreOffice.org 3.4\program\python" c:\test\DocumentConverter.py c:\test\test.xls c:\test\test.pdf
И в каталоге c:\test\ обнаруживаем конвертированный файл PDF.
Вот и готов конвертер файлов xls, doc, docx, rtf, txt, odt, ott, sxw, stw, html, xml, в общем всего, что откроет OpenOffice.
Не секрет, что Excel довольно мощный инструмент для работы с числовыми табличными данными. Однако средства, которые предоставляет Microsoft для интеграции с ним, далеки от идеала. В частности, сложно интегрировать в Excel современные пользовательские интерфейсы. Нам нужно было дать пользователям Excel возможность работать с довольно насыщенным и функциональным интерфейсом. Мы пошли несколько другим путем, который в итоге показал хороший результат. В этой статье я расскажу, как можно организовать интерактивное взаимодействие Excel c веб-приложением на Angular и расшить Excel практически любым функционалом, который реализуем в современном веб-приложении.
Итак, меня зовут Михаил и я CTO в Exerica. Одна из проблем которые мы решаем — облегчение работы финансовых аналитиков с числовыми данными. Обычно они работают как с исходными документами финансовой и статистической отчетности, так и каким-либо инструментом для создания и поддержания аналитических моделей. Так сложилось, что 99% аналитиков работают в Microsoft Excel и делают там довольно сложные вещи. Поэтому перевести их с Excel на другие решения не эффективно и практически невозможно. Объективно, «облачные» сервисы электронных таблиц до функционала Excel пока не дотягивают. Но в современном мире инструменты должны быть удобны и соответствовать ожиданиям пользователей: открываться по клику мышки, иметь удобный поиск. А реализация в виде разных несвязанных приложений будет довольно далека от ожиданий пользователя.
То с чем работает аналитик выглядит примерно так:
Основные данные тут — это числовые «финансовые показатели», например, доход за 1 квартал 2020 года. Для простоты буду называть их дальше просто «числами». Как видно, почти никакой связи между числами в документе и в аналитической модели нет, все только в голове у аналитика. И работа с заполнением и поддержанием модели занимает часы поиска и перебивания чисел из документа в таблицы, а потом поиск ошибок ввода. Вместе этого мы хотели бы предложить пользователю привычные инструменты: «перетаскивание», вставка через клипборд и так далее, а также быстрый просмотр исходных данных.
Что у нас уже было
Связываем данные
Кроме UDF наш addin реализует ribbon (панель инструментов) с настройками и некоторыми полезными функциями по работе с данными.
Добавляем интерактивность
Вставляем данные в Excel
В нашем SPA мы подсвечиваем все числа, которые обнаружила система. Пользователь может выделять их, навигировать по ним и т.п. Для вставки данных мы реализовали 3 механизма, чтобы закрыть различные варианты использования:
- Перетаскивание (drag-and-drop)
- Автоматическая вставка по клику в SPA
- Копирование и вставка через клипборд
Эти способы хороши, когда пользователю нужно вставлять в свою модель по одному числу, но если надо перенести целую таблицу или ее часть, необходим другой механизм. Наиболее привычным для пользователей представляется копирование через клипборд. Однако этот способ оказался сложнее первых двух. Дело в том, что для удобства вставляемые данные должны быть представлены в нативном для Excel формате — OpenXML Spreadsheet. Наиболее просто это реализуется используя объектную модель Excel, то есть из addin’а. Поэтому процесс формирования клипборда у нас выглядит так:
- Пользователь выделяет область с числами в SPA
- Массив выделенных чисел передается на Notification Service
- Notification Service передает его в addin
- Addin формирует OpenXML и вставляет его в клипборд
- Пользователь может вставить данные из клипборда в любое место любой Excel-таблицы.
Несмотря на то, что данные проделывают довольно долгий путь, благодаря SignalR и RTD происходит это довольно быстро и абстрагированно от пользователя.
Распространяем данные
После того, как пользователь выбрал начальные данные для своей модели, их надо «распространить» все периоды (года, полугодия и кварталы), которые представляют интерес. Для этих целей одним из параметров нашей UDF является дата (период) данного числа (вспоминаем: «доход за 1 квартал 2020 года»). В Excel существует нативный механизм «распространения» формул, который позволяет заполнить ячейки той же формулой с учетом ссылок, заданных в параметрах. То есть вместо конкретной даты в формулу вставлена ссылка на нее, а далее пользователь «распространяет» ее на другие периоды, при этом в таблицу автоматически загружаются «те же» числа из других периодов.
А что это там за число?
Теперь у пользователя есть модель на несколько сотен строк и несколько десятков столбцов. И у него может возникнуть вопрос, что же там за число в ячейке L123? Чтобы получить ответ, у нас ему достаточно кликнуть на эту ячейку и в нашем SPA откроется тот самый отчет, на той самой странице, где записано кликнутое число, а число в отчете будет выделено. Вот так:
А если это не просто одно число из отчета, а результат некоторых вычислений на числах, взятых из отчета, то мы подсветим все числа, входящие в вычисляемое в Excel выражение. При этом не происходит загрузки всего приложения и подгрузки всех необходимых данных, как в случае перехода по ссылке.
В качестве заключения
Вот такая, на мой взгляд, нестандартная реализация взаимодействия между Excel и веб-приложением получилась довольно удобной для пользователя. Благодаря использованию Excel порог входа для пользователей из целевой аудитории довольно низкий. При этом мы получаем также всю мощь Excel по работе с числовыми данными. Сами данные всегда остаются связанными с источником, а также связанными во времени. Для целевых клиентов нет необходимости встраивать в бизнес-процесс работы с данными абсолютно новые внешние системы. Наше решение встраивается как дополнительный «инструмент» внутри Excel, что является стандартом де-факто для провайдеров финансовых данных.
Подобный архитектурный подход к интеграции веб-приложений с Microsoft Excel может быть применим и для решения других задач, требующих интерактива и сложных пользовательских интерфейсов при работе с числовыми и табличными данными.
В заголовке не шутка: я сам попробовал, вполне получилось.
Итак, представляю вашему вниманию файл в формате Excel, который умеет генерировать из своего содержимого сайты на Bootstrap.
Господи, зачем?!
Еще мне захотелось просто поэкспериментировать с VBA. Несмотря на всеобщую ненависть среди программистов, Excel — удобная для определенных целей платформа, и мне было интересно приложить ее к какой-нибудь нестандартной пугающей задаче.
На самом деле мне вообще очень не нравится дифференциация на «элитные» и «плохие» языки программирования. Существует такая точка зрения (порождающая адские холивары), что некоторые языки и платформы во всем лучше остальных и что есть такие, которые лучше никогда не использовать. Разве это объективно?
Итак, я попробую делать сайты с помощью Excel. И никто не сумеет меня остановить.
Как это работает
Книга лежит в открытом доступе — для начала скачайте ее, если вам интересно все попробовать лично.
Пользоваться ею очень просто — на главном листе можно заполнять текстом ячейки, а потом макрос генерирует выходной HTML. Есть даже возможность управлять компонентами — ненужные части страницы можно отключить.
Результаты записываются в html-файл. В принципе, вам только он и нужен — весь CSS и JavaScript лежит на CDN-сервере. И вот у вас уже готова минимальная страничка, еще и на Bootstrap!
На нее можно даже поставить Bootstrap-тему! Вам будет дан список на выбор.
Теперь настало время поделиться своим творением с миром. У меня тут завалялся свободный сервер, так что я по-быстрому прицепил к нему домен excel-bootstrap.cf, установил Apache с LetsEncrypt, и получился настоящий хостинг (с самым минимальным уровнем безопасности).
Под «минимальным уровнем безопасности» я имею в виду этот супер-скрипт на PHP:
Есть еще четырехстрочный .htaccess, но он особого интереса не представляет.
По сути, на моем неподражаемом хостинге этот скрипт просто ищет файл с подходящим названием и выводит его на страницу. Если пытаются обратиться к корню сайта — переадресует на GitHub-репозиторий проекта.
Даже есть вышеупомянутые зачатки безопасности: размещать файлы вы можете, только имея правильный GUID. Конечно, там могут быть какие-то лазейки, которые отыщет опытный хакер, но не забывайте, я написал все это за 10 минут.
В продакшн!
На всю работу ушло менее 3 часов. Давайте расскажу подробнее, на какую часть работы сколько ушло.
Принцип «быстрой разработки» идеален, когда мы реализуем какую-то совершенно новую идею. Нужно добиться минимально рабочего результата, а украшать его уже по ходу дела.
Где-то за 34 минуты я обрисовал идею и реализовал макет.
Потом создал репозиторий на GitHub, написал маленькое readme — и настало время делать сам проект.
На это ушло около часа и 45 минут. И вот мой документ уже умеет генерировать HTML-страницы, но какой с них толк, если их негде хостить?
Я быстренько зарегистрировал на себя домен excel-bootstrap.cf, прицепил к серверу, создал для него неповторимое API (на картинке видно, как оно используется) и добавил в книгу возможность загружать на мой сервер сгенерированные файлы.
Потом добавил кнопочку, немного потестировал… ну и все!
В процессе работы:
- Всего затрачено времени: 2 часа 15 минут.
- Всего потеряно единиц IQ за время создания: неизвестно.
И ради чего все это?
Вообще мне просто захотелось посмотреть, насколько бессмысленное и ужасное творение я способен создать. Но это была не единственная цель. Главная мысль, которую я хочу до вас донести этим адом: нет правильных и неправильных способов что-либо делать.
Буду я еще когда-нибудь писать сайты в Excel? Да ни за что в жизни.
Найдется ли какой-нибудь незадачливый бизнесмен, которому понравится идея сделать страничку для своей компании в родной и привычной программе? Вполне может быть.
А кто может оценить, насколько верен выбранный путь? Да никто.
Выбирая инструмент для выполнения задачи — берите тот, которым вы лучше всего владеете, тот, который вы сможете использовать еще долго и тот, на котором вы способны довести работу до конца. Но не тот, который посоветуют умные дяди с форума.
Выбирая канал для отслеживания интересных публикаций, тоже руководствуйтесь соображениями удобства. Подписывайтесь на нас и следите за статьями там, где вам удобно.
Читайте также: