|
![]() |
#1 |
Участник
|
Не мучаемся, а препарируем
![]() Еще один вариант с разделителями X++: str leftBrace; str rightBrace; str columnSeparator; str rowSeparator; str alternateArraySeparator; str decimalSeparator; COMVariant var; #define.xlDecimalSeparator(0x00000003) #define.xlLeftBrace(0x0000000C) #define.xlRightBrace(0x0000000D) #define.xlColumnSeparator(0x0000000E) #define.xlRowSeparator(0x0000000F) #define.xlAlternateArraySeparator(0x00000010) ; ... var = xlApp.International(#xlDecimalSeparator); if (var) decimalSeparator = var.bStr(); else decimalSeparator = ","; var = xlApp.International(#xlLeftBrace); if (var) leftBrace = var.bStr(); else leftBrace = "{"; var = xlApp.International(#xlRightBrace); if (var) rightBrace = var.bStr(); else rightBrace = "}"; var = xlApp.International(#xlColumnSeparator); if (var) columnSeparator = var.bStr(); else columnSeparator = ";"; var = xlApp.International(#xlRowSeparator); if (var) rowSeparator = var.bStr(); else rowSeparator = ":"; var = xlApp.International(#xlAlternateArraySeparator); if (var) alternateArraySeparator = var.bStr(); else alternateArraySeparator = "&"; if (columnSeparator == decimalSeparator) columnSeparator = alternateArraySeparator; if (rowSeparator == decimalSeparator) rowSeparator = alternateArraySeparator; rng.FormulaArray( strfmt("=%1 1 %3 1 %4 2 %3 2 %4 3 %3 2 %4 4 %3 2 %4 5 %3 2 %4 6 %3 2 %4 7 %3 4 %4 8 %3 2 %4 9 %3 1 %4 10 %3 2%2", leftBrace, rightBrace, columnSeparator, rowSeparator)); А как это будет выглядеть на английской версии? Если все Ok, то исправлю выгрузку
__________________
Axapta v.3.0 sp5 kr2 Последний раз редактировалось AndyD; 22.06.2006 в 10:05. |
|
![]() |
#2 |
Moderator
|
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 ); } |
|
![]() |
#3 |
Moderator
|
Цитата:
Сообщение от AndyD
PS 2 Gustav.
А как это будет выглядеть на английской версии? Если все Ok, то исправлю выгрузку На английской версии проверю чуть позже. Обязательно сообщу. ![]() P.S. иех, почему я не проверил сразу просто Range?.. наверное, слово Array меня смутило... В общем, "Болван... - Согласен!" (с) Операция Ы Последний раз редактировалось Gustav; 22.06.2006 в 12:11. |
|
|
За это сообщение автора поблагодарили: oip (2). |
![]() |
#4 |
Moderator
|
Цитата:
Сообщение от AndyD
А как это будет выглядеть на английской версии? Если все Ok, то исправлю выгрузку
Всё - ОК! OpenText отрабатывает, файл загружается. Строка для FormulaArray формируется корректно. Когда в региональных настройках Windows "Десятичный разделитель" - "запятая", то в виде (содержимое любой входящей в массив ячейки Excel): Код: ={1\1; 2\2; 3\2; 4\2; 5\2; 6\2; 7\4; 8\2; 9\1; 10\2} Код: ={1,1; 2,2; 3,2; 4,2; 5,2; 6,2; 7,4; 8,2; 9,1; 10,2} P.S.Forward Цитата:
Сообщение от AndyD
Выгрузку исправил.
Последний раз редактировалось Gustav; 22.06.2006 в 20:20. |
|
Теги |
benchmark, download, excel, faq, xml, законченный пример, производительность, экспорт/импорт |
|
|