C#替换前导撇号Excel COM

时间:2018-12-06 12:52:40

标签: c# excel office-interop

如何在Excel中删除单元格(或范围)的前撇号?

即:

Cell value

尝试了以下值,但所有这些值都不包含前导撇号:

xlRange.Value
xlRange.Value2
xlRange.get_Value(Type.Missing)

也尝试使用下面的替换代码,但不起作用:

xlRange.Replace("'", "", Excel.XlLookAt.xlWhole, Excel.XlSearchOrder.xlByRows, true, Type.Missing, Type.Missing, Type.Missing);

xlRange.NumberFormat返回“常规”

1 个答案:

答案 0 :(得分:1)

在Excel中使用数字前导撇号的目的是将内容标记为“文本”,其结果也将其向左对齐。通过在VBA编辑器的“立即窗口”(Ctrl + G)中查询单元格内容可以看到这一点:

<View>
<pinPage/>  set a flex:1 to get full screen when ever pin page is active
<otherPage/>//navigation works here.
</View>

如果对文本(带有撇号)执行此操作,则结果将在窗口左侧刷新。当对数字执行时,结果前会加一个空格。

将单元格内容转换为数字可删除撇号。尝试对非数字内容执行此操作将导致错误。下面的代码演示了如何使用VB语言完成此操作:

?ActiveCell.Value

在C#中,使用Sub ConvertLeftAlignedNumber() Dim rng As Excel.Range Dim rngVal As Variant Set rng = xlApp.ActiveCell rngVal = rng.Value If IsNumeric(rngVal) Then rng.Value = Val(rngVal) End If End Sub 代替Double.TryParse()

如果问题还在于从文本和数字中删除前导撇号,则可以通过将文本内容辅助为变量,清除单元格,然后再写回值来完成文本值。

IsNumeric

在VB(A)中,可以使用 //test data Excel.Range rngString = ws.get_Range("B12", missing); Excel.Range rngLeftValue = ws.get_Range("D14", missing); Excel.Range rngValue = ws.get_Range("A15", missing); rngString.Value2 = "'test"; rngLeftValue.Value2 = "'10"; rngValue.Value2 = 10; //Is numeric? Double val; if (Double.TryParse(rngString.Value2.ToString(), out val)) { System.Diagnostics.Debug.Print(val.ToString()); } else //it's a string { string sString = rngString.Text.ToString(); rngString.Clear(); string sStringx = sString.Substring(0); rngString.Value2 = sStringx; System.Diagnostics.Debug.Print(rngString.Value2.ToString()); } if (Double.TryParse(rngLeftValue.Value2.ToString(), out val)) { System.Diagnostics.Debug.Print(val.ToString()); } if (Double.TryParse(rngValue.Value2.ToString(), out val)) { System.Diagnostics.Debug.Print(val.ToString()); } 函数:

Right