Вопрос знатокам JavaScript

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

Ответить
KATZ
Местный житель
Сообщения: 473
Зарегистрирован: 29 мар 2005, 17:49

Вопрос знатокам JavaScript

Сообщение KATZ »

Пытаюсь реализовать небольшую задачку на JS. В алгоритме пользователь должен выбирать файл, с которым далее будут выполняться определенные действия. Какой-либо простой способ, чтобы отобразить стандартный диалог выбора файла, найти не получилось. Пока не придумал ничего лучшего, как воспользоваться возможностями офисных приложений, например, Excel:

Код: Выделить всё

var XLApp=new ActiveXObject('Excel.Application');
XLApp.Visible=false;
var OpenFileDlg=XLApp.FileDialog(1);
OpenFileDlg.AllowMultiSelect=false;
OpenFileDlg.Title='Выбор файла';
if (OpenFileDlg.Show()==-1)
  {
  // Получение имени выбранного файла
  // и т. д.
  }
XLApp.Quit();
Этот код в принципе работает, но, несмотря на Quit, процесс не завершается, а продолжает висеть в диспетчере задач. Да и вообще запускать Excel ради отображения диалога выбора файла - извращение. С JS раньше не сталкивался, всех тонкостей не знаю. Думаю, должен быть какой-то нормальный способ вызова стандартного диалога для выбора файла, просто я его пока не нашел. Знатоки, подскажите!
Maverick
Абориген
Сообщения: 943
Зарегистрирован: 29 мар 2005, 17:49
Откуда: External Developer
Контактная информация:

Сообщение Maverick »

казалось бы - "причем тут Галактика"? :-)
Изображение
Знающий людей разумен.
Знающий себя просветлён.
Побеждающий людей силен.
Побеждающий самого себя могущественнен
KATZ
Местный житель
Сообщения: 473
Зарегистрирован: 29 мар 2005, 17:49

Сообщение KATZ »

Работать всё это должно внутри "Галактики", вызываясь через дополнительные функции локального меню.
Max_Fin
На пенсии
Сообщения: 797
Зарегистрирован: 29 мар 2005, 17:49
Откуда: г. Тюмень
Контактная информация:

Сообщение Max_Fin »

1.

Код: Выделить всё

      
      var excel = new ActiveXObject("Excel.Application");
      var excel_filename = excel.GetOpenFilename("Файлы Excel (*.xls*), *.xls*");
      if (!excel_filename)
      {
        throw(Error(0,'Файл не выбран'));
      }
      
      
2. Более трудный через свой объект Галактики

Код: Выделить всё

  VipInterface JS_OtherJS Implements oGalScriptStdF;
3.

Код: Выделить всё

var ComDlg = new ActiveXObject("MSComDlg.CommonDialog");

ComDlg.Filter = "All Files(*.*)|*.*";
ComDlg.FilterIndex = 1;
ComDlg.Flags = 0x200 | 0x1000 | 0x80000;
ComDlg.MaxFileSize = 512;

ComDlg.ShowOpen();
Жду выхода Вселенная 2.12!
KATZ
Местный житель
Сообщения: 473
Зарегистрирован: 29 мар 2005, 17:49

Сообщение KATZ »

1. Срабатывает немного быстрее, чем мой код, но Excel-овский процесс всё так же висит в диспетчере задач.
2. Нашел документацию, почитал. Для моей элементарной задачи - чересчур громоздкое решение.
3. Сообщение с ошибкой: "Невозможно создание объекта сервером программирования объектов", ругается на самую первую строку. Чего-то не хватает?
Maverick
Абориген
Сообщения: 943
Зарегистрирован: 29 мар 2005, 17:49
Откуда: External Developer
Контактная информация:

Re: Вопрос знатокам JavaScript

Сообщение Maverick »

ммм... насколько я помню, в офисных приложениях в качестве метода вызова файла используется тупо ф-ии WinAPI, т.е. стандартные ф-ии операционки.
может стоит в скрипте использовать ActiveX не экселя а самой винды?
Изображение
Знающий людей разумен.
Знающий себя просветлён.
Побеждающий людей силен.
Побеждающий самого себя могущественнен
KATZ
Местный житель
Сообщения: 473
Зарегистрирован: 29 мар 2005, 17:49

Re: Вопрос знатокам JavaScript

Сообщение KATZ »

Maverick писал(а):может стоит в скрипте использовать ActiveX не экселя а самой винды?
Так разве ж я против? Подскажите, как называется такой ActiveX. Возможно, 3-ий вариант от Max_Fin - как раз он и есть, но у меня он почему-то не заработал. Наверное, в составе ОС нет данного компонента. Не самому же его писать!
Ответить