Открытие xls-файла на терминале

0 (0)
  • Развернуть Открытие xls-файла на терминале ( Alex_MMM  20.01.2006 08:16 )
    5(1)
    Добрый день !
    Не могу открыть xls-файл на терминале с помощью вот такой конструкции:

    Var sfile1="$proc.xls";
    Var sfile="$proc_n.xls";

    CopyFile(sfile1,sfile,true);

    If (IsStandAlone ()) // двухзвенка
    If ((ValType (ex) != V_UNDEF) and (ex.Visible == False))
    ob = ActiveX ("Excel.Application",NULL,False);
    else
    ob = ActiveX ("Excel.Application",NULL,True);
    end ;
    else // трехзвенка
    ex = CreateObject ("rsax", "TRsAxServer", "RsAxServer", False) ;
    ob = ex.CreateComObject ("Excel.Application", True) ;
    end ;

    ob.Workbooks.open(sfile);

    CopyFile отрабатывает, копирует файл. На ob.Workbooks.open(sfile) вылетает ошибка.
    Если для sfile, sfile1 указать абсолютные пути на сервере, то все хорошо отрабатывает.
    Но мне нужно, чтобы xls-файлы находились на терминале.
    Что я должен указать в sfile? Не получается открыть файл с конструкцией
    Var sfile1="$..\\Mac\\proc.xls".

    >> Ответить
    • Развернуть Excel скорее всего не понимает первый символ $ ( Outcast  20.01.2006 09:12 )
      5(1)
      Попробуйте:
      ob.Workbooks.open(SubStr(sfile,2));
      

      Excel должен видеть sfile...
      >> Ответить
    • Развернуть А зачем так сложно... ( Denis.ua  20.01.2006 11:47 )
      5(1)
      Попробуй такую конструкцию:
      import rslx,lgs,rsexts,lgxs;
      shablon_address = "D:\excel.xls";
      if(IsStandAlone())				
      	ob = ActiveX ("Excel.Application",null,true);
      else
      	ob = TlgActiveX ("Excel.Application",null,true);
      end;
      ob.Workbooks.Open(shablon_address);
      

      >> Ответить
      • Развернуть Дело в том, что для трехзвенки D:\ для СП : shablon_address = "D:\\excel.xls"; ( Outcast  20.01.2006 12:14 )
        5(1)
        и там где term.exe диск D будет другой, или вообще может не быть :) Следовательно Excel не увидит excel.xls
        >> Ответить
        • Развернуть используй UNC путь ( Шмаков Алексей  20.01.2006 12:26 )
          5(1)
          Not specified
          >> Ответить
          • Развернуть UNC - путь. ( Alex_MMM  20.01.2006 12:38 )
            5(1)
            Имеешь в виду \\имя_компа\\имя_диска\\имя_файла? К сожалению, не подходит, макрос будет работать в разных доп. офисах на разных компах...
            >> Ответить
            • Развернуть дык понятно, что для разных подразделений все зачинается ( Outcast  20.01.2006 13:17 )
              5(1)
              а все хотят свои шаблоны, со своими логотипами, формами временем работы и т.д. и т.п
              Просто ввели для каждого подразделения и бригады свой каталог на серверах, если подразделение имеет выделенный сервер. Есть бригады которые сидят и доступ только по IP к СП и доступ куда-то для них не хочется делать, если канал узкий, для них локально каталог на диске C:\ в него и копируются файлы с сервера, если есть. Вот несколько функций, уже давно написанных, может быть помогут. Синхронизацию по времени и дате давно убрал, по желанию, но можно и сделать если нужно.
              Import rsexts;
              var Path_T_IN = "C:\\DOT\\IN",     TermCh = "$";
              Macro GetIsRemoteOper( )
               var rez = ( IsStandAlone() == false ); /* трехзвенка */
               var TestDIR : TDirList;
               if ( rez ) /* трехзвенка, тогда проверим существует ли на локальном компьютере каталог */
                  TestDIR = TDirList( string( TermCh, Path_T_IN ), "D" );
                  rez = ( TestDIR.Count >= 1);
               end;
               return rez;
              End;/* Macro GetIsRemoteOper( AccRec ) */
              
              Macro ExistFileT( FileName )
              /* Функция проверяет есть, ли файл (True) на терминале или нет (False) */
                If (isStandAlone() )
                  return ExistFile( FileName );
                End;
                If ( SubStr( FileName, 1, 1 ) != TermCh ) FileName = string( TermCh, FileName );  End;
                Var  DirList = TDirList( FileName, "F" );
                return ( DirList.Count >= 1 );
              End; /* Macro ExistFileT(FileName) */
              
              Macro CopyFileTemplTerm( srcFile, destFile )
                   if (Not( ExistFileT( destFile )) ) /* по необходимости копируем */
                      /* Процедура копирует файл src в файл dst. */
                      If ( not CopyFile( srcFile, destFile, True ) )
                         println("Не могу скопировать ", srcFile, " \n на терминал", destFile );
                         return false;
                      End;
                   end;
                   return true;
              End;
              

              >> Ответить
      • Развернуть Мне нужен файл на терминале... ( Alex_MMM  20.01.2006 12:36 )
        5(1)
        А D: - это на сервере приложений. Если же ставлю shablon_address = "$D:\excel.xls", то все равно Excel не открывает файл.
        >> Ответить
        • Развернуть убери $ ( Denis.ua  20.01.2006 12:42 )
          5(1)
          у тебя там случайно не вылазит ошибка - Ошибка выполнения : Invoke, ошибка вызова свойства/метода, на Open?
          пробуй "D:\\excel.xls"
          >> Ответить
    • Развернуть а если файлы находятся не на сервере и не на клиенте а на другой машине, то как? ( Andrew01  02.11.2016 10:20 )
      5(1)
      path = "\\\\192.168.1.111\\file_to_patch\\*.dbf"
      pr = TDirList(path, "f");
      println(pr.count);

      Трехзвенная архитектура, у одних файлы отображает, у других нет, на одном и том же сервере, в одной и той же сети.
      С чем это связано?
      >> Ответить
      • Развернуть от доступа к шаре \\192.168.1.111\file_to_patch ( Outcast  02.11.2016 10:51 )
        5(1)
        видимо у Вас СП (appsrv.exe) запускает startbnk.exe от разных юзеров с разным доступом к \\192.168.1.111\file_to_patch

        >> Ответить
        • Развернуть На одной и той же локальной машине WS05, отрабатывается данный макрос, т..е. ( Andrew01  02.11.2016 12:18 )
          5(1)
          TDirList не выдает списков файлов.
          Но если копирую папку с терминалом с другой машины WS06, там где это все работает, на машину WS05 и запустив терминал, то начинает тоже работать.
          в term.ini указаны и там и там данные админа
          USERNAME = Админ
          DOMAIN = домен
          PASSWORD = пароль

          в какую сторону еще просмотреть? может быть не хватает каких то библиотек на клиентской машине?

          P.S. запускает startbnk.exe от одного юзера - администратора, доступ есть ко всему, к любой машине, к любому ресурсу по сети.

          >> Ответить