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

时间:2017-01-14 00:22:01

标签: excel number-formatting aspose aspose-cells

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

我可以通过从上下文菜单中选择“转换为数字”在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一样,但有时却没有,包含诸如“6679 667904”和“2134LB”之类的值

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

2 个答案:

答案 0 :(得分: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

我知道对列进行" Text"对这些"文本进行操作"细胞将剥离看不见的撇号,从而将细胞转化为数字(非常快)。请试一试,请告诉我它是如何实现的。

E-P.S。上面的宏是由Microsoft使用宏录制器录制的。

答案 1 :(得分: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的支持开发人员/传播者。