首页 文章

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

提问于
浏览
0

我的工作表中有两列,其中每个单元格都有绿色警告三角形,并带有消息“此单元格中的数字格式为文本或前面有撇号” .

我可以通过从上下文菜单中选择“转换为数字”在Excel中手动清除这些绿色警告三角形 .

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

请注意,在下面的屏幕截图中,Qty列工作正常(其中的数据是一个int;导致绿色警告图标的两列是字符串,但它们“看起来像”对Excel的整数,我猜,导致问题):

enter image description here

这是我正在使用的代码:

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一样看起来像Excel,但有时却看不到,包含"6679 667904"和"2134LB"等值

所以用它们拉同样的技巧真的会让人费解,检查一下它们是否可以转换为整数,然后只有它们才能这样做 . 必须有一种更好的方法来将所有值视为文本 . ... 对?

2 回答

  • 1

    那么,这些列的基础值是文本/字符串,因此您不能将数字格式应用于单元格(在这些列中),除非您首先将值转换为数字数据 . 我想你可以尝试将字符串值转换为适当的数据类型(例如数字),同时通过数据源/变量中的Aspose.Cells 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的支持开发人员/传播者 .

  • 1

    我刚刚录制了一个宏,用于快速而肮脏的解决方案:

    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
    

    我知道在这些“文本”单元格上执行“文本到列”操作将剥离看不见的撇号,从而将单元格转换为数字(非常快) . 请试一试,请告诉我它是如何实现的 .

    E-P.S . 微处理器使用宏录制器记录上述宏 .

相关问题