А, в принципе, можно обойтись и средаствами 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;
}
}
}
}