Страницы: 1
RSS
Power Query. Путь к текущей книге, выбор папок из диалогового окна, ввод значений через InputBox
 
Всем доброго времени суток.
Пока не спится, чтоб чем-то себя занять, написал наброски 3х функций
Вдруг кому-нибудь пригодятся :)
Для работы должен быть включен параметр "Использование элементов управления ActiveX, не помеченных как безопасные для использования" в параметрах безопасности IE

Код
let
    InputBox = (Prompt,optional Caption as nullable text,optional Default as nullable any,optional Type as nullable number)=>
        Web.Page("<script>
            try {
                var xlapp = GetObject('','Excel.Application');
                var ret=xlapp.InputBox('"&Prompt&"','"&(if Caption=null then "null" else Text.From(Caption))&"','"&
                    (if Default=null then "null" else Text.From(Default))&"',null,null,null,null,"&
                    (if Type=null then "null" else Text.From(Type))&")
            } catch (e){
                var err=(e.message)
            } 
            document.write('<table><tr><th>ret</th></tr><tr><td>'+(typeof err!=='undefined'?err:ret)+'</td></tr></table>')
        </script>"){0}[Data][ret]{0},
    SelectFolder = (InitialFileName,Title) => 
        Web.Page("<script>
            try{
                var dlg=GetObject('','Excel.Application').FileDialog(4);
                dlg.title='"&Title&"';
                dlg.InitialFileName='"&Text.Replace(InitialFileName,"\","\\")&"';
                var ret=(dlg.show()==-1?dlg.selecteditems.item(1):'')
            } catch (e){
                var err=(e.message)
            } 
            document.write('<table><tr><th>ret</th></tr><tr><td>'+(typeof err!=='undefined'?err:ret)+'</td></tr></table>')
        </script>"){0}[Data][ret]{0},
    ThisWBPath  = Web.Page("<script>
            try{
                var xlapp = GetObject('','Excel.Application');
                var ret=xlapp.activeworkbook.fullname
            } catch (e){
                var err=(e.message)
            }
            document.write('<table><tr><th>ret</th></tr><tr><td>'+(typeof err!=='undefined'?err:ret)+'</td></tr></table>')
        </script>"){0}[Data][ret]{0},
    Path = if try Number.From(InputBox("Введите значение параметра X","Запрос1 - Ввод параметра X",0,1))>0 otherwise false then SelectFolder("C:\","Выберите папку") else ThisWBPath
in
    Path
Изменено: Андрей Лящук - 04.10.2019 04:30:14
 
Большое спасибо!
Вот только стоит ли так?
 
Андрей Лящук, большое спасибо!
Андрей VG, а что не так? Есть подводные камни? Я в JS, или на чем там эти ништяки написаны Андреем от слова никак.  :D
Изменено: PooHkrd - 04.10.2019 15:53:31
Вот горшок пустой, он предмет простой...
 
Пожалуйста)
Цитата
Андрей VG написал: стоит ли так?
Это вы про
Цитата
Андрей Лящук написал: 04:18:20
или про безопасность?
 
Цитата
Андрей Лящук написал:
или про безопасность?
Ну за безопасность - пусть лучше медведь ответит - у меня недостаточно компетенции в такой области знаний (хотя Включить (небезопасно) - наводит на мысль а надо ли?).
Я собственно о том, может сразу разделить требуемый функционал на решаемый в VBA и решаемый в Power Query - зачем заниматься скрещиванием? В чём профит? Хотя никогда не был против исследований в стиле - ради спортивного интереса - это всегда позволяет взглянуть на предмет исследования с новой стороны. Я с большим удовольствием разбираю ваш подход в решениях задач на Power Query - бывают очень полезные моменты.
Так что даже настаиваю - продолжайте!
Страницы: 1
Наверх