1

Тема: Jscript: Можно ли передать напрямую в Excel recordset?

в результате выборки получается рекордсет 54 х 7, можно ли его вставить в эксель напрямую, примерно так:

oRS.Open("select * from 'table.dbf'",oConn); 
var ExcelSheet = new ActiveXObject("Excel.Sheet");
ExcelSheet.ActiveSheet.range('A1:G54').value=oRS.Fields;

2

Re: Jscript: Можно ли передать напрямую в Excel recordset?

putrsa пишет:

в результате выборки получается рекордсет 54 х 7, можно ли его вставить в эксель напрямую, примерно так:

oRS.Open("select * from 'table.dbf'",oConn); 
var ExcelSheet = new ActiveXObject("Excel.Sheet");
ExcelSheet.ActiveSheet.range('A1:G54').value=oRS.Fields;

putrsa,

нет.
1. Fields возвращает коллекцию полей запроса, а не их значений.
2. Запрос надо разбирать вручную и раскладывать по ячейкам.
3. Возможно Вы в курсе - просто напомню. В EXCEL есть возможность Данные - Импорт внешних данных.
Там Вы можете сформулировать Ваш запрос к базе - и вот тогда значения разложатся по ячейкам сами.
И никакой JScript для этого не нужен.

3 (изменено: putrsa, 2010-10-22 00:00:40)

Re: Jscript: Можно ли передать напрямую в Excel recordset?

Данный топик возник из-за необходимости модернизировать рабочий скрипт с целью ускорения вывода экселевского документа на экран. Самое емкое по времени место скрипта как раз вывод значений запроса в документ. Может есть способ ускорить вывод кроме "Данные - Импорт внешних данных" (никогда из скрипта не формировал запрос в екселе и не уверен что заработает)

4

Re: Jscript: Можно ли передать напрямую в Excel recordset?

Приведите здесь текст «рабочего скрипта», посмотрим.

5 (изменено: putrsa, 2010-10-22 08:46:12)

Re: Jscript: Можно ли передать напрямую в Excel recordset?

вот кусочек скрипта, который относится к теме:

var f_name='D:\\OUT\\reestrout10_2010.dbf'; 
var sConnString="Provider=vfpoledb.1;Data Source=d:\\;Mode=Share Deny None;DSN=;" 
  if (WScript.Arguments.Count()>0) f_name=oArg(0); 
var oConn = new ActiveXObject("ADODB.Connection");
  oConn.Open(sConnString);
  var oRS = new ActiveXObject("ADODB.Recordset");
  oRS.Open("select * from '"+f_name+"'",oConn); 
var data = new Date(oRS.Fields('zdata'));


var ExcelSheet = new ActiveXObject("Excel.Sheet");
i=1;
if (oRS.eof)  WScript.Quit();

while (!oRS.eof)
{//заполняем таблицу
j=i+4;    
    with (ExcelSheet.ActiveSheet)
    {
        Cells(j, 1).Value = i;
        Cells(j, 2).Value= oRS.Fields('kod_obh');
        Cells(j, 3).Value = oRS.Fields('Fio');
        Cells(j, 4).Value = oRS.Fields('nabon');
        Cells(j, 5).Value = oRS.Fields('kollist');
        Cells(j, 8).Value = oRS.Fields('kolvo');
        Cells(j, 12).Value = oRS.Fields('zdata');
    }    
    oRS.MoveNext;
    i+=1;
}

6 (изменено: Евген, 2010-10-22 08:52:21)

Re: Jscript: Можно ли передать напрямую в Excel recordset?

Если в Excel средствами VBA сделать выборку, то можно будет использовать такую комбинацию...

Set Engine = CreateObject("DAO.DBEngine.36")
Set MDB=Engine.OpenDatabase ("d:\listok.mdb")
Set RS=MDB.OpenRecordset("select * from list_table")
cells(20,1).CopyFromRecordset RS

вот так будет работать

Времени не хватает... :-(

7 (изменено: putrsa, 2010-10-22 10:06:00)

Re: Jscript: Можно ли передать напрямую в Excel recordset?

Евген спасибо, то что надо, теперь отчеты просто летают. Синтаксис для Jscript:

ExcelSheet.ActiveSheet.range("a4").CopyFromRecordset(oRS);

8

Re: Jscript: Можно ли передать напрямую в Excel recordset?

Рад что помог...

Времени не хватает... :-(