Страница 1 из 1

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

Добавлено: 17 май 2010, 11:07
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 раньше не сталкивался, всех тонкостей не знаю. Думаю, должен быть какой-то нормальный способ вызова стандартного диалога для выбора файла, просто я его пока не нашел. Знатоки, подскажите!

Добавлено: 21 май 2010, 17:56
Maverick
казалось бы - "причем тут Галактика"? :-)

Добавлено: 21 май 2010, 22:21
KATZ
Работать всё это должно внутри "Галактики", вызываясь через дополнительные функции локального меню.

Добавлено: 24 май 2010, 14:02
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();

Добавлено: 26 май 2010, 16:57
KATZ
1. Срабатывает немного быстрее, чем мой код, но Excel-овский процесс всё так же висит в диспетчере задач.
2. Нашел документацию, почитал. Для моей элементарной задачи - чересчур громоздкое решение.
3. Сообщение с ошибкой: "Невозможно создание объекта сервером программирования объектов", ругается на самую первую строку. Чего-то не хватает?

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

Добавлено: 10 июн 2010, 10:44
Maverick
ммм... насколько я помню, в офисных приложениях в качестве метода вызова файла используется тупо ф-ии WinAPI, т.е. стандартные ф-ии операционки.
может стоит в скрипте использовать ActiveX не экселя а самой винды?

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

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