我的工作表中有两列,其中每个单元格都有绿色警告三角形,并带有消息“此单元格中的数字被格式化为文本或前面有反叛。”
我可以通过从上下文菜单中选择“转换为数字”在Excel中手动清除这些绿色警告三角形。
当然,我想以编程方式执行此操作。怎么做?
请注意,在下面的屏幕截图中,Qty列工作正常(其中的数据是一个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”之类的值
所以用它们拉同样的技巧真的会弄错,检查它们是否可以转换为整数,然后只有它们可以这样做。必须有一种更好的方法来将所有值视为文本。 ......对吗?
答案 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的支持开发人员/传播者。