读取和解析excel文件时获取单元格类型

时间:2016-01-08 12:30:55

标签: axapta dynamics-ax-2012 dynamics-ax-2012-r3

我正在尝试阅读,解析和擅长,一些不清楚的事情像往常一样发挥作用。

这就是我所拥有的:

while (true)
{
    comVariantCell1 = cells.item(row, 1).value().variantType();
    comVariantCell2 = cells.item(row, 2).value().variantType();

    //if an empty cell is found, processing will stop and user will get an error message in order to solve the inconsistency.
    if (comVariantCell1 != COMVariantType::VT_EMPTY && comVariantCell2 != COMVariantType::VT_EMPTY)
    {
        //both cells have values, check their types.


        importedLine = conNull();

        progress1.setText(strfmt("Importing row %1", row));

        if (cells.item(row, 1).value().variantType() == COMVariantType::VT_BSTR)
        {
           importedLine += cells.item(row, 1).value().bStr();
        }
        else
        {
            importedLine += cells.item(row, 1).value().double();
        }

        importedLine += cells.item(row, 2).value().double();


        importedLinesCollection += [importedLine]; //conIns(importedLinesCollection, row - 1, (importedLine));
        row++;
    }
    else
    {
        info (strFmt("Empty cell found at line %1 - import will not continue and no records were saved.", row));
        break;
    }
}

Excel格式:

Item number     Transfer Qty
a100            50.5
a101            10
a102            25

这很好用于检查单元格类型是否为字符串:COMVariantType::VT_BSTR

但是我应该用什么来检查实数或整数值

我非常确定在这种情况下,数量将不包含实际值,但无论如何,将来可能有助于区分这两种类型。

我必须提一下,即使我有一个int值而且我使用cells.item(row, 1).value().int()它也行不通。我不明白为什么。

为什么我想要有所作为?因为如果禁止在数量列中包含实际值(至少在我的情况下),我想检查一下并让用户有机会在该位置放置正确的值,并可能进一步调查为什么会发生这种情况。

1 个答案:

答案 0 :(得分:1)

\Classes\SysDataExcelCOM\readRow中了解它是如何完成的。 它基本上使用switch来测试类型。这真无聊!

另请查看ExcelIO,这是我几年前创作的课程。它读取Excel并将每行作为容器返回。这是一种更高级的方法。

作为最后的手段,您可以将Excel另存为制表符分隔文件。然后使用TextIO来阅读内容。这比使用Excel快至少10倍!