C # Заменить ведущий апостроф Excel COM

2

Как удалить ведущий апостроф ячейки (или диапазона) в Excel?

то есть:

Изображение 174551

Пробовали следующие значения, но все они не включают в себя ведущий апостроф:

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"

  • 1
    На самом деле это не значение ячейки, а удобный ярлык для ввода текстовой метки вместо данных. Проверьте свойство PrefixCharacter для возможного способа его обнаружения. Используйте Clear () и переназначьте значение, чтобы превратить его в данные.
Теги:
excel
office-interop

1 ответ

1

Цель ведущего апострофа с числовыми значениями в Excel заключается в том, чтобы пометить контент как "текст", который также выравнивает его влево. Это можно увидеть, запросив содержимое ячейки в окне Immediate окна редактора VBA (Ctrl + G):

?ActiveCell.Value

Если это выполняется в тексте (с апострофом), результат будет скрыт в левой части окна. При выполнении над номером перед результатом предшествует пробел.

Преобразование содержимого ячейки в число удаляет апостроф. Попытка сделать это для нечислового содержимого приводит к ошибке. Следующий код демонстрирует, как это можно сделать в VB-talk:

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

В С# используйте 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 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)
  • 0
    Моя проблема не только с числами, но и с любым типом данных.
  • 0
    @GustavoKnx Добавлено ...
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню