读取和解析 excel 个文件时获取单元格类型
Get cell types when reading and parsing excel files
我正在尝试阅读和解析,excel 一些不清楚的事情对我来说像往常一样发挥作用。
这是我拥有的:
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()
它也不会起作用。我不明白为什么。
我为什么要有所作为?因为如果禁止在数量列中有实际值(至少在我的情况下),我想检查一下并让用户有机会在那个地方放置一个正确的值,并可能进一步调查为什么它恰好在那里。
看看 \Classes\SysDataExcelCOM\readRow
是如何完成的。
它基本上是使用 switch
来测试类型。这真的很无聊!
也看看 ExcelIO,这是我几年前制作的 class。它读取 Excel 和 returns 每一行作为一个容器。这是一种更 high-level 的方法。
作为最后的手段,您可以将 Excel 保存为制表符分隔的文件。然后使用TextIO
阅读内容。这至少比使用 Excel!
快 10 倍
我正在尝试阅读和解析,excel 一些不清楚的事情对我来说像往常一样发挥作用。
这是我拥有的:
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()
它也不会起作用。我不明白为什么。
我为什么要有所作为?因为如果禁止在数量列中有实际值(至少在我的情况下),我想检查一下并让用户有机会在那个地方放置一个正确的值,并可能进一步调查为什么它恰好在那里。
看看 \Classes\SysDataExcelCOM\readRow
是如何完成的。
它基本上是使用 switch
来测试类型。这真的很无聊!
也看看 ExcelIO,这是我几年前制作的 class。它读取 Excel 和 returns 每一行作为一个容器。这是一种更 high-level 的方法。
作为最后的手段,您可以将 Excel 保存为制表符分隔的文件。然后使用TextIO
阅读内容。这至少比使用 Excel!