Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.61/140: Рейтинг темы: голосов - 140, средняя оценка - 4.61
3 / 3 / 1
Регистрация: 23.09.2014
Сообщений: 53
1

Исключение hresult 0x800a03ec в Excel

21.09.2015, 23:16. Показов 25323. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте
Короче вот код
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
public static List<List<double>> Get_value_massive(string file_name, string sheet_name, int start_row_index, string start_col_index, int end_row_index, string end_col_index)
        {
            List<List<double>> massive = new List<List<double>>();
 
            Excel.Application ExcelApp = new Microsoft.Office.Interop.Excel.Application();
            Excel.Workbook ExcelWorkBook;
            Excel.Worksheet ExcelWorkSheet;
            ExcelWorkBook = ExcelApp.Workbooks.Open(file_name,
                            Type.Missing, Type.Missing, Type.Missing, Type.Missing,
                            Type.Missing, Type.Missing, Type.Missing, Type.Missing,
                            Type.Missing, Type.Missing, Type.Missing, Type.Missing,
                            Type.Missing, Type.Missing);
            if (sheet_name == null)
                ExcelWorkSheet = (Excel.Worksheet)ExcelWorkBook.Worksheets.get_Item(1);
            else 
                ExcelWorkSheet = (Excel.Worksheet)ExcelWorkBook.Worksheets.get_Item(sheet_name);
 
            object start = start_col_index + start_row_index.ToString();
            object end = end_col_index + end_row_index.ToString();
            Excel.Range ExcelCells = ExcelWorkSheet.get_Range(start, end);
            //Excel.Range ExcelCells = ExcelWorkSheet.get_Range("C9", "D29");
            for (int i = 1; i <= ExcelCells.Columns.Count; i++) //столбцы
            {
                List<double> mass = new List<double>();
                for (int j = 1; j <= end_row_index - start_row_index + 1; j++) //строки
                {
                    if (ExcelCells.Value2[j, i] != null)                        
                            mass.Add((double)ExcelCells.Value2[j, i]);
                }
                massive.Add(mass);
            }
            
            ExcelWorkBook.Close();
 
            return massive;
        }
Исключение вылетает в строке
C#
1
Excel.Range ExcelCells = ExcelWorkSheet.get_Range(start, end);
Ниже закомментированая строка, где границы заданы явно с теми же значениями, с которыми исключение возникает, и эта строка исключения не выдаёт!
Ранее границы читаемых ячеек задавались напрямую без переменных start и end, которые пробовались так же и в формате string, но исключение продолжало вылетать.
Так же хочу сказать, что с такими же границами другие файлы отрабатывают нормально, созданы они в той же версии, что и тот файл, который выпендривается.

Кто-нибудь помогите пожалуйста, я не понимаю что тут за магия творится...

Если что параметр функции sheet имеет значение null.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.09.2015, 23:16
Ответы с готовыми решениями:

Исключение из HRESULT: 0x800A03EC при открытии записи в Excel файл
Пишу программу, которая парсит данные из одного файла и переносит в другой ...

Исключение HRESULT: 0x800A03EC при открытии xls файла
Есть функция, которая открывает файл эксель считывает из него названия листов и возвращает его в...

Excel "Исключение из HRESULT: 0x800AC472"
Добрый день. Выгружаю в Excel всякие разные данные. Данные выгружаются, все работает, но стоит во...

Была сделана попытка загрузить программу, имеющую неверный формат. (Исключение из HRESULT: 0x8007000B)
Была сделана попытка загрузить программу, имеющую неверный формат. (Исключение из HRESULT:...

2
1 / 1 / 1
Регистрация: 29.05.2015
Сообщений: 13
22.09.2015, 16:13 2
Как мне кажется, вся проблема в типе.
Тут start и end имеют тип object
C#
1
2
object start = start_col_index + start_row_index.ToString();
object end = end_col_index + end_row_index.ToString();
А в закомментированной части у тебя явные строки передаются, там все ОК
C#
1
//Excel.Range ExcelCells = ExcelWorkSheet.get_Range("C9", "D29");
Как вариант, попробуй так:
C#
1
Excel.Range ExcelCells = ExcelWorkSheet.get_Range(start.ToString(), end.ToString());
Либо при объявлении поменяй тип на string:
C#
1
2
string start = start_col_index.ToString() + start_row_index.ToString();
string end = end_col_index.ToString() + end_row_index.ToString();
В конце концов, поставь точку останова в строке, где вылетает исключение, и посмотри что из себя представляют start и end. Возможно там белиберда.
0
3 / 3 / 1
Регистрация: 23.09.2014
Сообщений: 53
22.09.2015, 17:05  [ТС] 3
Так я эти переменные сначала типом string объявлял. И при отладке смотрел - переменные имеют такое же самое значение, однако, исключение всё равно возникает.
0
22.09.2015, 17:05
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.09.2015, 17:05
Помогаю со студенческими работами здесь

Работа с Excel C#. Кто может объяснить почему выскакивает исключение?
Не хочется открывать книгу Excel. Написано все вроде правильно. Материал брал отсюда. Исключение...

Работа с Excel: выскакивает исключение System.Runtime.InteropServices.COMException (0x800A03EC)
Доброго дня. Суть вопроса такова, выскакивает исключение...

При чтении данных из экселя возникает ошибка HRESULT: 0x800A03EC
Код такой: using System; using System.Collections.Generic; using System.ComponentModel; using...

Исключение COMException (0x800A03EC) при вызове Workbooks.Open
День добрый, котаны такой трабл, матюкается на строку var objWorkbook =...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru