Показать сообщение отдельно
Старый 22.06.2006, 12:03   #61  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
AndyD... Есть ощущение, что мы несколько перестарались с массивами...
Сейчас проверил - работает и обычный Range, без всяких FormulaArray...
Просто выстраиваем наш "массив массивов" из 10 строк и 2 столбцов в диапазоне A1:B10 и передаем его OpenText... о блин!
X++:
static void Test_OpenText_NoArray_3(Args _args)
{
    COM xlApp;
    COM rng;
        
    COM wbks, wbk;
    COM wkss, wks;
    COM cells;
    ;
        
    xlApp = new COM('Excel.Application');   
    xlApp.Visible(true);
        
    wbks = xlApp.Workbooks();   
    wbk = wbks.Add();
        
    wkss = wbk.Worksheets();
    wks = wkss.Item(1);
        
    cells = wks.Cells();
        
    // первый СТОЛБЕЦ листа - номера полей A1:A10
    COM::createFromVariant( cells.Item( 1, 1) ).Value2(  1);
    COM::createFromVariant( cells.Item( 2, 1) ).Value2(  2);
    COM::createFromVariant( cells.Item( 3, 1) ).Value2(  3);
    COM::createFromVariant( cells.Item( 4, 1) ).Value2(  4);
    COM::createFromVariant( cells.Item( 5, 1) ).Value2(  5);
    COM::createFromVariant( cells.Item( 6, 1) ).Value2(  6);
    COM::createFromVariant( cells.Item( 7, 1) ).Value2(  7);
    COM::createFromVariant( cells.Item( 8, 1) ).Value2(  8);
    COM::createFromVariant( cells.Item( 9, 1) ).Value2(  9);
    COM::createFromVariant( cells.Item(10, 1) ).Value2( 10);
        
    // второй СТОЛБЕЦ листа - типы полей B1:B10
    COM::createFromVariant( cells.Item( 1, 2) ).Value2(  1);
    COM::createFromVariant( cells.Item( 2, 2) ).Value2(  2);
    COM::createFromVariant( cells.Item( 3, 2) ).Value2(  2);
    COM::createFromVariant( cells.Item( 4, 2) ).Value2(  2);
    COM::createFromVariant( cells.Item( 5, 2) ).Value2(  2);
    COM::createFromVariant( cells.Item( 6, 2) ).Value2(  1);
    COM::createFromVariant( cells.Item( 7, 2) ).Value2(  1);
    COM::createFromVariant( cells.Item( 8, 2) ).Value2(  1);
    COM::createFromVariant( cells.Item( 9, 2) ).Value2(  1);
    COM::createFromVariant( cells.Item(10, 2) ).Value2(  2);
    
    // !!!!!! обычный Range без всяких FormulaArray :)
    rng = wks.Range('A1:B10');
    
    wbks.OpenText
    (
    'C:\\demo.txt', //FileName
    1251, // Origin,
    1, // StartRow,
    1, // DataType
    1, // TextQualifier
    false, // ConsecutiveDelimiter,
    true, // Tab,
    false, // Semicolon,
    false, // Comma,
    false, // Space,
    false, // Other,
    '', // OtherChar,
    rng // FieldInfo
    );
    
}