Как заставить Excel игнорировать апостроф в начале ячейки
Я пишу инструмент, который синхронизирует простую базу данных с листами Excel. Каждый элемент в таблице в базе данных соответствует одной строке на рабочем листе. Я прочитал лист Excel в инструмент, используя C# и интерфейс взаимодействия Excel, а затем сравнил значения элементов (т. Е. Один из столбцов в листе Excel) после синхронизации, чтобы убедиться, что они равны.
Вчера я нашел случай, когда сравнение не соответствует действительности:
"'<MedalTitle>' Medal - <MedalDescription>"
"<MedalTitle>' Medal - <MedalDescription>"
Второй - тот, который я прочитал в Excel, и, как вы можете видеть, он пропустил первый апостроф. Есть ли способ заставить Excel воспринимать ячейку как просто текст (нет, просто настройка форматирования ячейки не помогает)?
Я даже пытался скопировать значение ('привет') ячейки в VBA следующим образом:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Target.Offset(1, 0).Value = Target.Worksheet.Range("b2").Value
Target.Offset(2, 0).Value = Target.Worksheet.Range("b2").Formula
Target.Offset(3, 0).Formula = Target.Worksheet.Range("b2").Formula
Target.Offset(4, 0).Formula = Target.Worksheet.Range("b2").Value
End Sub
Результатом было то, что значение целевой ячейки всегда привет
Если нет возможности, мне придется сделать что-то ужасное, как
if (dbitem.value[0] == ''' )
{
// stuff
}
else
{
// regular comparison
}
4 ответа
Боюсь апостроф '
является специальным символом для Excel, когда он появляется как первый символ в найденной ячейке. Он говорит Excel обрабатывать остальную часть строки как текст, так что вы можете ввести что-то вроде '34.2
в ячейке, и он будет обрабатывать ее как строку вместо числа (для форматирования и так далее).
Я предлагаю сделать что-то похожее на то, что вы предложили, за исключением того, что когда вы помещаете это в Excel, отметьте первый символ и добавьте дополнительный '
если там уже есть.
В качестве альтернативы, вы можете добавить апостроф ко всем значениям - если вы хотите, чтобы все они были в виде текста. Таким образом, вам не нужна дополнительная проверка первого символа.
Посмотрите на PrefixCharacter
собственность Range
объект, который соответствует этой клетке
Из справки:
Если
TransitionNavigKeys
свойствоFalse
Этот префиксный символ будет 'для текстовой метки или пустым. ЕслиTransitionNavigKeys
свойствоTrue
, этот символ будет "для выровненной по левому краю метки", для выровненной по правому краю метки, "^" для центрированной метки, "\" для повторяющейся метки или пустым.
TransitionNavigKeys
часть относится к совместимости с Lotus 1-2-3, так что, скорее всего, будет False
Ответ на основании статьи по адресу:
http://excel.tips.net/Pages/T003332_Searching_for_Leading_Apostrophes.html
(предупреждение: может появиться немного раздражающее всплывающее окно)
редактировать: на самом деле это, вероятно, не будет никакого смысла, потому что PrefixCharacter
только для чтения:(
edit2: я был прав в первый раз. PrefixCharacter
Заполняется, только если значение, добавленное в ячейку, начинается с ', поэтому просто прочитайте обратно PrefixCharacter
плюс Value
и объединить. Пока TransitionNavigKeys
является False
, то есть
Пытаться targetcell.Value
вместо. .Formula
формула, видимая в строке формул, в то время как .Value
является оцененным значением ячейки.
Итак, я предполагаю, что вы бы использовали .Formula
в исходном коде. Изменение, которое должно работать.
РЕДАКТИРОВАТЬ: Хорошо, это не сработало (смущенно).
Excel обрабатывает начальную одинарную кавычку особенно... так, что даже скрытые свойства ячейки / диапазона не имеют доступа. Единственный обходной путь, который я смог найти, по сути, такой же, как вы думали изначально. Вот оно:
If VarType(cell) = 8 And Not cell.HasFormula Then
GetFormulaI = "'" & cell.Formula
Else
GetFormulaI = cell.Formula
End If
Вы можете попробовать предварительно подвести одну кавычку к текстовым полям ( '''' + dbField) в вашем запросе, чтобы для полей со встроенными одинарными кавычками ваш запрос возвращал:
"''stuff in single quotes'"
который при помещении в ячейку Excel конвертируется в:
"'stuff in single quotes'"
за символы, которых не было в кавычках, вы получите:
"'stuff that wasn't in quotes"
который при помещении в ячейку Excel конвертируется в:
"stuff that wasn't in quotes"
Стоит выстрел.:-)