|
![]() |
#1 |
Участник
|
А, в принципе, можно обойтись и средаствами Axapta, если считывать по одной строке или колонке.
X++: { ComExcelDocument_RU excel = new ComExcelDocument_RU(); Com doc; Com app; Com sheet; Com range; Array arr; int j; COMVariant v; Array GetArrayFromVariant(COMVariant var) { Binary bin = new Binary(100); int dims; Array ret = null; int cols, rows; int lBound; int i; int locks; ; if (var && var.variantType() == COMVariantType::VT_SAFEARRAY) { bin.attach(var.int(), 24); dims = bin.word(0); if (dims == 2) { bin.attach(var.int(), 16 + dims * 8); cols = bin.dWord(16); rows = bin.dWord(24); if (rows == 1) { locks = bin.dWord(8); if (locks == 0) { bin.dWord(8, locks+1); bin.word(0, 1); try { ret = var.safeArray(); bin.word(0, dims); bin.dWord(8, locks); } catch { bin.word(0, dims); bin.dWord(8, locks); } } } else if (cols == 1) { locks = bin.dWord(8); if (locks == 0) { bin.dWord(8, locks+1); lBound = bin.dWord(20); bin.dWord(16, rows); bin.dWord(20, bin.dWord(28)); bin.word(0, 1); try { ret = var.safeArray(); bin.word(0, dims); bin.dWord(16, cols); bin.dWord(20, lBound); bin.dWord(8, locks); } catch { bin.word(0, dims); bin.dWord(16, cols); bin.dWord(20, lBound); bin.dWord(8, locks); } } } } else if (dims == 1) ret = var.safeArray(); } return ret; } ; excel.open("Имя файла Excel для загрузки.xls",true); doc = excel.getComDocument(); app = doc.Application(); sheet = app.activeSheet(); range = sheet.range("D1:D100"); arr = GetArrayFromVariant(range.value2()); if (arr) { for (j=1;j<=arr.lastIndex();j++) { v = arr.value(j); switch (v.variantType()) { case COMVariantType::VT_BSTR: info(v.bStr()); break; case COMVariantType::VT_INT: info(strfmt("%1", v.int())); break; case COMVariantType::VT_R8: info(strfmt("%1", v.double())); break; } } } }
__________________
Axapta v.3.0 sp5 kr2 Последний раз редактировалось AndyD; 11.01.2007 в 13:12. |
|
|
За это сообщение автора поблагодарили: olesh (1), belugin (14), alex55 (2). |
![]() |
#2 |
Участник
|
|
|