如何删除 Excel 中单元格(或区域)的前导撇号?
即:
尝试了以下值,但所有值都不包括前导撇号:
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 返回“常规”
最佳答案
Excel 中带有数值的前导撇号的目的是将内容标记为“文本”,结果也是将内容左对齐。这可以通过在 VBA 编辑器 (Ctrl+G) 的立即窗口中查询单元格内容来查看:
?ActiveCell.Value
如果对文本(带有撇号)执行此操作,则结果会齐平在窗口的左侧。对数字执行时,结果前面有一个空格。
将单元格内容转换为数字会删除撇号。尝试对非数字内容执行此操作会导致错误。以下代码演示了如何用 VB 语言完成此操作:
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
在 C# 中使用 Double.TryParse()
而不是 IsNumeric
如果问题还在于从文本和数字中删除前导撇号,这可以通过将文本内容分配给变量、清除单元格,然后写回值来为文本值完成。
//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());
}
在 VB(A) 中,可以使用 Right
函数:
Dim s As String
s = CStr(ActiveCell.Value2)
ActiveCell.Clear
ActiveCell.Value2 = Right(s, 1)
关于C# 替换前导撇号 Excel COM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53651914/