Цель ведущего апострофа с числовыми значениями в 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)