powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Подскажите JScript -> SafeArray -> Excel
7 сообщений из 7, страница 1 из 1
Подскажите JScript -> SafeArray -> Excel
    #38639158
13th
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.
Есть такая задача: надо заполнить несколько тысяч ячеек в Excel числами. Если устанавливать для каждой ячейки значение, это несколько тысяч межпроцессных вызовов. Работает очень медленно.
В VBA можно в excel сразу передать Range, например так (пишу на память):

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
dim m(3)
m(1) = "aaa"
m(2) = "bbb"
m(3) = "ccc"

dim Excel
Set Excel = CreateObject("Excel.Application")
Excel.Workbooks.Add
Excel.Range("D3:D5").Value = m



тут массив автоматически преобразуется в SafeArray, результат:
D3 aaa
D4 bbb
D5 ccc
за один вызов.

Примерно такой же код в JScript не работает, вернее работает, но не так, как надо:


Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
var excel_servername = "Excel.Application";
var excel = new ActiveXObject(excel_servername);

try {
var sheets_total = 0;
var sheets_created = excel.SheetsInNewWorkbook;
var book = excel.Workbooks.Add();

var z = new Array(3);
for(var i = 0; i < 3; i++)
{
    z[i] = new Array(1);
    z[i][0] = "ttt-" + (i + 1);
}
book.Sheets.Item(1).Range("D3:D5").Value=z; 

}
catch(e) {}
excel.Quit();



результат:
D3 ttt-1,ttt-2,ttt-3
D4 ttt-1,ttt-2,ttt-3
D5 ttt-1,ttt-2,ttt-3

Подскажите, как сделать засунуть range в Excel за один вызов, разбив по ячейкам.
Сразу скажу, в JS я знаю вообще, пишу на с++. Поэтому если знаете, какой объект или технику использовать, дайте не просто название а небольшой примерчик, хотя бы чисто схематический, что бы не специалисту было понятно.
...
Рейтинг: 0 / 0
Подскажите JScript -> SafeArray -> Excel
    #38639271
Фотография user89
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
13th,

как вариант, вместо массива использовать объект Recordset , а в Excel вставляется очень быстро через CopyFromRecordset
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
var excel = new ActiveXObject('Excel.Application');
var book = excel.Workbooks.Add();
var sheet = book.Sheets(1);
excel.visible = true;

var objRs = new ActiveXObject('ADODB.Recordset');
objRs.Fields.Append ('f1', 3, 4); // 3 = adInteger - четырёхбайтное целое со знаком
objRs.Fields.Append ('f2', 200, 700); // 200 = adVarChar - строковое значение
objRs.open;

objRs.Addnew; objRs.Fields(0).Value = 10; objRs.Fields(1).Value = 'Иванов';
objRs.Addnew; objRs.Fields(0).Value = 20; objRs.Fields(1).Value = 'Петров';
objRs.Addnew; objRs.Fields(0).Value = 30; objRs.Fields(1).Value = 'Сидоров';

sheet.Range('D3').CopyFromRecordset(objRs);

objRs = null;
...
Рейтинг: 0 / 0
Подскажите JScript -> SafeArray -> Excel
    #38639480
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тынць ???
_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Подскажите JScript -> SafeArray -> Excel
    #38639608
13th
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
User89, спс, отлично подошло!
Ex_Soft , тоже спасибо, в выходном отчёте есть особенности форматирования, возможно, потребуется и вариант с html.
...
Рейтинг: 0 / 0
Подскажите JScript -> SafeArray -> Excel
    #38639648
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> вариант с html.
да html там просто для отладки... обратите внимание на за'rem'ленный кусок - там, как раз, Range присваивается массив...

_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Подскажите JScript -> SafeArray -> Excel
    #38639698
Фотография Ex_Soft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Range присваивается массив...
Тока там не Range=i , а Range. Value =i

_________________
"Helo, word!" - 17 errors 56 warnings
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Подскажите JScript -> SafeArray -> Excel
    #38640203
13th
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем спасибо, проблема решена. В т.ч. и с хитрым форматированием, всё сделал на JS.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / HTML, JavaScript, VBScript, CSS [игнор отключен] [закрыт для гостей] / Подскажите JScript -> SafeArray -> Excel
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]