Как заставить 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"

стоит выстрел. :-)