Как передать значение массива в Excel

0 (0)
  • Развернуть Как передать значение массива в Excel ( publicem  11.05.2016 18:49 )
    5(1)
    Стоит задача экспортировать данные из RS-banka - более 600 тыс строк
    Все это выгружается в текстовой файл,который копируется на сторону терминала.
    У Excel есть функция импорта текстовых файлов. Что хотелось бы ей воспользоваться
    Сейчас файл excel содержит макрос, который запускается с mac.
    Хотелось бы и эту функцию расположить в mac.
    macro ImportCSV(pExcelSheet, pCellStr, pHideActionFlag)
      var arr=TArray(11);  //TlgActiveX("Excel.Application",null,true);
      arr.CvtToSafeArray=true; //пробовал с этим параметром
    
      var lTmp =Exl.QueryTables.add("TEXT;" + cTermF,Exl.Range("A10")); // Заполнение начинаем с ячейки pCellStr
      lTmp.name                         = "test";//TermTempFileName;
      lTmp.fieldnames                   = true;
      lTmp.rownumbers                   = false;
      lTmp.filladjacentformulas         = false;
      lTmp.preserveformatting           = false;   //не сохраняем исходное форматирование
      lTmp.refreshonfileopen            = false;
      lTmp.refreshstyle                 = 1;      //xlinsertDeleteCells
      lTmp.savepassword                 = false;
      lTmp.savedata                     = true;
      lTmp.adjustcolumnwidth            = true;  // разрешаем раздвигать колонки по размеру данных
      lTmp.RefreshPeriod                = 0;
      lTmp.textfilepromptonrefresh      = false;
      lTmp.textfileplatform             = 866;    // кодировка csv файла (866 - Кириллица DOS)
      lTmp.textfilestartrow             = 1;
      lTmp.textfileparsetype            = 1;  //xlDelimited
      lTmp.textfiletextqualifier        = 1;
      lTmp.textfileconsecutivedelimiter = false;
      lTmp.textfiletabdelimiter         = false;   // разделитель табуляция
      lTmp.textfileSemicolonDelimiter   = true;
      lTmp.textfileCommaDelimiter       = false;
      lTmp.textfileSpaceDelimiter       = false;
      lTMp.TextFileColumnDateTypes      = arr;
      lTmp.textfiletrailingminusnumbers = true;
      lTmp.Refresh(false);   
     END;
    Проблема возникает именно здесь
    lTMp.TextFileColumnDateTypes      = arr;
    когда нужно передать в качестве параметра значение элементов массива....
    >> Ответить
    • Развернуть В Excel просто .. ( publicem  11.05.2016 18:52 )
      5(1)
      [code] .TextFileColumnDateTypes = 1,2,2,1,2[code]
      и т.д.
      >> Ответить
      • Развернуть В 3-х звенке для lgx.d32+lgxs.d32 (+) ( григ  30.05.2016 10:04 )
        5(1)
        Давно уже было реализована передача одномерного массива TArray в ActiveX. В частности для заполнения строки Excel сразу несколькими значениями: Ar=TArray; Ar[0]=...; ExcelApplication.Range().Value=Ar;
        Насчет 2-х звенки rslx.d32 сказать ничего не могу. Но может быть проблема в другом: у Вас в примере TArray из 11 элементов, а заполняете вы только 5. Остальные - NULL. A в ActiveX NULL имеет три значения:VT_EMPTY, VT_NULL, VT_ERROR
        Наверное надо указать нужный вид NULL или ограничить массив по количеству заполненных реально ячеек.

        >> Ответить