2017-02-10 6 views
0

Я использую эту процедуру C#, которая добавит гиперссылки в столбец G книги. Он работает в 99% случаев, но если значение в столбце A содержит ', то синтаксис не добавляет действительной гиперссылки. Я думал, что приходилось специальные символы в моей строке кода, который читаетДобавление гиперссылок через код в Excel

if (cellVal == "*,*" 
|| cellVal == "*'*" 
|| cellVal == "*&*" 
|| cellVal == "*-*" 
|| cellVal == "*.*") 

Однако, когда пошагового код он ВСЕГДА идет к else блока, и я не знаю, почему. Например, приведенные ниже значения явно имеют ' в них, но опять-таки код просто поражает else блок

Гараж Джо
Джека Burger Shack
Ларри Giant встряхивания
Боб варки

Что мне нужно изменить в этом синтаксисе, чтобы гиперссылка была создана надлежащим образом?

public static void AddHyperlinksToExcel() 
{ 
    long lr, i; 
    string cellVal; 
    WS = xlApp.ActiveWorkbook.ActiveSheet; 
    lr = WS.Cells[WS.Rows.Count, 2].End(Excel.XlDirection.xlUp).Row; 
     for (i = 2; i <= lr; i++) 
     { 
      Object Anchor = WS.Cells[i, 7]; 
      Object TextToDisplay = Convert.ToString(WS.Cells[i, 9]); 
      cellVal = WS.Cells[i, 1].Value; 
      rangeToHoldHyperlink = WS.Range["G" + i]; 
      if (cellVal == "*,*" || cellVal == "*'*" || cellVal == "*&*" || cellVal == "*-*" || cellVal == "*.*") 
      { 
       xlApp.ActiveSheet.Hyperlinks.Add(Anchor, "", "'" + cellVal + "'!A1", "", TextToDisplay); 
      } 
      else 
      { 
       xlApp.ActiveSheet.Hyperlinks.Add(Anchor, "", "'" + cellVal + "'!A1", "", TextToDisplay); 
      } 
     } 
    } 
+0

Что такое тип данных cellVal шагов? Я предполагаю, что это не чистая строка .net. Кажется, вы выполняете сопоставление с шаблоном, что не является функцией строки .net, поэтому я предполагаю, что это какой-то тип данных Excel? – PhillipH

+0

cellVal - текстовая строка, это значение столбца A рабочего листа Excel. Это столбец A рабочего листа и содержит текстовые значения с примерами, перечисленными в моем сообщении. если я щелкнул правой кнопкой мыши по ячейке и перешел в ячейку форматирования под вкладкой «Число», она указана как «Общая» – BellHopByDayAmetuerCoderByNigh

+0

Извините - на самом деле я не ответил на мой запрос; cellVal не может быть типом данных System.String, как определено в .net, поскольку он не поддерживает подстановочные соответствия с использованием «==», поэтому он должен быть указанным типом данных Excel. Поместите контрольную точку в код и сообщите мне, какая переменная cellValue типа данных. Как только мы узнаем, что мы можем найти документы, на которые «==» действительны для соответствия.Я очень подозреваю, что для некоторых экранированных символов требуется специальная обработка. – PhillipH

ответ

0

Если cellVal является System.String вашего кода не будет работать так, как вы expect..net не поддерживают соответствие шаблона, используя «==». Вы должны заменить cellValue == '*&*' и т.д. с cellValue.Contains("&")

+0

Должен ли я все еще использовать '*' при использовании 'Contains (" '")'? Причина, о которой я прошу, - это просто изменить мой код на 'if (cellVal.Contains (" & ") || cellVal.Contains (", ") || cellVal.Contains (" '") || cellVal.Contains (" - ") || cellVal.Contains (".")) 'и я получил тот же результат, что и раньше. – BellHopByDayAmetuerCoderByNigh

+0

Нет - как я уже сказал, строки .net не используют подстановочные знаки для сопоставления. Поместите точку останова в свой оператор «If», а затем снова используйте ближайшее окно. Введите «cellValue» и нажмите «возврат». Мы ожидаем увидеть значение ячейки. Если это не то, что вы ожидаете, тогда есть ваша проблема. Если это то, что вы ожидаете, то есть «BellHop & ByDay», тогда, если вы введете «cellValue.Contains (« & »), он вернет True. – PhillipH

+0

Так оно и было! Не уверен, что происходит, я закрыл свой проект, снова открыл, очистил решение, потом его построил, начал, и BAM! Ran точно так же, как вы описали выше. Спасибо, что помогли! – BellHopByDayAmetuerCoderByNigh

1

Хотя ответ от @PhillipH будет решать все случаи Или исключением apastrophe. Причина заключается в том, что Excel преобразует apastrophe в двойные кавычки. Например, в Excel 2016 я создал рабочий лист под названием Joe's Garage и начал запись макроса. Шаги я последовал был

1) Нажмите Вставить из ленты
2) Выберите гиперссылок из ленты
3) На левой части параметров, отображающих нажмите «Место в этом документе»
4) Выберите имя листа вы хотели бы связать с
Примечания - Если вы посмотрите на ваше имя рабочего листа вы пытаетесь связать это было изменено на 'Joe''s Garage'
5) Нажмите кнопку ОК

Теперь у вас есть полностью функционирующая гиперссылка со значениями, которые имеют апостроф в них.

Это не синтаксис C#, но это то, что Excel VBA представлены от записи макросов, которая иллюстрирует то же самое, как выше

Range("C2").Select 
ActiveSheet.Hyperlinks.Add Anchor:=Selection, Address:="", SubAddress:= _ 
    "'Joe''s Garage'!A1", TextToDisplay:="Link To Joe's Garage" 

 Смежные вопросы

  • Нет связанных вопросов^_^