С Новым годом! Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/34: Рейтинг темы: голосов - 34, средняя оценка - 4.71
0 / 0 / 0
Регистрация: 27.04.2016
Сообщений: 4
1

Использование Interop Excel

27.04.2016, 15:23. Показов 6582. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день!

Есть приложение, которое должно вносить определенные изменения в Excel файл.

Ниже часть кода

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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using Excel = Microsoft.Office.Interop.Excel;
 
namespace WindowsFormsApplication3
{
    public class RunApp
    {
        public static void Run()
        {
            string PathUnloadTemplate = Application.StartupPath + "\\template.xls";
            object missingValue = Type.Missing;
            LocalLog.AddLog("start");
 
            try
            {
                Excel.Application ExcelApp = new Excel.Application();
 
                ExcelApp.DisplayAlerts = false;
                //ExcelApp.DefaultSaveFormat = Excel.XlFileFormat.xlExcel7;
 
            
                try
                {
                    ExcelApp.Workbooks.Open(PathUnloadTemplate, missingValue, missingValue, missingValue, missingValue, missingValue, missingValue, missingValue, missingValue, missingValue, missingValue, missingValue, missingValue, missingValue, true);
                    LocalLog.AddLog("ExcelApp.Workbooks.Open SUCCESS");
                }
                catch (Exception exc)
                {
                    LocalLog.AddLog("ExcelApp.Workbooks.Open ERRORRRRRRRRRRRRRRRRRRRRRRRRRRR");
                    LocalLog.AddLog(exc.ToString());
                    return ;
                }
 
                ExcelApp.ActiveWorkbook.SaveAs(PathUnloadTemplate, missingValue, missingValue, missingValue, missingValue, missingValue, Excel.XlSaveAsAccessMode.xlNoChange, missingValue, missingValue, missingValue, missingValue, missingValue);
                LocalLog.AddLog("end");
 
            }
            catch (Exception exc)
            {
                LocalLog.AddLog(exc.ToString());
                return;
            }
        }
    }
}
Класс LocalLog пишет лог в текстовый файл. Приложение работает. Все ок. Проблемы начинаются при попытке запуска приложения из Планировщика задач (кстати при запуске из ms sql по команде xp_cmdshell аналогичная проблема).

При попытке выполнить строку

C#
1
ExcelApp.Workbooks.Open...
программа падает в catch и выводит следующее сообщение:

27.04.2016 15:00:00 - System.Runtime.InteropServices.COMException (0x800A03EC): Приложению Microsoft Excel не удается получить доступ к файлу "D:\2\template.xls". Это может быть вызвано одной из следующих причин.

• Указан несуществующий файл или путь.
• Файл используется другой программой.
• Имя книги, которую вы пытаетесь сохранить, совпадает с именем другой книги, открытой в данный момент.
в Microsoft.Office.Interop.Excel.Workbooks.Open(String Filename, Object UpdateLinks, Object ReadOnly, Object Format, Object Password, Object WriteResPassword, Object IgnoreReadOnlyRecommended, Object Origin, Object Delimiter, Object Editable, Object Notify, Object Converter, Object AddToMru, Object Local, Object CorruptLoad)
в WindowsFormsApplication3.RunApp.Run()

Подскажите пож-та в чем может быть дело?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.04.2016, 15:23
Ответы с готовыми решениями:

Работа с документами Excel без Microsoft.Office.Interop.Excel
всем добрый день все дело в том что для своих программ я использую БД Excel но! однако не все...

Microsoft.Office.Interop.Excel
Доброго времени суток! Делаю гистограмму, есть код: var XL1 = new Application(); ...

Работа с word и excel (Interop)
Добрый вечер всем. Появился у меня вопрос по моему проекту. Написал я небольшую программку. Все...

Теория: интерфейсы (+Excel interop)
С интерфейсами знаком очень поверхностно, и хотелось бы на примере excel больше понять Почему...

7
910 / 795 / 329
Регистрация: 08.02.2014
Сообщений: 2,391
27.04.2016, 15:53 2
тебе же все причины описало, проверяй каждую. Если не подходит описывай более детально всё, где находится файл, открыт ли эксель и т.д.

по тому что видно:
1 что бросается в глаза это отсутствие закрытия приложения эксель как при ошибке так и при удачной работе.
0
0 / 0 / 0
Регистрация: 27.04.2016
Сообщений: 4
27.04.2016, 15:58  [ТС] 3
SeIZVeIZ, повторюсь, при запуске приложения "ручками" все работает. И файл существует и путь к нему, и ничем он не занят, и никакие другие файлы Excel не открыты.

Вот тут http://www.made4dotnet.com/Def... 141&aid=15 описано, что проблема может быть в CurrentCulture. Но тоже не помогло.

Добавлено через 47 секунд
В шедулере задача добавлялась от имени Администратора, учетная запись была выбрана текущая, под которой выполнение происходит без ошибок.
0
910 / 795 / 329
Регистрация: 08.02.2014
Сообщений: 2,391
27.04.2016, 16:09 4
Такая ошибка очень часто возникает из-за этого:
Цитата Сообщение от semI-PACK Посмотреть сообщение
• Файл используется другой программой.
• Имя книги, которую вы пытаетесь сохранить, совпадает с именем другой книги, открытой в данный момент.
чтобы эти варианты исключить нужно (на всякий случай) при 1 же загрузке винды запустить из планировщика и посмотреть что будет. (т.е не запускать её "ручками")
как у Вас проходит открытие файла? эксель вылезает наружу или скрыт?
0
0 / 0 / 0
Регистрация: 27.04.2016
Сообщений: 4
27.04.2016, 16:31  [ТС] 5
скрыт
0
910 / 795 / 329
Регистрация: 08.02.2014
Сообщений: 2,391
27.04.2016, 16:42 6
тогда как минимум у Вас точно не хватает закрытия книги и самого экселя в приложении!

Что на счёт "чистого" запуска из планировщика?
0
0 / 0 / 0
Регистрация: 27.04.2016
Сообщений: 4
27.04.2016, 17:09  [ТС] 7
Проблема решена.

Экселю, для каких-то своих непонятных нужд, крайне необходимы оказались следующие папки

C:\Windows\System32\config\systemprofile\Desktop
C:\Windows\SysWOW64\config\systemprofile\Desktop
0
910 / 795 / 329
Регистрация: 08.02.2014
Сообщений: 2,391
27.04.2016, 17:26 8
Эти папки (а точнее 1 из в зависимости от разрядности системы) экселю нужны когда он работает на сервере, если у Вас так то да решение верное, хотя об этом (что на сервере запускается) упоминания небыло
0
27.04.2016, 17:26
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.04.2016, 17:26
Помогаю со студенческими работами здесь

Excel Interop 15, получение открытого окна
При работе с интероп все обычно начинается с Excel.Application app = new Excel.Application(); ,...

Обнаружен недостижимый код Interop.Excel
Здравствуйте, Функция ниже определяет, что находится в ячейке А1: цифра или буква. Процесс в...

Excel Interop - книги, статьи, справочники
Чувствую, что ближайшие несколько месяцев придется работать с excel'ем программно, как бы сильно я...

Как подключить microsoft.office.interop.excel
Добрый день. У меня такой вопрос: Во время написания курсовой работы по программированию,...


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

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