Авторизируйтесь,
чтобы продолжить
Некоторые функции доступны только зарегистрированным пользователям
Неправильный логин или пароль

Внимание! Теперь для входа на форум необходимо вводить единый пароль регистрации сервисов sibnet.ru!

Здравствуйте, гость ( Вход | Регистрация )



 
Ответить в эту темуОткрыть новую тему
> Работа с документами Word в C#
BloodSeeker
сообщение 16.6.2014, 22:06
Сообщение #1


Товарищ
Group Icon


Группа: Sibnet-club
Сообщений: 863
Регистрация: 22.6.2007
Из: Барнаул
Пользователь №: 485



Репутация:   49  


Доброго времени суток. Столкнулся с такой проблемой: нужно реализовать работу с документами Word в C#. По факту так происходит: наживаю на Button1 и через openfiledialog выбираю нужный мне документ и он прикрепляется к записи из БД. При нажатии на button2 автоматически открывается документ. Так вот, собственно проблема - на моей машине все работает замечательно. На машине заказчика при прикреплении документа программа вылетает. Причем ни эксепшена, ничего - просто "программ выполнила недопустимую операцию и будет закрыта" (как-то так).
Открытие документа работает нормально. Вот кусок кода, ответственный за прикрепление документа:
Код

if (dataGridView1.CurrentRow == null)
                MessageBox.Show("Выберите бойца!", "Ошибка", MessageBoxButtons.OK);
else
            {
                app = new Microsoft.Office.Interop.Word.Application();
                doc = null;

                string tmp = dataGridView1.CurrentRow.Cells[1].Value.ToString() + dataGridView1.CurrentRow.Cells[2].Value.ToString();

                OpenFileDialog op = new OpenFileDialog();
                object fileName;
                if (op.ShowDialog() == System.Windows.Forms.DialogResult.OK)
                {
                    fileName = op.FileName;
                    object falseValue = false;
                    object trueValue = true;
                    object missing = Type.Missing;

                    doc = app.Documents.Open(ref fileName, ref missing, ref trueValue,
                            ref missing, ref missing, ref missing, ref missing, ref missing,
                            ref missing, ref missing, ref missing, ref missing, ref missing,
                            ref missing, ref missing, ref missing);
                    DirectoryInfo dir = new DirectoryInfo(AppDomain.CurrentDomain.BaseDirectory + tmp + @"\");
                    dir.Create();
                    string save = AppDomain.CurrentDomain.BaseDirectory + tmp + @"\" + "резюме.doc";
                    doc.SaveAs2(save, 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,Type.Missing,Type.Missing);
                    doc.Close();
                    app.Quit();
                }
}

Кто-нибудь может предположить, в чем тут магия?
try...catch ничего не выдает. Программа просто терминируется без всяких ексепшенов
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
77z
сообщение 8.8.2014, 15:23
Сообщение #2


Молчун
Group Icon


Группа: Пользователи
Сообщений: 88
Регистрация: 16.11.2012
Пользователь №: 462 845



Репутация:   7  


Цитата(BloodSeeker @ 16.6.2014, 21:06) *

Доброго времени суток. Столкнулся с такой проблемой: нужно реализовать работу с документами Word в C#. По факту так происходит: наживаю на Button1 и через openfiledialog выбираю нужный мне документ и он прикрепляется к записи из БД. При нажатии на button2 автоматически открывается документ. Так вот, собственно проблема - на моей машине все работает замечательно. На машине заказчика при прикреплении документа программа вылетает. Причем ни эксепшена, ничего - просто "программ выполнила недопустимую операцию и будет закрыта" (как-то так).
Открытие документа работает нормально. Вот кусок кода, ответственный за прикрепление документа:
Код

if (dataGridView1.CurrentRow == null)
                MessageBox.Show("Выберите бойца!", "Ошибка", MessageBoxButtons.OK);
else
            {
                app = new Microsoft.Office.Interop.Word.Application();
                doc = null;

                string tmp = dataGridView1.CurrentRow.Cells[1].Value.ToString() + dataGridView1.CurrentRow.Cells[2].Value.ToString();

                OpenFileDialog op = new OpenFileDialog();
                object fileName;
                if (op.ShowDialog() == System.Windows.Forms.DialogResult.OK)
                {
                    fileName = op.FileName;
                    object falseValue = false;
                    object trueValue = true;
                    object missing = Type.Missing;

                    doc = app.Documents.Open(ref fileName, ref missing, ref trueValue,
                            ref missing, ref missing, ref missing, ref missing, ref missing,
                            ref missing, ref missing, ref missing, ref missing, ref missing,
                            ref missing, ref missing, ref missing);
                    DirectoryInfo dir = new DirectoryInfo(AppDomain.CurrentDomain.BaseDirectory + tmp + @"\");
                    dir.Create();
                    string save = AppDomain.CurrentDomain.BaseDirectory + tmp + @"\" + "резюме.doc";
                    doc.SaveAs2(save, 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,Type.Missing,Type.Missing);
                    doc.Close();
                    app.Quit();
                }
}

Кто-нибудь может предположить, в чем тут магия?
try...catch ничего не выдает. Программа просто терминируется без всяких ексепшенов

Возможно, на машине заказчика не установлены компоненты Microsoft .NET Framework.
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
MotoArhangel
сообщение 25.8.2014, 18:12
Сообщение #3


- 夜狼 -
Group Icon


Группа: GNU/Linux
Сообщений: 1 218
Регистрация: 24.9.2009
Из: Алтай =)
Пользователь №: 141 745



А отловить сообщение и в случае отсутствия офиса сообщить это? Microsoft.Office.Interop.Word.Application();
Пользователь в офлайнеКарточка пользователяОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

Ответить в эту темуОткрыть новую тему
1 чел. просматривают этот форум (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

Текстовая версия Сейчас: 21.7.2019, 0:56
Редакция: (383) 347-86-84

Техподдержка: (383) 347-22-44
help.sibnet.ru
Размещение рекламы:
тел: (383) 347-06-78, 347-10-50

Правила использования материалов