C# 替换前导撇号 Excel COM

标签 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 返回“常规”

最佳答案

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/

相关文章:

C# 创建程序集并设置版本 - 在运行时

c# - 如何转换像素格式?从 32bppRGB 到 C# 中的 16bpp 灰度

c# - C# 中的 Word 自动化。使用另存为时出错

c# - 将 JSON 值存储到具有有序键名的字典中

c# - Outlook 文件夹浏览对话框?

excel - 通过 VBA 创建数据透视表时出错

excel - 如何根据多组 OR 条件对列求和?

vba - 从 VBA 中的命名范围获取值

c# - MVC Excel 互操作

c# - 如何使用 C# 和 Office Interop 获取 Office 文档的完整文件名?