gpt4 book ai didi

C# 替换前导撇号 Excel COM

转载 作者:太空宇宙 更新时间:2023-11-03 12:08:34 24 4
gpt4 key购买 nike

如何删除 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 返回“常规”

最佳答案

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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com