我正在尝试阅读,解析和擅长,一些不清楚的事情像往常一样发挥作用。
这就是我所拥有的:
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()
它也行不通。我不明白为什么。
为什么我想要有所作为?因为如果禁止在数量列中包含实际值(至少在我的情况下),我想检查一下并让用户有机会在该位置放置正确的值,并可能进一步调查为什么会发生这种情况。
答案 0 :(得分:1)
在\Classes\SysDataExcelCOM\readRow
中了解它是如何完成的。
它基本上使用switch
来测试类型。这真无聊!
另请查看ExcelIO,这是我几年前创作的课程。它读取Excel并将每行作为容器返回。这是一种更高级的方法。
作为最后的手段,您可以将Excel另存为制表符分隔文件。然后使用TextIO
来阅读内容。这比使用Excel快至少10倍!