- Моя цель: извлечь одно значение из Excel
Range
и убедиться, что значение этих ячеек в этом диапазоне одинаковое;
- Когда значение ячейки не совпадает с другим, мне нужно вернуть ноль.
Вот кусок кода:
internal object GetValueFromCells(string start, string end, Formats format) {
// Verifying for empty or null parameters here and throwing accordingly...
try {
Range cells = Excel.get_Range(start, end) as Range;
object value = null;
bool sameValue = false;
foreach(Range cell in cells) {
// This condition block shall execute only once, since 'value' shall not be null afterwards.
if (value == null || value == DBNull.Value)
if (Formats.Formated == format) {
value = cell.Text;
// The following results to be false !?...
sameValue = value == cell.Text; // Shall this not be true?
} else {
value = cell.Value2;
// The following results to be false !?...
sameValue = value == cell.Value2; // Shall this not be true?
}
// This results being always false!?...
// Shall this not be true, I wonder?
sameValue = Formats.Formated == format ? value == cell.Text : value == cell.Value2;
if(!sameValue)
return null;
}
return value;
} catch (Exception ex) {
// Exception handling...
}
}
Читая этот код, я смиренно ожидал, что значение будет возвращено, когда все ячейки в диапазоне имеют одинаковое значение (например, 334).
Однако этот метод всегда возвращает ноль (ничего в Visual Basic)!
Кто-нибудь может объяснить, что мне здесь не хватает, пока это:
value == cell.Value2
всегда возвращает false ?
Возможно, мой алгоритм не совсем верен?
РЕДАКТИРОВАТЬ # 1
Это решило проблему:
sameValue = Formats.Formatted == format ? cell.Text.Equals(value) : cell.Value2.Equals(value);
Я принял ответ @Jerod Houghtelling, так как в его ответе предлагаются методы ToString () и Equals () для решения проблемы.
В дополнение к этому, мне не нравится вызывать метод ToString (), так как значение может быть числом, а сравнение чисел под строкой мне кажется странным. Поэтому я предпочитаю метод Equals (), который я использовал в своем решении.
Я хотел бы поблагодарить @Sir Gallahad и @Jerod Houghtelling за их хорошие ответы. Это был первый раз, когда мне пришлось столкнуться с такой ситуацией, и они оба помогли мне лучше понять, что происходит под капотом, плюс другие, которые тоже внесли свой вклад через комментарии.
И спасибо тем, кто проголосовал за мой вопрос. Это служит для демонстрации того, что я не так глупо спрашиваю! = P Хехехе ...