Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.04.2012, 20:06   #1
Haik>
Новичок
Джуниор
 
Регистрация: 04.04.2012
Сообщений: 1
По умолчанию Проблема открытия MS Word из приложения

Всем доброго время суток ! Поделитесь идеями пожалуйста!
Есть задача проверать папку конвертировать набор документов с разными расширенями
в PDF в вот собственно код
Код:

 
 
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using Microsoft.Office.Interop.Word;
namespace ConsoleApplication7
{
    class Program
    {
        static void Main(string[] args)
        {
 
            Microsoft.Office.Interop.Word.Application word = new Microsoft.Office.Interop.Word.Application();
            object oMissing = System.Reflection.Missing.Value;
            word.Visible = false;
            word.ScreenUpdating = false;
 
 
            object aa = WdOpenFormat.wdOpenFormatAuto;
            string errorMessage = null;
 
 
            word.DisplayAlerts = WdAlertLevel.wdAlertsNone;
 
            //виборка расширения 
             
            var allExtentionGroupFiles = Directory.GetFiles(@"C:\path", "*.*").
                Where(s=>!s.Contains("~$") && (s.EndsWith(".docx") 
                || s.EndsWith(".doc")
                || s.EndsWith(".docm")
                || s.EndsWith(".dotx")
                || s.EndsWith(".dotm")
                || s.EndsWith(".dot")
                || s.EndsWith(".mht")
                || s.EndsWith(".mhtml")
                || s.EndsWith(".rtf")
                || s.EndsWith(".txt")
                || s.EndsWith(".xml")
                || s.EndsWith(".odt")
                || s.EndsWith(".wps"))).
                GroupBy(s=>s.Substring(s.LastIndexOf('.'))).OrderBy(s=>s.Key);
 
            foreach (var currentExtentionGroup in allExtentionGroupFiles)
            {
 
                Console.WriteLine("-->>{0}", currentExtentionGroup.Key);
                foreach (var currentDoc in currentExtentionGroup)
                {
                    
                    Object filename = (Object)currentDoc;
                    
 
 
                    try
                    {
                        //откриваю текущий документ
                        
                        Document document = word.Documents.Open(filename,ConfirmConversions:aa,OpenAndRepair:true,Revert:true);
                      
                        document.Activate();
 
 
                        object outputFileName = currentDoc.Replace(currentExtentionGroup.Key, ".pdf").Insert(10, "TEST");
                        object fileFormat = WdSaveFormat.wdFormatPDF;
 
 
                        document.SaveAs(ref outputFileName,
                        ref fileFormat, ref oMissing, ref oMissing,
                        ref oMissing, ref oMissing, ref oMissing, ref oMissing,
                        ref oMissing, ref oMissing, ref oMissing, ref oMissing,
                        ref oMissing, ref oMissing, ref oMissing, ref oMissing);
 
 
                        
                        document.Close();
 
                    }
                    catch (Exception e1)
                    {
                        errorMessage = e1.ToString();
 
                    }
                }
            }
 
word.Quit();
 
}
        
    }
}
код рабочий, проблема состоит в то что когда открываю doc,или лубое дозволенное
расширение все нормально, но допустим кто то поменял расширения для примера
DoSomething.exe на DoSomething.doc или в папке c:\path находитца испорченный документ
тогда Word виснет или откривает диалоговое окно в фоновом режиме корче виснет
на строке
61: Document document = word.Documents.Open(filename,Confir mConversions:aa,OpenAndRepair:true, Revert:true);
Haik> вне форума Ответить с цитированием
Старый 05.04.2012, 10:35   #2
Скарам
Дружите с Linq ;)
Форумчанин
 
Аватар для Скарам
 
Регистрация: 15.10.2008
Сообщений: 822
По умолчанию

Цитата:
допустим кто то поменял расширения для примера
DoSomething.exe на DoSomething.doc или в папке c:\path находитца испорченный документ
Это невозможно упредить, пользователь всегда может что-то испортить
Цитата:
на строке
61: Document document = word.Documents.Open(filename,Confir mConversions:aa,OpenAndRepair:true, Revert:true);
Предлагаю запускать конвертацию в отдельном таске и мониторить, если не выполняется ряд условий ( например,больше минуты не происходит переход к document.Activate() убивать поток и кидать Exception.
Не давай организму поблажки, каждый день тренируй его в шашки..
Скарам вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема открытия файла kvg_ua Помощь студентам 5 05.03.2011 13:08
проблема повторного открытия базы данных berkeley db ViY Помощь студентам 2 29.03.2010 19:52
[php] проблема открытия с браузеров IE, Хром... Рамик Помощь студентам 0 07.12.2009 13:05
Проблема открытия проекта Borland C++ Builder 6.0 Vikelf Помощь студентам 1 27.05.2009 09:30
Ошибка открытия файла Word 2007 Владим Microsoft Office Word 0 07.10.2008 14:22