Показать сообщение отдельно
Старый 21.06.2006, 18:57   #59  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
А, собственно говоря, чччо мы мучаемся... Пусть Excel сам всё и определяет для себя - все свои сепараторы, семиколоны, комасы и прочие бэкслэши - используем эксельную функцию TRANSPOSE :
X++:
static void Test_OpenText_FormulaArray_2(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:J1
    COM::createFromVariant( cells.Item(1,  1) ).Value2(  1);
    COM::createFromVariant( cells.Item(1,  2) ).Value2(  2);
    COM::createFromVariant( cells.Item(1,  3) ).Value2(  3);
    COM::createFromVariant( cells.Item(1,  4) ).Value2(  4);
    COM::createFromVariant( cells.Item(1,  5) ).Value2(  5);
    COM::createFromVariant( cells.Item(1,  6) ).Value2(  6);
    COM::createFromVariant( cells.Item(1,  7) ).Value2(  7);
    COM::createFromVariant( cells.Item(1,  8) ).Value2(  8);
    COM::createFromVariant( cells.Item(1,  9) ).Value2(  9);
    COM::createFromVariant( cells.Item(1, 10) ).Value2( 10);
    
    // вторая строка листа - типы полей A2:J2
    COM::createFromVariant( cells.Item(2,  1) ).Value2(  1);
    COM::createFromVariant( cells.Item(2,  2) ).Value2(  2);
    COM::createFromVariant( cells.Item(2,  3) ).Value2(  2);
    COM::createFromVariant( cells.Item(2,  4) ).Value2(  2);
    COM::createFromVariant( cells.Item(2,  5) ).Value2(  2);
    COM::createFromVariant( cells.Item(2,  6) ).Value2(  1);
    COM::createFromVariant( cells.Item(2,  7) ).Value2(  1);
    COM::createFromVariant( cells.Item(2,  8) ).Value2(  1);
    COM::createFromVariant( cells.Item(2,  9) ).Value2(  1);
    COM::createFromVariant( cells.Item(2, 10) ).Value2(  1);
    
    rng = wks.Range('A11:B20');
    
    rng.FormulaArray('=TRANSPOSE(A1:J2)');
    // используем формулу выше вместо формулы ниже :)
    // rng.FormulaArray(@'={1\1; 2\2; 3\2; 4\2; 5\2; 6\1; 7\1; 8\1; 9\1; 10\1}');
    
        
    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
    );
    
}