Передача массива данных в Excel
От: sergsakhno  
Дата: 01.11.05 09:07
Оценка:
Как передать массив значений в Excel не используя MFC? Если нужно передать значение одной ячейки то делаю
sheet->Range["B2"]->FormulaR1C1 = "Строка 1";
и все работает, но как передать массив?
Пробовал передавать SAFEARRAY, не работает, в заданых в Range ячейках появляется "ИСТИНА", подскажите куда смотртеть.
PS В MSDN куча примеров, но все они с использованием MFC.
Заранее спасибо за ответы.

01.11.05 18:56: Перенесено из 'C/C++'
Re: Передача массива данных в Excel
От: awod Россия  
Дата: 01.11.05 09:15
Оценка:
Здравствуйте, sergsakhno, Вы писали:

S>Как передать массив значений в Excel не используя MFC? Если нужно передать значение одной ячейки то делаю

S>sheet->Range["B2"]->FormulaR1C1 = "Строка 1";
S>и все работает, но как передать массив?
S>Пробовал передавать SAFEARRAY, не работает, в заданых в Range ячейках появляется "ИСТИНА", подскажите куда смотртеть.
S>PS В MSDN куча примеров, но все они с использованием MFC.
S>Заранее спасибо за ответы.

Смотреть в сторону Variant
С уважением AWOD.
Re[2]: Передача массива данных в Excel
От: sergsakhno  
Дата: 01.11.05 10:32
Оценка:
Здравствуйте, awod, Вы писали:

A>Здравствуйте, sergsakhno, Вы писали:


S>>Как передать массив значений в Excel не используя MFC? Если нужно передать значение одной ячейки то делаю

S>>sheet->Range["B2"]->FormulaR1C1 = "Строка 1";
S>>и все работает, но как передать массив?
S>>Пробовал передавать SAFEARRAY, не работает, в заданых в Range ячейках появляется "ИСТИНА", подскажите куда смотртеть.
S>>PS В MSDN куча примеров, но все они с использованием MFC.
S>>Заранее спасибо за ответы.

A>Смотреть в сторону Variant


Не совсем понял, создавать SafeArray с элементами типа Variant?
Буду признателен за немного более подробное указание направления смотрения...
Re[3]: Передача массива данных в Excel
От: Аноним  
Дата: 01.11.05 10:50
Оценка:
Здравствуйте, sergsakhno, Вы писали:

S>Здравствуйте, awod, Вы писали:


A>>Здравствуйте, sergsakhno, Вы писали:


S>>>Как передать массив значений в Excel не используя MFC? Если нужно передать значение одной ячейки то делаю

S>>>sheet->Range["B2"]->FormulaR1C1 = "Строка 1";
S>>>и все работает, но как передать массив?
S>>>Пробовал передавать SAFEARRAY, не работает, в заданых в Range ячейках появляется "ИСТИНА", подскажите куда смотртеть.
S>>>PS В MSDN куча примеров, но все они с использованием MFC.
S>>>Заранее спасибо за ответы.

A>>Смотреть в сторону Variant


S>Не совсем понял, создавать SafeArray с элементами типа Variant?

S>Буду признателен за немного более подробное указание направления смотрения...
Re[4]: Передача массива данных в Excel
От: sergsakhno  
Дата: 02.11.05 03:11
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Здравствуйте, sergsakhno, Вы писали:


S>>Здравствуйте, awod, Вы писали:


A>>>Здравствуйте, sergsakhno, Вы писали:


S>>>>Как передать массив значений в Excel не используя MFC? Если нужно передать значение одной ячейки то делаю

S>>>>sheet->Range["B2"]->FormulaR1C1 = "Строка 1";
S>>>>и все работает, но как передать массив?
S>>>>Пробовал передавать SAFEARRAY, не работает, в заданых в Range ячейках появляется "ИСТИНА", подскажите куда смотртеть.
S>>>>PS В MSDN куча примеров, но все они с использованием MFC.
S>>>>Заранее спасибо за ответы.

A>>>Смотреть в сторону Variant


S>>Не совсем понял, создавать SafeArray с элементами типа Variant?

S>>Буду признателен за немного более подробное указание направления смотрения...

Неужели никто ничего не может сказать по данной теме, или всем лень?
Пробовал:
VARIANT vv;
VariantInit(&vv);
vv=sheet->Range["A1:B1"]->FormulaR1C1; //Эта строка отрабатывает
sheet->Range["A2:B2"]->FormulaR1C1=vv; //Эта вызывает неизвестное исключение
Что я не так делаю?
Re[5]: Передача массива данных в Excel
От: Vi2 Удмуртия http://www.adem.ru
Дата: 02.11.05 04:14
Оценка:
Здравствуйте, sergsakhno, Вы писали:

S>Неужели никто ничего не может сказать по данной теме?

VARIANT vv;
VARTYPE vt = VT_VARIANT; // или VT_R8 - числа, VT_BSTR - строки
SAFEARRAY* psa = SafeArrayCreateVector(vt, 0, nnn); // где nnn - число ячеек в Range. Для "A2:B2" - nnn=2
// заполняем массив
V_VT(&vv) = VT_ARRAY | vt;
V_ARRAY(&vv) = psa;
sheet->Range["A2:B2"]->FormulaR1C1=vv; //Это не должно уже вызвать исключение
VariantClear(&vv);
Vita
Выше головы не прыгнешь, ниже земли не упадешь, дальше границы не убежишь! © КВН НГУ
Re[6]: Передача массива данных в Excel
От: sergsakhno  
Дата: 03.11.05 05:02
Оценка:
Здравствуйте, Vi2, Вы писали:

Vi2>Здравствуйте, sergsakhno, Вы писали:


S>>Неужели никто ничего не может сказать по данной теме?

Vi2>
Vi2>VARIANT vv;
Vi2>VARTYPE vt = VT_VARIANT; // или VT_R8 - числа, VT_BSTR - строки
Vi2>SAFEARRAY* psa = SafeArrayCreateVector(vt, 0, nnn); // где nnn - число ячеек в Range. Для "A2:B2" - nnn=2
Vi2>// заполняем массив
Vi2>V_VT(&vv) = VT_ARRAY | vt;
Vi2>V_ARRAY(&vv) = psa;
Vi2>sheet->Range["A2:B2"]->FormulaR1C1=vv; //Это не должно уже вызвать исключение
Vi2>VariantClear(&vv);
Vi2>


Большое спасибо Vi2, очень помогло.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.