Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#替换前面的撇号Excel COM_C#_Excel_Office Interop - Fatal编程技术网

C#替换前面的撇号Excel COM

C#替换前面的撇号Excel COM,c#,excel,office-interop,C#,Excel,Office Interop,如何在Excel中删除单元格(或区域)的前导撇号 i、 e: 尝试了以下值,但所有值均不包含前导撇号: xlRange.Value xlRange.Value2 xlRange.get_Value(Type.Missing) 还尝试使用下面的替换代码,但无效: xlRange.Replace("'", "", Excel.XlLookAt.xlWhole, Excel.XlSearchOrder.xlByRows, true, Type.Missing, Type.Missing, Type

如何在Excel中删除单元格(或区域)的前导撇号

i、 e:

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

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返回“General”

Excel中带数值的前导撇号的目的是将内容标记为“text”,这也会使内容向左对齐。这可以通过在VBA编辑器(Ctrl+G)的即时窗口中查询单元格内容来查看:

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

将单元格内容转换为数字将删除撇号。尝试对非数字内容执行此操作会导致错误。以下代码演示了如何在VB speak中执行此操作:

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)

我的问题不仅仅是数字,而是任何数据类型。前面的撇号告诉Excel将值视为文本。这与路线无关。@PanagiotisKanavos啊,好的。我的大脑有点像撇号=文本+左;双引号=文本+右引号。但要么这是一个早期版本,不再适用,要么我的心理数据被弄糊涂了,因为我发现事实并非如此。我已经更正了文本-谢谢!好的,但问题是,撇号出现在Excel文件中,但rng.Value2不包括前导撇号。@GustavoKnx是的,我知道。撇号在Excel单元格中也不可见,仅在公式栏中可见。Excel像控制字符一样“屏蔽”它/处理它,这就是为什么需要这种性质的变通方法。你会注意到没有人问你为什么你觉得你需要删除这些,这只是假设你有一个理由…它实际上不在单元格值中,只是一个方便的快捷方式,让用户输入文本标签而不是数据。请查看以获取可能的检测方法。使用Clear()并重新指定值以将其转换为数据。
Dim s As String

s = CStr(ActiveCell.Value2)
ActiveCell.Clear
ActiveCell.Value2 = Right(s, 1)