如何以编程方式将字符串转换为数字以删除绿色警告三角形 (Aspose Cells)?

How can I programmatically convert a string to number to remove the green warning triangle (Aspose Cells)?

我的 sheet 中有两列,其中每个单元格都有带有消息的绿色警告三角形,"The number in this cell is formatted as text or preceded by an apostraphe."

我可以通过从上下文菜单中选择 "Convert to Number" 来手动清除 Excel 中的这些绿色警告三角形。

当然,我想以编程方式执行此操作。怎么做?

请注意下面的屏幕截图中的 Qty 列工作正常(其中的数据是一个 int;导致绿色警告图标的两列是字符串,但它们 "look like" int 到 Excel, 我猜是导致问题的原因):

这是我使用的代码:

public static readonly string NUMBER_FORMAT_ZERO = "0";
. . .
var flag = new StyleFlag
{
    CellShading = true,
    FontName = true,
    FontSize = true,
    FontColor = true,
    FontBold = true,
    NumberFormat = true
};

Cell qtyCell = customerWorksheet.Cells[rowToPopulate, QTY_COL];
qtyCell.PutValue(frbdbc.Qty);
var qcStyle = qtyCell.GetStyle();
qcStyle.Font.Name = fontForSheets;
qcStyle.IsTextWrapped = false;
qtyCell.SetStyle(qcStyle);

Cell CWeekCell = customerWorksheet.Cells[rowToPopulate, CWEEK_COL];
CWeekCell.PutValue(frbdbc.CWeek);
var cwStyle = CWeekCell.GetStyle();
cwStyle.Font.Name = fontForSheets;
cwStyle.IsTextWrapped = false;
cwStyle.Custom = RoboReporterConstsAndUtils.NUMBER_FORMAT_ZERO;
CWeekCell.SetStyle(cwStyle, flag);

Cell PAItemCell = customerWorksheet.Cells[rowToPopulate,
    PAITEMCODE_COL];
PAItemCell.PutValue(frbdbc.PAItemCode);
var paiStyle = PAItemCell.GetStyle();
paiStyle.Font.Name = fontForSheets;
paiStyle.IsTextWrapped = false;
//paiStyle.Custom = RoboReporterConstsAndUtils.NUMBER_FORMAT_ZERO;
PAItemCell.SetStyle(paiStyle); //, flag);

如您所见,我尝试在样式中添加和不添加自定义数字格式和标志,但结果都是一样的:带有绿色警告消息。

我需要做什么来解决这个问题?对于这两列,我想我可以这样做:

CWeekCell.PutValue(Convert.ToInt32(frbdbc.CWeek)); 

...但是还有其他一些列,其值 有时 看起来 Excel 像整数,但有时又不像,包含诸如 " 6679 667904" 和 "2134LB"

因此,用同样的技巧对它们进行操作真的会让人费解,检查它们是否可以转换为整数,然后只有在可以的情况下才这样做。必须有一种更好的方法来将所有值都视为文本。 ...对吗?

我刚刚录制了一个宏来快速解决问题:

Columns("G:G").Select
Selection.TextToColumns Destination:=Range("G1"), DataType:=xlDelimited, _
    TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
    Semicolon:=False, Comma:=False, Space:=False, Other:=False, FieldInfo _
    :=Array(1, 1), TrailingMinusNumbers:=True

我知道对这些 "text" 单元格执行 "Text to columns" 操作会去除看不见的撇号,从而将单元格转换为数字(非常快)。试一试,请告诉我结果如何。

e-P.S.上面这个宏是微软用宏录制器录制的。

那么,这些列的基础值是 text/string,因此您不能将数字格式应用于单元格(在这些列中),除非您先将这些值转换为数字数据。我认为您可能会尝试将字符串值转换为适当的数据类型(例如数字),同时您通过 Aspose.Cells 来自数据 source/variables 的 API 将值插入单元格。您应该根据需要选择合适的 Cell.PutValue() 重载方法,您需要将第二个布尔参数指定为 true。因此,您可以尝试将代码行(从代码段)更改为: 例如 示例代码:

Cell CWeekCell = customerWorksheet.Cells[rowToPopulate, CWEEK_COL];
        **CWeekCell.PutValue(frbdbc.CWeek, true);**
        var cwStyle = CWeekCell.GetStyle();
        cwStyle.Font.Name = fontForSheets;
        cwStyle.IsTextWrapped = false;
        cwStyle.Custom = RoboReporterConstsAndUtils.NUMBER_FORMAT_ZERO;
        CWeekCell.SetStyle(cwStyle, flag);

        Cell PAItemCell = customerWorksheet.Cells[rowToPopulate, PAITEMCODE_COL];
        **PAItemCell.PutValue(frbdbc.PAItemCode, true);**
        var paiStyle = PAItemCell.GetStyle();
        paiStyle.Font.Name = fontForSheets;
        paiStyle.IsTextWrapped = false;
        //paiStyle.Custom = RoboReporterConstsAndUtils.NUMBER_FORMAT_ZERO;
        PAItemCell.SetStyle(paiStyle); //, flag);

..............

我在 Aspose 担任支持开发人员/传播者。