Модераторы: Partizan, gambit

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Excel.Workbook.SaveAs() генерирует исключение 
:(
    Опции темы
Idsa
Дата 9.8.2007, 18:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: 14
Всего: 62



Написал я программу для внутренних нужд одной конторы, которая преобразует определенным образом Excel-файлы. Так вот у меня на компе программа работает, а у клиента на ноуте в конце работы программы (на методе SaveAs) вылетает исключение. С правами на запись все в порядке. Погуглил... подобная проблема встречалась не раз... и вроде бы ее причиной является использование разных библиотек Excel. Так я поставил один и тот же Office и себе, и клиенту - не помогает.
Подскажите, пожалуйста, в чем может быть проблема?


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
moric83
Дата 10.8.2007, 09:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 50
Регистрация: 9.7.2007

Репутация: нет
Всего: 1



У меня была таже проблема - глючила именно этот метод, пришлось поменять версию офиса. Проблемы возникают при Офисе 2000 (если я не ошибаюсь) - карочи поменял на 2003.
PM MAIL   Вверх
Idsa
Дата 10.8.2007, 11:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: 14
Всего: 62



moric83, а у меня как раз-таки офис 2003 smile Менять на 2007?! smile


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
moric83
Дата 10.8.2007, 11:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 50
Регистрация: 9.7.2007

Репутация: нет
Всего: 1



Вот рабочии код: 
Код

book.SaveAs(@saveAs,Excel.XlFileFormat.xlExcel9795,  System.Reflection.Missing.Value, System.Reflection.Missing.Value , false, false, Excel.XlSaveAsAccessMode.xlShared  , Excel.XlSaveConflictResolution.xlLocalSessionChanges, false, System.Reflection.Missing.Value, System.Reflection.Missing.Value, false);


Может парамеры в функций попробовать поменять?

А что за исключение вылетает ?


PM MAIL   Вверх
Idsa
Дата 10.8.2007, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: 14
Всего: 62



Оказывается, у меня на компе код работал только с библиотекой от 2007-го офиса. Как только я его снес и поставил 2003, и у меня метод SaveAs стал выбрасывать исключение. У меня в принципе не получается сохранить ни одну книгу.

Цитата(moric83 @  10.8.2007,  11:46 Найти цитируемый пост)
А что за исключение вылетает ?

Исключение вполне стандартное: Exception from HRESULT: 0x800A03EC.


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
Idsa
Дата 10.8.2007, 16:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: 14
Всего: 62



Изменил метод SaveAs на Save:
Код

priceWorkbook.SaveAs(this.priceFileName, XlFileFormat.xlHtml, Type.Missing, Type.Missing,
  Type.Missing, Type.Missing, XlSaveAsAccessMode.xlShared, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);

на

 priceWorkbook.Save();

Работает. Однако меня не совсем устраивает функциональность метода Save. Все-таки хотелось бы использовать метод SaveAs.
Гугль не выдает каких-нибудь серьезных багов в функции SaveAs в 11-м офисе... значит я что-то делаю не так... Хотелось бы узнать, что именно. Надеюсь на вашу помощь.


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
moric83
Дата 10.8.2007, 18:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 50
Регистрация: 9.7.2007

Репутация: нет
Всего: 1



Я думаю что проблема в параметрах функций SaveAs, ты что-то не то ставиш. посмотри на MSDN некоторые параметры by default имеют значение false а ты ставиш Type.Missing.

Проблема в COM обьекте - что-то ему не нравится  smile 

Кстати может тебе поменять Type.Missing  на System.Reflection.Missing.Value .

А и ешё может и за настроик системы типа - Regional Options - COM обьект глючит.  smile   smile 


PM MAIL   Вверх
Retro
Дата 10.8.2007, 18:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Диалектик
***


Профиль
Группа: Участник Клуба
Сообщений: 1934
Регистрация: 28.6.2005
Где: Киев

Репутация: 9
Всего: 117



Вот у меня рабочий пример. Может поможет.
Код


workBook.SaveAs(
                                     outPath,
                                     XlFileFormat.xlCSV,
                                     "",
                                     "",
                                     Missing.Value,
                                     Missing.Value,
                                     Excel.XlSaveAsAccessMode.xlNoChange,
                                     Missing.Value,
                                     true, // Editable
                                     Missing.Value,
                                     Missing.Value,
                                     false);


PM MAIL   Вверх
Idsa
Дата 10.8.2007, 18:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: 14
Всего: 62



Цитата(moric83 @  10.8.2007,  18:00 Найти цитируемый пост)
А и ешё может и за настроик системы типа - Regional Options - COM обьект глючит.  smile   smile 

Этот дефект уже устранен smile

Цитата(moric83 @  10.8.2007,  18:00 Найти цитируемый пост)
Кстати может тебе поменять Type.Missing  на System.Reflection.Missing.Value .

Судя по рефлектору, и Type.Missing, и System.Reflection.Missing.Value должны быть равны null (следовательно, никакой разницы, что именно использовать, нет):
Код

public static readonly object Missing;

public static readonly Missing Value;

Однако ни одна из следующих проверок не проходит:
Код

if (System.Type.Missing == null)

if (System.Reflection.Missing.Value == null)

Интересно, в чем дело?

Изменил вызов метода до вот такого состояния:
Код

                priceWorkbook.SaveAs(this.priceFileName, XlFileFormat.xlExcel7, System.Reflection.Missing.Value, System.Reflection.Missing.Value,
                    false, false, XlSaveAsAccessMode.xlShared, XlSaveConflictResolution.xlLocalSessionChanges,
                    false, System.Reflection.Missing.Value, System.Reflection.Missing.Value, false);

Не помогло :(


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
moric83
Дата 10.8.2007, 21:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 50
Регистрация: 9.7.2007

Репутация: нет
Всего: 1



тогда переустанови винду  smile 
PM MAIL   Вверх
Idsa
Дата 11.8.2007, 07:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: 14
Всего: 62



Проблема решилась весьма неожиданно. Я попробовал скормить методу SaveAs формат XLWorkbookNormal - и все заработало.
Проблема в общем-то решена... однако причина недолюбливания моим офисом других форматов мне до сих пор не ясна.


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
moric83
Дата 11.8.2007, 10:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 50
Регистрация: 9.7.2007

Репутация: нет
Всего: 1



Цитата(Idsa @  11.8.2007,  07:48 Найти цитируемый пост)
Я попробовал скормить методу SaveAs формат XLWorkbookNormal


Я уже понял что работать с COM объектами офиса это головная боль - лучше обходится без них.  smile 
PM MAIL   Вверх
Idsa
Дата 11.8.2007, 17:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: 14
Всего: 62



Цитата(moric83 @  11.8.2007,  10:56 Найти цитируемый пост)
Я уже понял что работать с COM объектами офиса это головная боль - лучше обходится без них.  smile  

Да уж... А отладка COM-приложений, когда на сотню ошибок одно исключение, - просто жесть.

P. S. Вопрос насчет отличия null, Type.Missing и System.Reflection.Missing.Value остается в силе.


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
Exception
Дата 11.8.2007, 17:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 29
Всего: 186



Поле Missing у Type установлено равным полю Value класса Missing, которое указывает на единственный существующий экземпляр этого класса.
PM   Вверх
Idsa
Дата 11.8.2007, 20:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: 14
Всего: 62



Цитата(Exception @  11.8.2007,  17:50 Найти цитируемый пост)
которое указывает на единственный существующий экземпляр этого класса

Хм... А где именно указывает?
Судя по объявлению:
Код

public static readonly object Missing;
public static readonly Missing Value;

они должны быть равны null.


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0639 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.