如何以编程方式将string转换为数字以移除绿色警告三angular形(Aspose Cells)?

我的工作表中有两列,每个单元格都带有绿色的警告三angular形,其中“这个单元格中的数字被格式化为文本,或者以一个背叛者作为前缀”。

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

当然,我想以编程的方式来做到这一点。 怎么做?

注意在下面的屏幕截图中,Qty列工作正常(其中的数据是一个int;导致绿色警告图标的两列是string,但他们“看起来像”的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”

所以把这个技巧与他们拉到一起,真的会变得复杂,检查是否可以转换为整数,然后只有这样才能做到。 有一个更好的方法来把所有的值作为文本。 … 对?

那么,这些列的底层值是text / string,所以你不能将数字格式应用到单元格(在这些列中),除非你先把值转换为数字数据。 我想你可能会尝试将string值转换为适当的数据types(例如数字),而您通过Aspose.Cells API从您的数据源/variables插入到单元格的值。 你应该为你的需求select适当的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担任Support developer / Evangelist。

我只是logging了一个快速和肮脏的解决scheme的macros:

 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 

我知道,对这些“文本”单元格执行“文本到列”操作将剥离不可见的单引号,从而将单元格转换为数字(非常快)。 给这个镜头,请让我知道它是如何摆脱。

eP.S. 这个macros是由微软用macroslogging器logging的。