Страницы: 1 2 След.
RSS
Office 365, зачем на него переходить?
 
Добрый день,
интересует премущества Office 365, может кто то уже на нем работает, в чем у него плюсы и минусы.
Как работает на нем VBA?
Или все таки уже MS перешел на JS.
Если кто то уже работал с етим зверем, буду рад услышать его мнение и видение других форумчан на ету тему..
 
Office 365 это, по-сути, уже не просто приложения, а сервис как с приложениями, так и без них, который можно арендовать на определенный период, проплачивая вперед за месяц или за более длительный период.
В Office 365 профессиональный плюс и в некоторые другие разновидности включены стандартные приложения для Windows: Word, Excel, PowerPoint, Outlook, Access и прочие. Эти приложения работают аналогично, например, Office 2016. VBA поддерживается.

Особенность приложений Office 365 в том, что их функциональность постоянно расширяется.
И если раньше преимущества были не очень показательными, то несколько дней назад, например, в Excel (Insiders Fast - программа предварительной оценки) уже реализовали так называемые динамические массивы и spilling (наполнение данными ячеек) и несколько новых функций на их основе, которые в значительной степени теперь поменяют/упростят формульный мир.
Bill Jelen уже успел опубликовать беглое описание этих новшеств в PDF файле, доступном для скачивания - ExcelDynamicArraysStraightToThePoint.pdf
Там несколько опечаток, но они очевидны и по смыслу понятно, как должно быть на самом деле.
А по первой ссылке внизу веб-страницы есть ссылки на описания новых функций от MS.

Если в ячейках A2:C10 есть данные и ввести, например,  в ячейку E3 формулу =A2:C10 , то ячейки от E3 ниже и правее заполнятся/зальются ячейками-копиями со значениями и форматами ячеек диапазона A2:C10. Но эти ячейки-копии особенные, они - с той же формулой, но редактируется только формула E3.
Если ссылка сделана на диапазон т.н. умной таблицы в виде структурированных ссылок, то и диапазон копий будет автоматически меняться вместе с этой таблицей.
Аналогично, при обычном диапазоне если между крайними ячейками A2 и C10 будет вставлены или удалены строки, то и в залитой копии это будет учтено.
Появился новый оператор #, который в конце ссылки одной ячейки будет означать ссылку на текущую область данных, в которую входит эта ячейка.
Например, формула =SUM(A2#) означает сумму всех ячеек текущей области ячейки A2, определяемой, например, по F5-выделить-текущая область.

Новая функция сортировки SORT теперь получила свойство, аналогичное функции сортировки из гугл-таблиц - вводится в одну ячейку, а результат расширяется (заливается) в динамический диапазон отсортированных ячеек. Синтаксис английской версии:  =SORT(Array, [Sort Index], [Sort Order], [By Column]).
Разновидность:  =SORTBY(array, by_array1, sort_order1,) позволяет сортировать по нескольким любым столбцам данных, но выводить какой-то один диапазон, который также динамический.

Функция фильтрации  =FILTER(array,where,[if_empty]) например: =FILTER(A4:C16,B4:B16=F1,"None Found") выводит отфильтрованный диапазон, если он окажется пустым, то можно задать 3-им параметром, что при этом вывести в одну или несколько ячеек.

Функция  =UNIQUE(Array,[By_Column],[Occurs_Once]) , например =UNIQUE(C4:C29) создаст динамический диапазон строк уникальных значений.
Можно даже получить диапазон уникальных по нескольким столбцам, как бы автоматически объединенных в пределах каждой строки =UNIQUE(B4:C29)

Функции можно комбинировать, например, такая формула  =SORT(UNIQUE(C4:C29,FALSE,FALSE)) создаст динамический диапазон отсортированных уникальных значений - просто несравнимо с громоздкостью реализации подобного с помощью обычных функций.
Комбинировать, кстати, можно и с обычными функциями - см. документ, ссылку на который привел выше.
По приведенным ссылкам есть описание и примеры работы еще нескольких функций (SINGLE, SEQUENCE, RANDARRAY), работающих  с динамическим диапазонами.
Хотелось бы приложить XLSX примеры по 7-ми новым функциям с подробными разъяснениями (англ) их применения от Smitty Smith (Microsoft), но каждый пример имеет размер от 120кБ до 190кБ, в сумме это превысит допустимый предел форума, поэтому приложил лишь пример применения функции FILTER (7 листов).

В Office 2019 (декабрь 2018), в версии, которая не станет частью Office 365, этих новых функций не будет, поэтому вариант Office 365 и лучше.
Изменено: ZVI - 26.09.2018 15:10:25
 
Владимир, большое спасибо за подробное объяснение. Насколько понимаю это
Цитата
ZVI написал:
в ячейку E3 формулу =A2:C10 , то ячейки от E3
эквивалент Google Spreadsheet =ArrayFormula(A2:C10), правда, в Google не переносятся форматы, что, на мой взгляд удобнее. По остальным формулам - тоже есть Google-аналоги. Потихоньку сближаются :)
 
Доброе утро, Андрей! Да, польза от конкуренции с Гугл-таблицами очевидна.
 
Цитата
ZVI написал:
Да, польза от конкуренции с Гугл-таблицами очевидна.
Несомненно.
Владимир, можно я вас ещё подонимаю вопросами. Вы как-то года два назад давали ссылки на проекты для Excel online. Я их так и не освоил, а сами ссылки уже умерли. Разобраться с Excel add-ins в плане разработки именно для online не получилось. Нет ли у вас ссылок на то, как и где создавать проект для Excel online? Что-то тяжело найти точки входа. Для Visual Studio есть пакет для разработки и отладки такого javascript кода, но хорошо взаимодействует с Excel 2016. Получившийся результат мне так и не удалось прицепить в Online. И нет ли среды для разработки не столь монструозной как Visual Studio Community? В идеале, вообще хотелось делать такой addin непосредственно в браузере, где собственно и находится Excel Online, как это реализовано в Google Spreadsheet.
 
Пропало сообщение из-за сбоя, и сегодня утром не смог отправить.

Вопрос уже не стоит похоже, зачем переходить, скоро встанет вопрос, как не переходить. Кроме тех вкусняшек, которые появляются или появятся в 365, подписка на ПО становится все более и более распространенной. Это конечно выгодно вендору, а то распустились, купили (если купили) и десятки лет пользуются ( я о 2003 например). А сейчас плати за дозу доступную цену и попробуй соскочи.
По вопросам из тем форума, личку не читаю.
 
Андрей, есть и русскоязычный вариант Вашей ссылки - Документация по надстройкам Office.
Несколько рабочих ссылок:
Материалы в репозитории - Office Developer
Примеры в Office 365 Resources
Есть книга, автор Michael Zlatkovsky (в MS занимается этим направлением) - Building Office Add-ins using Office.js,
там же можно скачать бесплатно электронный вариант нескольких разделов книги
есть и небольшое видео автора, ссылки здесь.
На этой странице есть еще одно видео автора End-to-End Walkthrough of Excel JavaScript Add-in Development и ссылки по теме.
Его ответы на stackoverflow.
Его раздел на MSDN Создание надстроек VSTO для Office с помощью Visual Studio
Изменено: ZVI - 26.09.2018 14:57:11
 
Владимир, огромное спасибо за ссылки и особенно за данные о книге. Вечером куплю для изучения.
 
Да, новые функции весьма бомбические. Очень хочется их пощупать, но Insiders включать не хочу пока.
F1 творит чудеса
 
Цитата
Максим Зеленский написал: ...но Insiders включать не хочу пока
Аналогично, хочется, но там все меняется очень быстро и, по сути, пользователями выполняется бета-тестирование.
И вроде новые функции еще не во всех странах подключены, несмотря на Insider, т.к. нет еще окончательно корректных локализованных названий.
Если кто-то обнаружит их доступными для пользователей России, то прошу здесь сообщить/порадовать.
Изменено: ZVI - 26.09.2018 15:14:07
 
ZVI, большое вам спасибо за подробное описание!  :idea:
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
ZVI, спасибо, вот теперь понимаю, что пора работать над 365
и скорее всего VBA уйдет в историю
Пора садится на JS.
 
Посмотрел оглавление книги, тяжело вздохнул. Блин, всё так вкусно описано, когда ж время-то найти на всё
F1 творит чудеса
 
Цитата
Максим Зеленский написал:
время-то найти на всё
ету проблему решают все.
то чего постоянно не хватает
 
ZVI, Владимир, как всегда подробно и информативно. Примите благодарность. К сожалению, даже не тестировал сей продукт, нет у нас на предприятии, и дома не стоит.
Интересен функционал JS, насколько отличается от VBA? Какие особенности использования, отличия и похожесть. И все таки это скриптовый язык, не java, каждый со своими особенностями.
«Бритва Оккама» или «Принцип Калашникова»?
 
Цитата
bedvit написал:
И все таки это скриптовый язык,
Привет, Виталий.
Js уже давным давно динамически компилируется и работает вполне себе достойно. Для примера код VBA
Код
Public Sub test()
    Const arrLen As Long = 2000000
    Dim arr() As Double, i As Long
    Dim t As Single
    t = Timer
    ReDim arr(1 To arrLen)
    For i = 1 To arrLen
        arr(i) = i
    Next
    For i = 2 To arrLen
        arr(i) = arr(i) + arr(i - 1)
    Next
    MsgBox CStr((Timer - t) * 1000) & " = " & CStr(arr(arrLen))
End Sub
у меня на нетбуке отработал за 265 миллисекунд.
Почти тоже самое (не захотел индексы сбивать :) ) на JS (можно выполнить в отладке браузера), для Chrome вызов по F12.
Код
const arrLen = 2000000;
var arr = new Array(arrLen);
var i, dateStart = Date.now();
for (i = 0; i < arrLen; i++) {
   arr[i] = i;
};
for (i = 1; i < arrLen; i++) {
   arr[i] = arr[i] + arr[i - 1];
};
console.log( (Date.now() - dateStart).toString() + ' = ' + arr[arrLen - 1].toString());
выполнилось за 63 миллисекунды. Так что выигрыш JS у VBA налицо. Хотя по сравнению с С++, конечно результат не очень блестящий.
Updated. И то вопрос - насколько не? Тоже самое C#
Скрытый текст
В релизе, без проверки переполнения выполнилось за 46 миллисекунд. :)
Изменено: Андрей VG - 28.09.2018 07:49:47
 
Андрей VG,вот ето серйозный аргумент)))
 
Андрей VG,  8-0
Цитата
ivanok_v2: вот ето серйозный аргумент
вот да)))
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Виталий и Андрей, добрый день. Пока проблемой JS является более медленная (в раза 2) работа с объектной моделью Excel (ячейками, листами и т.п.) по сравнению с VBA.
А также асинхронность работы JS, в отличие от легко поддающейся контролю последовательной работе кода VBA. То есть, если один код JS меняет значения ячеек, то другому (асинхронному) коду, использующему эти изменения, нужно как-то искусственно дождаться завершения этих изменений. Логика кодирования из-за этого может значительно отличаться от привычной VBA-логики. Хотя синхронные методы работы JS с объектной моделью Excel уже прорабатываются, насколько я слышал. И с типами данных в JS печально, по сути, все переменные аналогичны variant в VBA.
Для программистов JS перспективен, но большинство освоивших VBA все же не программисты.
Изменено: ZVI - 28.09.2018 09:45:46
 
Цитата
Андрей VG написал: var arr = new Array(arrLen); ... dateStart = Date.now();
Андрей, для корректного сравнения все же в JS нужно dateStart заряжать перед созданием массива, как в VBA, или в VBA ReDim arr(1 To arrLen) выполнить до  t = Timer
В C# , по-любому, будет в разы быстрее, но и там бы тип массива задать как double, а не long, больше же памяти требует, хотя результат по времени мало измениться должен.
Изменено: ZVI - 28.09.2018 09:21:18
 
Цитата
ZVI написал:
для корректного сравнения все же в JS нужно dateStart заряжать перед созданием массива,
Согласен, спасибо за замечание. Дома перетестирую - на работе отладочная консоль в браузере заблокирована.
Цитата
ZVI написал:
Пока проблемой JS является более медленная (в раза 2) работа с объектной моделью Excel
Владимир, такая же проблема и при работе в C# с объектной моделью Excel.
Цитата
ZVI написал:
Логика кодирования из-за этого может значительно отличаться от привычной VBA-логики.
Тут да согласен. С другой стороны - callback подход для освоения не слишком сложен.
Ещё раз большое спасибо за отклик и замечания.
 
Цитата
ZVI написал:
заряжать перед созданием массива, как в VBA, или в VBA ReDim arr(1 To arrLen) выполнить до  t = Timer
Владимир, погонял в VBA t = Timer до создания массива и после на рабочей машине. Фактически выявить какое-то ухудшение не удалось, время выполнения скачет от 93 до 125 миллисекунд. Да и потом, возможно в Js это скажется (может там вне зависимости от new Array(array size) идёт ленивое выделение памяти), но в VBA это достаточно простая процедура выделения памяти под структуру описания массива и собственно данных массива. Там нет большой временной задержки. Ну, максимум 10 миллисекунд и то вряд ли.
Возьмём чуть другую задачу, скачал портативный Firefox протестировал создание словаря из 8000000 уникальных значений, время выполнения 29 секунд. То есть время на выделение памяти для ключа и его значения 0,004 миллисекунды. Не верю, что в VBA создание массива чем-то сложнее, чем эта операция. Вся разница в том, что в VBA неявно всем типам элементов массива присваивается 0. То есть за нас вставляется такой код
Код
For i = 1 to UBound(arr)
    arr(i) = 0
Next
Хотя может быть и что-то более простое, навроде API функции CopyMemory, которая единим потоком запишет 0 во все байты области данных массива. Честно говоря, ничего про алгоритмы реализации начальной инициализации массивов в VBA не знаю.
 
Цитата
ivanok_v2 написал:
и скорее всего VBA уйдет в историю
Пора садится на JS
что я и сделал N лет назад  :)  

Давайте я покапитаню как обычно: Мир движется в сторону облачных решений (сервисов), которые работают на любом устройстве (компьютер, планшет, телефон, IoT). Если приложение браузерное и сложнее чем "hello world", скорее всего, оно использует JavaScript.

Цитата
ZVI написал:
А также асинхронность работы JS, в отличие от легко поддающейся контролю последовательной работе кода VBA. То есть, если один код JS меняет значения ячеек, то другому (асинхронному) коду, использующему эти изменения, нужно как-то искусственно дождаться завершения этих изменений.
событийно-ориентированное программирование называется (event-driven programming)

Цитата
ZVI написал:
Логика кодирования из-за этого может значительно отличаться от привычной VBA-логики
и да и нет. Сотря о чем идет речь. Если ставить обработчи какого-либо события, то это практически идентично

Цитата
ZVI написал:
для корректного сравнения все же в JS нужно
понимать, как работают JIT-компиляторы и пишутся бенчмарки. Нюансов там более чем достаточно.


p.s.: зашел на форму ответить на сообщение в личку, а тут это : )
Изменено: nerv - 28.09.2018 13:26:21
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
 
Андрей, Владимир немного добавил вычислений (учел ReDim), но для Шарпа и Си нужно больше для оценки.
Итак массив в 200 млн. чисел.
1.VBA = 5.94 сек
Код
Public Sub test()
    Const arrLen As Long = 200000000
    Dim arr() As LongLong, i As Long
    Dim t As Single, tEnd
    ReDim arr(1 To arrLen)
    t = Timer
    For i = 1 To arrLen
        arr(i) = i
    Next
    For i = 2 To arrLen
        arr(i) = arr(i) + arr(i - 1)
    Next
    tEnd = Timer - t & " = " & arr(arrLen)
    MsgBox tEnd
    Debug.Print tEnd
End Sub


2.С#.NET с указателями (отключил проверку границ массива и ограничил аппетиты сборщика мусора) - 0,76 сек.
Код
using System;
using System.Diagnostics;

namespace SpeedTest
{
    class Program
    {
        static void Main(string[] args)
        {
            const int arrLen = 200000000;
            long[] arr = new long[arrLen];
            Stopwatch sw = Stopwatch.StartNew();
            unsafe
            {
                fixed (long* arr2 = arr)
                {
                    for (int i = 0; i < arrLen; i++)
                    {
                        arr2[i] = i;
                    }
                    for (int i = 1; i < arrLen; i++)
                    {
                        arr2[i] = arr2[i] + arr2[i - 1];
                    }
                    sw.Stop();
                    Console.WriteLine("Time {0}", sw.Elapsed + " = " + arr2[arrLen - 1].ToString());
                    Console.ReadKey();
                }
            }
        }
    }
}


3.С/С++ сборщика здесь никогда не было (окромя интеллектуальных ссылок), а указатели были и будут :) поэтому те же - 0,76 сек.
На самом деле негде развернутся, очень небольшой кусок вычислений.
Здесь делал сравнения, более подробно.
Здесь итоги.
Конечно, это не сравнение, какой язык лучше. Просто сравнение производительности на конкретном примере (числодробилка).
Код
#include "stdafx.h"
#include <stdio.h>
#include <ctime>
#include <windows.h>

int main()
{      
   long arrLen = 200000000;
   LONGLONG *arr = new LONGLONG[arrLen];
   unsigned int start_time = clock(); // начальное время
      for (long i = 0; i < arrLen; i++)
      {
         arr[i] = i;
      }
      for (int i = 1; i < arrLen; i++)
      {
         arr[i] = arr[i] + arr[i - 1];
      }
   unsigned int end_time = clock(); // конечное время
   unsigned int search_time = end_time - start_time; // искомое время
   wprintf(L"Time, sec: %f - %llu \n", search_time / 1000.0, arr[arrLen - 1]);
   system("pause");
   return 0;
}

Андрей, алгоритмы не менял, но в VBA у меня другой результат последнего элемента, чем в Шарпе, у тебя так же?
«Бритва Оккама» или «Принцип Калашникова»?
 
Цитата
bedvit написал:
но в VBA у меня другой результат последнего элемента, чем в Шарпе,
Это естественно
В VBA
Код
    For i = 1 To arrLen
        arr(i) = i

последний элемент равен arrLen
А в C#
Код
      for (long i = 0; i < arrLen; i++)
      {
         arr[i] = i;

последний элемент равен arrLen - 1 :)
 
Андрей, я говорю про значение элемента, то которое выводится в сообщении. Оно какое должно быть в VBA и Шарпе? По идее одинаковое. А оно разное, или я что-то не так понял?
Изменено: bedvit - 28.09.2018 14:33:29
«Бритва Оккама» или «Принцип Калашникова»?
 
Цитата
bedvit написал:
По идее одинаковое. А оно разное, или я что-то не так понял?
Виталий, так как заливка исходного массива данными для последующего во втором цикле расчёта нарастающего итога различаются, то и нарастающий итог будет различаться.
По паре исходных чисел в: VBA {1, 2}, C# {0, 1}. Соответственно, нарастающий итог будет: VBA {1, 3}, C# {0, 1}, то есть разница будет в две единицы, я собственно об этом и писал
Цитата
Андрей VG написал:
Почти тоже самое (не захотел индексы сбивать  )
 
Андрей, понял. Благодарю.
«Бритва Оккама» или «Принцип Калашникова»?
 
Здравствуйте, коллеги! Спасибо за интереснейшее обсуждение!
Владимир
 
Цитата
nerv написал:
Мир движется в сторону облачных решений (сервисов), которые работают на любом устройстве (компьютер, планшет, телефон, IoT). Если приложение браузерное и сложнее чем "hello world", скорее всего, оно использует JavaScript.
:) облака не станут панацеей - пока даже юзерам нужно личное пространство (это касается особенно сферы науки, их разработок и авторских прав) - не могу представить себе докторскую диссертацию в любой отрасли (ещё незащищённую, но в разработке) - чтобы она спокойно лежала на облаке ...
поэтому полагаю старый добрый жёсткий диск  с офисом и vba - не потеряет свою нишу... не одним ведь браузером мир полнится  ;) имхо
p.s.
а за "разбор полётов" - спасибо всем
Изменено: JeyCi - 30.09.2018 18:02:12
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
Страницы: 1 2 След.
Наверх