Почему не сохраняется Excel-файл c# ?

liverpool
Дата: 21.04.2014 16:37:02
Добрый день!
Задача такая. На компьютере постоянно открыт эксель-файл и в нем периодически меняются значения (их меняет другая программа, через экспорт в эксель).
Моя программка должна раз в час считывать эти значения из этого открытого эксель-файла. Перед тем, как считать новое значение из эксель-файла - его надо сохранить.
Вот простой код:
            Excel.Application oXL;
	        Excel._Workbook oWB;
	        Excel._Worksheet oSheet;

            oXL = new Excel.Application();
            oWB = oXL.Workbooks.Open(Application.StartupPath + @"\ExportFromQuik.xls", 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);
            oSheet = (Excel.Worksheet)oWB.Sheets[1];
            oXL.DisplayAlerts = false;
            oWB.Saved = true;
            oWB.Save();

Но после этого кода файл не сохраняется. И соответственно далее из него считываются старые значения, которые были при его открытии.
Как быть????
Shocker.Pro
Дата: 21.04.2014 17:17:20
oWB.Saved = true;

???

Зачем?
liverpool
Дата: 21.04.2014 17:23:42
Shocker.Pro,
да уже как только не пробывал. и с этим и без этого
Shocker.Pro
Дата: 21.04.2014 17:29:38
Приведенный код ничего не делает, он только открывает файл с диска и сохраняет его.

Так откуда все-таки твоя программа должна считывать данные? Из файла на диске или "из этого открытого эксель-файла"?

Если она должна считывать из открытого файла, то зачем она открывает его в другом экземпляре экселя?
liverpool
Дата: 21.04.2014 17:57:52
Shocker.Pro,
Ситуация следующая.
На диске С есть эксель файл. К примеру , в ячейке [1,1] значение 5.
Файл открываем.
Мой код считывает эту ячейку - получаю значение 5. Всё правильно.
Далее сторонняя программа меняет значение ячейки [1,1] на 10. Файл всё также открыт и никто его не сохраняет.
Моя программа должна получить уже значение 10. А у меня получает всё также старое значение 5.
Просто думаю, что перед считыванием значения, моя программа должна сохранить этот файл.
Или как решить данную проблему?
liverpool
Дата: 21.04.2014 18:00:06
Shocker.Pro,
Да, видимо надо как-то считывать из открытого файла.
но как это описать в C# ? без создания нового excelApplication ?
Shocker.Pro
Дата: 21.04.2014 18:05:28
liverpool
Файл открываем.
кем открываем? Твоей программой или вручную пользователем?

liverpool
А у меня получает всё также старое значение 5.
Потому что ты пытаешься прочитать значение из файла на диске, а не из открытого файла. То, что ты его открываешь, сохраняешь и т.п. никакого отношение к уже открытому экземпляру не имеет.

liverpool
но как это описать в C# ? без создания нового excelApplication ?
Опять же, кто изначально открывает файл? Если твоя программа, то почему бы просто не удерживать соединение с этим файлом?
liverpool
Дата: 21.04.2014 18:09:49
Shocker.Pro,
Нет, файл открывает сторонняя программа при начале экспорта.
Моя программа должна подключиться к открытому файлу и периодически получать оттуда значения ячейки, которое изменяется сторонней программой.
Из сторонней программы сделан экспорт в эксель, а я своей хочу получить оттуда значения.
Изопропил
Дата: 21.04.2014 18:14:11
liverpool
но как это описать в C# ? без создания нового excelApplication ?

Marshal.GetActiveObject
liverpool
Дата: 21.04.2014 18:37:08
Изопропил,
получаю Excel процесс:
Excel.Application oXL;
oXL = (Microsoft.Office.Interop.Excel.Application)Marshal.GetActiveObject("Excel.Application");

а как перейти из этого процесса далее к Workbook и Worksheet ?