0

我正在尝试阅读、解析和超越,一些不清楚的事情对我来说像往常一样发挥作用。

这是我所拥有的:

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()它也行不通。我不明白为什么。

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

4

1 回答 1

1

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

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

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

于 2016-01-08T15:18:27.317 回答