Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# .NET
Войти
Регистрация
Восстановить пароль
 
satkakm
0 / 0 / 0
Регистрация: 14.09.2016
Сообщений: 4
#1

Пустой cellRange.Value при парсинге Excel - C#/.NET 3.x

23.10.2017, 20:12. Просмотров 220. Ответов 8

Здравствуйте!
Пишу парсер Excel. Написал шаблоны уже для множества файлов, но очередном наткнулся на проблему. Ячейки, которые содержат текст при чтении через Microsoft.Office.Interop.Excel получаются пустыми. Чтение выполняется так
C#
1
2
3
cellRange = (Excel.Range)excelworksheet.Cells[jj, ColDiam];
if (cellRange.Value != null)
    temp = cellRange.Value.ToString().Trim();
В итоге у половины ячеек с текстом получается cellRange.Value == null. Ну и на всякий случай проверил, что cellRange.Value2 тоже null.
В более чем 50 таких шаблонов все было хорошо. Кто-нибудь сталкивался с такой проблемой? Почему так может быть?
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.10.2017, 20:12
Я подобрал для вас темы с готовыми решениями и ответами на вопрос .NET 3.x Пустой cellRange.Value при парсинге Excel (C#):

Ошибка при парсинге IP
Какая-то странная ошибка возникает при парсинге строки Ip. Сама строка берётся...

Исключение при парсинге JArray
Здравствуйте! Имеется JSON строка следующего типа: { "employees": } ...

Out of memory при парсинге с webBrowser
Друзья, посоветуйте почему выдает out of memory??? Есть множество ссылок на...

Слетела кодировка при парсинге html-страницы
Здравствуйте! Начал писать программу которая парсит сайт. В заголовке...

Избавление от &_shy_; при парсинге страницы
Доброго времени суток. Пытаюсь спарсить страницу вот таким вот кодом WebClient...

При парсинге с помощью XDocument данные не выводятся
Добрый день, Есть хмл файл примерно с такой структурой <Шапка ...

8
Pavel55
810 / 271 / 106
Регистрация: 27.10.2006
Сообщений: 630
24.10.2017, 10:46 #2
А если так?

C#
1
cellRange = (Excel.Range)excelworksheet.Cells[jj, ColDiam].Text; //добавлен .Text в конце
или так

C#
1
cellRange = (Excel.Range)excelworksheet.Cells[jj, ColDiam].Value; //добавлен .Value в конце
а какой у вас тип переменной cellRange ?

Может у вас эти ячейки объедены? Тогда нужно брать значения из верхней левой ячейки.

А кусок файла можно посмотреть?

P.S. А может у вас в переменной jj - значения 100, а вы смотрите на 10 строку, или же значение ColDiam - 50, а вы смотрите на 3 столбец... тут файл нужно смотреть
0
Skorp24
39 / 39 / 23
Регистрация: 15.06.2009
Сообщений: 343
24.10.2017, 10:53 #3
Покажите файл Excel.
0
satkakm
0 / 0 / 0
Регистрация: 14.09.2016
Сообщений: 4
24.10.2017, 17:13  [ТС] #4
Pavel55, значения переменных при пошаговой отладке отследил. Там все верно. Если jj равно 100 то и проверяю в строке 100 в Excel. Большое количество файлов уже парсятся по похожим шаблонам.
Тип переменной cellRange - Excel.Range.
Дополнения к строке не получится прописать, т.к. там просто нет таких свойств.
Пустой cellRange.Value при парсинге Excel
А после приведения к типу Range и присвоения переменной эти свойства, естественно, появляются, но их значения не возможно получить, т.к. cellRange == null, хотя значения в файле в этой ячейке есть. Может есть еще какой-либо способ получить значение ячейки?
0
Skorp24
39 / 39 / 23
Регистрация: 15.06.2009
Сообщений: 343
24.10.2017, 17:27 #5
Цитата Сообщение от satkakm Посмотреть сообщение
Может есть еще какой-либо способ получить значение ячейки?
Попробуйте так:

C#
1
temp = excelworksheet.Range("A1").Value;
0
satkakm
0 / 0 / 0
Регистрация: 14.09.2016
Сообщений: 4
24.10.2017, 17:54  [ТС] #6
Skorp24, я в замешательстве. Так как вы говорите сделать, оно работает. Правда немного нужно подкорректировать.
C#
1
temp = excelworksheet.Range["F2387"].Value.ToString();
А вот если jj = 2387 и ColDiam = 6, то cellRange.Value в этой ячейке равен null. Можно, конечно городить словарь с буквами и их индексами и добавлять к букве по индексу номер строки, но это будет очень не красиво и увеличит время обработки файла. Что-нибудь можно еще посмотреть/проверить?
0
Skorp24
39 / 39 / 23
Регистрация: 15.06.2009
Сообщений: 343
25.10.2017, 09:48 #7
Лучший ответ Сообщение было отмечено satkakm как решение

Решение

satkakm, вот и моя темка пригодилась.
Excel: преобразование номера столбцов в буквенные символы и наоборот

Добавлено через 16 минут
У меня кстати тоже были в прошлом какие-то проблемы с Cells, поэтому я от него отказался в пользу Range. Даже при том, что нужно делать дополнительную работу по преобразованию индексов в буквы. Но скорость, с которой работает преобразование, меня устраивает.
1
Pavel55
810 / 271 / 106
Регистрация: 27.10.2006
Сообщений: 630
25.10.2017, 13:24 #8
Цитата Сообщение от satkakm Посмотреть сообщение
А вот если jj = 2387 и ColDiam = 6, то cellRange.Value в этой ячейке равен null.
Дайте посмотреть файл с этой ячейкой, а то странно получается Range["F2387"].Value.ToString(); а jj = 2387 и ColDiam = 6 не срабатывает.

Не видя вашего файла мы долго гадать будем
0
satkakm
0 / 0 / 0
Регистрация: 14.09.2016
Сообщений: 4
25.10.2017, 13:44  [ТС] #9
Pavel55, файл показать не могу, т.к. проект коммерческий и все остальное вытекающее из этого.
В конкретно этом шаблоне начал делать по предложенному Skorp24 способу. В следующих продолжу по старому.

Skorp24, это довольно элегантные методы. Спасибо вам за помощь)
0
25.10.2017, 13:44
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.10.2017, 13:44
Привет! Вот еще темы с решениями:

Выполнение условия в парсинге
офф топ решил сам

При поиске пустой ячейки Excel и последующей записи в неё переменной, выскакивает ошибка
Здравствуйте уважаемые форумчане. В процессе написания программы столкнулся с...

Блокируют при парсинге
Привет. Пытаюсь парсить один сайт. После выкачки пары страниц происходит...

Кодировка при парсинге
не пойму что не так с кодировкой и как ее настроить правильно, а именно вот...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru