Как заставить Excel игнорировать Апостроф в начале ячейки
Я пишу инструмент, который синхронизирует базы данных с листов Excel. Каждый элемент таблицы в базе данных соответствует одной строке на листе. Я прочитал лист Excel в инструмент с помощью C# и интерфейса Excel interop com, а затем сравнил значения элементов (т. е. один из Столбцов на листе 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
, этот персонаж будет для left-justified label, " for a правая метка, ^ для a центрированная метка, \ для повторения этикетка или пустая.
на TransitionNavigKeys
часть относится к совместимости Lotus 1-2-3, поэтому она, скорее всего, будет False
ответ на основе статьи на сайте:
http://excel.tips.net/Pages/T003332_Searching_for_Leading_Apostrophes.html
(предупреждение: может появиться немного раздражающее всплывающее окно)
редактировать: на самом деле это, вероятно, не будет никакой пользы, потому что PrefixCharacter
доступно только для чтения :(
edit2: я был прав первый раз. PrefixCharacter
заполняется только в том случае, если значение, добавленное в ячейку, начинается с " so just read back PrefixCharacter
плюс Value
и сцепления. Пока TransitionNavigKeys
и False
, что составляет
попробовать targetcell.Value
вместо. .Formula
- это формула, видимая в строке формул, в то время как .Value
- вычисляемое значение ячейки.
Итак, я предполагаю, что вы бы использовать .Formula
в исходном коде, а также. Изменение этого должно сработать.
EDIT: хорошо, это не сработало (смущенно).
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"
стоит выстрел. :-)