C#替换前面的撇号Excel COM
如何在Excel中删除单元格(或区域)的前导撇号 i、 e: 尝试了以下值,但所有值均不包含前导撇号: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
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)