Часть рисунка с идентификатором отношения rid1 не найдена в файле excel

Слетают рисунки в эксель

Я
   Dolphinbet

27.08.15 — 12:54

Сохраняю табличный документ с рисунком в эксель. Все нормально открываю — рисунок на месте. Далее такой код (на сервере):

    excel = Новый COMОбъект(«Excel.Application»);

    
    excel.DisplayAlerts = 0;

    excel.EnableEvents = 0;

    Книга = excel.WorkBooks.Open(ПутьКФайлуотчета);

    
    Книга.SaveAs(ПутьКФайлуотчета);

    excel.Application.Quit();

После этой операции при открытии файла там где должен быть рисунок надпись «Часть рисунка с идентификатором отношения rID1 не найдена в файле».

Что могло случиться с рисунком при пересохранении файла?

   фобка

1 — 27.08.15 — 12:57

Формат файла может задать?

   Dolphinbet

2 — 27.08.15 — 13:02

(1) Формат xlsx

   фобка

3 — 27.08.15 — 13:04

Saveas(путь, 50);

   Dolphinbet

4 — 27.08.15 — 13:04

   Dolphinbet

5 — 27.08.15 — 13:05

(3)    Книга.SaveAs(ПутьКФайлуотчета, 50);

по причине:

Произошла исключительная ситуация (Microsoft Excel): Данное расширение нельзя использовать с выбранным типом файла. Измените расширение в поле «Имя файла» или выберите другой тип файла в списке «Тип файла».

   фобка

6 — 27.08.15 — 13:11

(4) погодь

(5) да?) а так saveas(путь, -4143) еще надо параметр accsessmode глянуть типа

Saveas(,-4143,,,,,2)

   фобка

7 — 27.08.15 — 13:15

50 — это эксель 2007 (xlExel12), у тебя какой?

   Dolphinbet

8 — 27.08.15 — 13:16

(6) Теперь файл не открывается в эксель, пишет что формат недопустимый)

   Dolphinbet

9 — 27.08.15 — 13:16

У меня вот такой:

ТабДок.Записать(ПутьКФайлуотчета, ТипФайлаТабличногоДокумента.XLSX);

   фобка

10 — 27.08.15 — 13:17

(9) это понятно, эксель какой?

   Dolphinbet

11 — 27.08.15 — 13:27

(10) Excel 2010

   фобка

12 — 27.08.15 — 13:36

(11) походу 51

   Dolphinbet

13 — 27.08.15 — 13:40

(12) походу, только картинки по прежнему слетают..

   фобка

14 — 27.08.15 — 13:44

(13) значит дело не в формате :)

   Dolphinbet

15 — 27.08.15 — 13:49

(14) попробовал выполнить тот же код на клиенте — все норм. Значит дело в выполнении на сервере..

   Dolphinbet

16 — 27.08.15 — 13:56

только вариант «на клиенте » мне не подходит(

   фобка

17 — 27.08.15 — 14:05

Сложно сказать — не сталкивался. Если переимонвать файл в zip и посмотреть внутри — картинка существует?

   Dolphinbet

18 — 27.08.15 — 14:12

Вообще некоторые советуют отказаться от использования «Excel.Application» (например корпорация Microsoft).

Соответственно у меня вопрос, какая есть альтернатива? ADO?

   Dolphinbet

19 — 27.08.15 — 14:13

Допустим у меня есть такой несложный код:

    excel = Новый COMОбъект(«Excel.Application»);

    
    excel.DisplayAlerts = 0;

    excel.EnableEvents = 0;

    Книга = excel.WorkBooks.Open(ПутьКотчету);

    
    List = Книга.Sheets(1);

    List.columns(6).Delete(-4159);

    List.Cells(14,6).Select();

    excel.ActiveWindow.FreezePanes = 1;

    ВсегоКолонок = List.Cells(1,1).SpecialCells(11).Column;

    Для i=6 по ВсегоКолонок цикл

        List.columns(i).ColumnWidth = 100;

        List.columns(i).AutoFit();

    КонецЦикла;

    
    ВсегоСтрок = List.Cells(1,1).SpecialCells(11).Row;

    Для i=1 по ВсегоСтрок цикл

        List.rows(i).AutoFit();

    КонецЦикла;

    
    старт = List.columns(13);

    финиш = List.columns(ВсегоКолонок);

    List.Range(старт, финиш).Group();

    
    Книга.SaveAs(ПутьКотчету);

    excel.Application.Quit();

Как сделать тоже самое через ADO?

   Dolphinbet

20 — 27.08.15 — 14:16

Корпорация Microsoft на сегодняшний день не рекомендует производить и не поддерживает автоматизацию программ из пакета Microsoft Office с помощью автоматических, неинтерактивных клиентских приложений или компонентов (включая ASP, DCOM и службы NT), поскольку при запуске в этом окружении программы пакета Office могут работать нестабильно или зависать.

   фобка

21 — 27.08.15 — 14:36

(20) адо для чтения/записи данных ток (имхо), не знаю можно так форматами и свойствами управлять

   Dolphinbet

22 — 27.08.15 — 14:43

Вот что пишет Майкрософт по поводу серверной автоматизации https://support.microsoft.com/ru-ru/kb/257757

   Dolphinbet

23 — 27.08.15 — 14:44

Если честно я среди альтернатив ничего не нашел подходящего. Не встраивать в файл макрос чтоб он отрабатывал на стороне клиента. Вряд ли какому-то клиенту это понравится)

  

Dolphinbet

24 — 27.08.15 — 14:47

Намного лучшей скорости и масштабируемости при редактировании некоторых встроенных двоичных форматов можно достичь средствами Web-компонентов Office (OWC) или объектов данных ActiveX (ADO). Просмотр и изменение свойств документов возможны без применения автоматизации, а для управления файлами и версиями используются серверные расширения FrontPage (FPSE) или Distributed Authoring and Versioning (DAV).

ГЛАВНАЯ

ТРЕНИНГИ

   Быстрый старт
   Расширенный Excel
   Мастер Формул
   Прогнозирование
   Визуализация
   Макросы на VBA

КНИГИ

   Готовые решения
   Мастер Формул
   Скульптор данных

ВИДЕОУРОКИ

ПРИЕМЫ

   Бизнес-анализ
   Выпадающие списки
   Даты и время
   Диаграммы
   Диапазоны
   Дубликаты
   Защита данных
   Интернет, email
   Книги, листы
   Макросы
   Сводные таблицы
   Текст
   Форматирование
   Функции
   Всякое
PLEX

   Коротко
   Подробно
   Версии
   Вопрос-Ответ
   Скачать
   Купить

ПРОЕКТЫ

ОНЛАЙН-КУРСЫ

ФОРУМ

   Excel
   Работа
   PLEX

© Николай Павлов, Planetaexcel, 2006-2022
info@planetaexcel.ru


Использование любых материалов сайта допускается строго с указанием прямой ссылки на источник, упоминанием названия сайта, имени автора и неизменности исходного текста и иллюстраций.

Техническая поддержка сайта

ООО «Планета Эксел»

ИНН 7735603520


ОГРН 1147746834949
        ИП Павлов Николай Владимирович
        ИНН 633015842586
        ОГРНИП 310633031600071 

Hi Friends,

I’m displayed «The Image part with relationship ID rId1 was not found in the file» instead of my actual image in Excel.

My logic is here ,
——————-

  I’m using VB.NET 2008,Excel 2010

  I’m maintaining Template Folder in Application path  which is placed on Server System .Inside Template folder i’m maintaining some excel sheets with some format with company logo,company heading & cell formats.

now when i click Export to Excel button from VB.NET Windows application, At run time i’m doing following operation,

step 1. i’m creating new excel sheet & Adding template sheet into this new excel sheet (from template folder which is in Server System) 

  VB.NET Code :  xlw.Sheets.Add(, , , My.Application.Info.DirectoryPath & «TemplatesDeliveryOrder.xlsx»)

step 2. Loading only data into this sheet ( since company logo,header & other cell formats already set in template sheet itself,no need to set every time )

step 3. Saving this in Local Drive at runtime itself ( In Client System ).

But when i open Saved excel sheet in local drive, my company logo is displaying with error image as «The Image part with relationship ID rId1 was not found in the file».

Note :  My template folder is in Server & saved sheet in local( Client ). 

My Questions :
—————

So i wanna know 1.why I’m getting «The Image part with relationship ID rId1 was not found in the file» error instead of my image ?
2. Is this Excel Issue or My Vb.Net Application Issue

friends,Can you help me to fix this issue ?


Thanks — Ravi

Студворк — интернет-сервис помощи студентам

Всем добрый день!

По непонятным пока причинам перестали отображаться картинки в документе, который создавался больше месяца и очень срочно нужен для работы!!!!!!
Вместо картинок появляется надпись «часть рисунка с идентификатором отношения rId20 не найдена в файле».

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

Я не программист, но возможно, кто-то сможет сказать если не причину, почему это произошло, то хотя бы как можно восстановить этот документ. Уже определенно ясно, что пора бросать Ворд и переходить на LaTex, но этот документ нужен очень срочно и хочется сэкономить время на повторном наборе всех 79 страниц.

Старый
19.08.2010, 13:23

 

#1
 

Участник

Лучший по профессии 2017

 

Регистрация: 07.06.2003

Записей в блоге: 1

Вывод в Excel на сервере


Есть задача —
На сервере открыть файл шаблона Excel, записать туда что-нибудь, сохранить
На 3.0, 4.0 все работало отлично
На 2009 не работает. Объект Application создается, но при попытке открытия файла появляется ошибка
Method ‘add’ in COM object of class ‘Workbooks’ returned error code 0x800A03EC (<unknown>) which means: Нет доступа к файлу ‘c:MyDatatest.xlsx’

При изменении запуска класса на client все работает. АОС и Клиент установленны на одной машине, работают под одним пользователем(администратором).
С чем вообще может быть связана такая ошибка? Если это принципиально не возможно, то Microsoft конечно подложило большую свинью, так как пользователи практически всех веб-порталов любили всякие модификации, которые генерят ексельки на портале
Пример кода для воспроизведения:

X++:

static server void openFile()
{
    COM         comWorkBooks;
    COMVariant  varTemlateName;
    COM         m_comApplication;   // COM interface to MS Office application
    COM         m_comDocument;      // COM interface to MS Office documnet
    str         template = 'c:\MyData\test.xlsx';
    Set         permissionSet;
    ;
    permissionSet =  new Set(Types::Class);
    permissionSet.add(new FileIoPermission(template,'rw'));
    permissionSet.add(new InteropPermission(InteropKind::ComInterop));
    CodeAccessPermission::assertMultiple(permissionSet);


    m_comApplication = new COM('Excel.Application');
    m_comApplication.Visible(false);

    comWorkBooks = m_comApplication.workBooks();

    varTemlateName = new  COMVariant(COMVariantInOut::IN, COMVariantType::VT_BSTR);
    varTemlateName.bStr(template);

    m_comDocument = comWorkBooks.add(varTemlateName);
    info('ok');
}

Последний раз редактировалось trud; 19.08.2010 в 13:26.

Старый
19.08.2010, 14:13

 

#2
 

Модератор

Аватар для George Nordic

Злыдни

 

Регистрация: 17.12.2003

Адрес: Moscow

Записей в блоге: 9

На сервере 2003 стоит или 2007?

С Уважением,
Георгий

Старый
19.08.2010, 14:27

 

#3
 

Участник

Аватар для Bega

 

Регистрация: 18.08.2005

Адрес: Москва

У меня этот тест прошел. Сначала служба АОС была под системной учеткой, ломалось, не давало создать COM, сделал запуск под пользователем с админскими правами на сервере, тест прошел. На сервере установлен 2003-й офис — файл соответственно xls.

Старый
19.08.2010, 15:12

 

#4
 

Участник

В данном случае у пользователя windows на клиенте скорее всего действительно нет прав просто на папку на сервере, расшарить ее в общий доступ, но это временное решение проблемы.
Намучавшись с com автоматизацией 2007 excel на сервере 2008 64-битном переписали классы COMExcelDocument_RU для работы по технологии OpenXML. Чего и вам желаю — быстродействие выше в разы, Excel на сервер можно вообще не ставить. Из минусов — в шаблонах пришлось отказаться от формул, ибо их поддержка библиотекой OpenXML похожа на закат солнца вручную.

Старый
19.08.2010, 15:42

 

#5
 

Участник

Лучший по профессии 2017

 

Регистрация: 07.06.2003

Записей в блоге: 1

На компьютере стоит Windows7 32 бит. Офис 2007
не понятно, какой доступ нужно дать. Компьютер всего один, сервисы запущены под администратором. Расшарил папку для всех, попробовал по сетевому пути, результат тот же — нет доступа к файлу
А с помощью OpenXML вы можете открыть предварительно настроенный шаблон Excel и записать туда данные в определенные ячейки?
или можно только генерить новые файлы?

Старый
19.08.2010, 16:28

 

#6
 

Участник

Цитата:

Сообщение от trud
Посмотреть сообщение

А с помощью OpenXML вы можете открыть предварительно настроенный шаблон Excel и записать туда данные в определенные ячейки?
или можно только генерить новые файлы?

Открываем файл excel и модифицируем по потребностям, класс COMExcelDocument_RU переписан, все остальное не менялось, но вся работа с xml вынесена во внешнюю сборку .net. Генерить новые файлы потребности не возникало, но это решаемо, когда за классом акспаты стоит вся «мощчь» C#

P.S. Может чтение журнала событий системы поможет узнать в чём грабли?


Последний раз редактировалось player; 19.08.2010 в 16:31.

Старый
19.08.2010, 20:42

 

#7
 

Участник

Лучший по профессии 2017

 

Регистрация: 07.06.2003

Записей в блоге: 1

Что-то непонятна идея с OpenXML. Допустим я открываю файл шаблона. В нем например строка 4 вида

X++:

<x:row r="4" spans="1:3">
      <x:c r="C4" t="s">
        <x:v>4</x:v>
      </x:c>
    </x:row>

Мне надо вставить набор данных начиная допустим со строки 2. Т.е. я должен найти все объекты, которые лежат ниже, как-то обновить у них всех ссылки. На первый взгляд получается большая сложность, учитывая что могут быть объединенные ячейки и т.п.
Или вы делаете по другому?

Старый
20.08.2010, 11:11

 

#8
 

Участник

Win server 2008 (64 bit) скрипт работает без ошибок. Клиент и AOS на одной машине , AX 2009 SP1 RU-3. AOS работает под своей учетной записью.

Старый
20.08.2010, 11:17

 

#9
 

Участник

Если проблема действительно не в пути к файлу, то, может, User Account Control в винде задизаблить? он у вас при каждом чихе не спрашивает Run as administrator?

Старый
20.08.2010, 12:10

 

#10
 

Участник

Лучший по профессии 2017

 

Регистрация: 07.06.2003

Записей в блоге: 1

Задизейблил UserAccountControl. То же самое. Так же пробовал менять пользователя, под которым запущен АОС на другого(тоже администратора). Опять такая же ошибка
Добавил в начало метода код проверяющий наличие файла, код отрабатывает нормально, файл есть

X++:

if (! WinApi::fileExists_RU(template))
    {
        throw error(strFmt("File not exists"));
    }

IKA, а вы приведенный код как запускаете? добавили его в метод класса и запускаете этот класс из джоба или как-то еще?
Можете добавить в начало метода

X++:

info(strFmt("%1", xGlobal::clientKind()));

Последний раз редактировалось trud; 20.08.2010 в 12:20.

Старый
20.08.2010, 12:28

 

#11
 

Участник

Цитата:

Сообщение от trud
Посмотреть сообщение

Что-то непонятна идея с OpenXML. Допустим я открываю файл шаблона. В нем например строка 4 вида

X++:

<x:row r="4" spans="1:3">
      <x:c r="C4" t="s">
        <x:v>4</x:v>
      </x:c>
    </x:row>

Мне надо вставить набор данных начиная допустим со строки 2. Т.е. я должен найти все объекты, которые лежат ниже, как-то обновить у них всех ссылки. На первый взгляд получается большая сложность, учитывая что могут быть объединенные ячейки и т.п.
Или вы делаете по другому?

В библиотеке OpenXML некоторые возможности (хотя далеко не все) определены в виде библиотечных классов типа WorkSheetPart, Cell и т.д., более подробно об этом на openxmldeveloper.org. А вот с объединенными ячейками, именованными ячейками и прочими диапазонами действительно приходится возиться при вставке/удалении строк/столбцов. Трудозатраты — примерно один человеко-месяц без выходных и сверхурочных.

Старый
20.08.2010, 12:32

 

#12
 

Участник

Кстати, про fileExists — на 64-х битном сервере WinApi::fileExists_RU

заменил на

X++:

static public boolean fileExists_CLR(FilenameOpen  _fileName)
{
    InteropPermission perm = new InteropPermission(InteropKind::ClrInterop);
    boolean ret;
    ;
    perm.assert();
    ret = ClrInterop::getAnyTypeForObject(System.IO.File::Exists(_filename));
    return ret;
}

ибо были грабли с ним

За это сообщение автора поблагодарили: S.Kuskov (10).

Старый
20.08.2010, 12:36

 

#13
 

Участник

По теме вопроса Попробуйте —
в dcomcnfg нужно в «настройка DCOMComponent servicesMicrosoft Excel Application» в свойствах поиграть с удостоверением
вместо «Текущий пользователь» поставить «Запускающий пользователь» или явно указанный пользователь.


Последний раз редактировалось player; 20.08.2010 в 12:39.

За это сообщение автора поблагодарили: trud (1), db (3), arty (1).

Старый
20.08.2010, 13:39

 

#14
 

Участник

Лучший по профессии 2017

 

Регистрация: 07.06.2003

Записей в блоге: 1

Смена удостоверения на конкретного пользователя помогла
Огромное спасибо, сейчас буду тестить на 64 бит

Старый
20.08.2010, 13:57

 

#15
 

Участник

Кстати, одна из проблем серверной автоматизации в том что на server 2008 этот «конкретный» пользователь обязательно должен быть админом и у него обязательно должно быть право Interact with Desktop, и еще вроде бы валилось с невозможностью получения прав доступа по GUID объекта который отсутствовал в списке component services (типа лист Microsoft excel или что-то подобное), что в комплексе с вываливаниями при открывающихся в excel диалоговых окон, запуск -надцати excel и выползание в swap при попытке активно смотреть отчеты натолкнуло на вышеозначенную реализацию.

P.S. К слову, сам Microsoft активно открещивается от серверной автоматизации с помощью Excel, что нетрудно гуглится, например _http://support.microsoft.com/kb/257757.
Прочитав ужаснулся, но поскольку на server 2003 32bit работало, не трогал. Спасибо server 2008 64-bit в общем за победу разума над ленью


Последний раз редактировалось player; 20.08.2010 в 14:04.

За это сообщение автора поблагодарили: Logger (10), Dreadlock (1).

Старый
04.12.2011, 19:04

 

#16
 

Участник

Аватар для Dreadlock

 

Регистрация: 07.05.2009

Адрес: Москва

Всем привет!

Столкнулся с тем, что в WS2008 64bit в компонентах нет Microsoft Excel Application, а есть лишь только GUID значения которого нельзя поменять.
В общем, если при экспорте или импорте Excel файла на портале будут выдаваться ошибки: Метод «open» в COM-объекте класса «Workbooks» возвратил код ошибки 0x800A03EC (<неизвестно>), который означает: Нет доступа к файлу ‘\СетевойпутьtmpExcel.xls’. Это может быть вызвано одной из следующих причин. • Имени файла или пути не существует. • Файл используется другой программой. • Имя книги, которую вы пытаетесь сохранить, совпадает с именем открытой в данный момент книги.

Нужно выполнить следующее:

Цитата:

This solution is …

・Windows 2008 Server x64

Please make this folder.

C:WindowsSysWOW64configsystemprofileDesktop

・Windows 2008 Server x86

Please make this folder.

C:WindowsSystem32configsystemprofileDesktop

…instead of dcomcnfg.exe.

Источник http://social.msdn.microsoft.com/For…6-44421818ef91

Надеюсь пригодится.


Последний раз редактировалось Dreadlock; 04.12.2011 в 19:09.

За это сообщение автора поблагодарили: Logger (5), Товарищ ♂uatr (2).

Старый
04.12.2011, 21:17

 

#17
 

Участник

 

Регистрация: 28.11.2005

Адрес: Москва

Записей в блоге: 3

За это сообщение автора поблагодарили: Logger (5).

Старый
21.04.2014, 19:40

 

#18
 

Участник

Аватар для Dreadlock

 

Регистрация: 07.05.2009

Адрес: Москва

Еще нашел для MS Office 2010, что надо добавить в папку C:WindowsSystem32configsystemprofileAppDataLocalMicrosoft
папку Shemas и дать на нее права .Net BusinessConnector’у

За это сообщение автора поблагодарили: Logger (3), gl00mie (2).

Старый
06.05.2014, 11:09

 

#19
 

Участник

Лучший по профессии 2015

Лучший по профессии 2014

 

Регистрация: 12.10.2004

Адрес: Москва

Записей в блоге: 2

Цитата:

Сообщение от player
Посмотреть сообщение

Кстати, одна из проблем серверной автоматизации в том что на server 2008 этот «конкретный» пользователь обязательно должен быть админом и у него обязательно должно быть право Interact with Desktop, и еще вроде бы валилось с невозможностью получения прав доступа по GUID объекта который отсутствовал в списке component services (типа лист Microsoft excel или что-то подобное), что в комплексе с вываливаниями при открывающихся в excel диалоговых окон, запуск -надцати excel и выползание в swap при попытке активно смотреть отчеты натолкнуло на вышеозначенную реализацию.

P.S. К слову, сам Microsoft активно открещивается от серверной автоматизации с помощью Excel, что нетрудно гуглится, например _http://support.microsoft.com/kb/257757.
Прочитав ужаснулся, но поскольку на server 2003 32bit работало, не трогал. Спасибо server 2008 64-bit в общем за победу разума над ленью

Теперь стало понятнее, почему в Ax классы по взаимодействию с Excel — клиентские.
Это не косяк разработчиков аксапты, а целенаправленная политика. Вместо решения проблемы формирования Excel файлов на сервере, решили вопрос ампутацией — просто запретили работать с Excel на сервере.

Старый
09.12.2014, 09:44

 

#20
 

Участник

Аватар для Товарищ ♂uatr

MCBMSS

Добрый день!
Возникла проблема, при отображением изображения при формировании данных.
Данные формируются по шаблону (из ресурсов Аксапты) на сервере (DAX 2012 R2), в нем содержится изображение.
При выполнении кода на клиенте изображение отображается корректно, а при формировании данного документа в CIL, картинка не отображается.
Excel аргументирует это «часть рисунка с идентификатором отношения rId1 не найдена в файле». (это новый сервер, вчера были ошибки Excel.Application и 0x800A03EC, сделал как изложено здесь)

Понравилась статья? Поделить с друзьями:
  • Частота в статистике excel
  • Часть рабочей книги excel это
  • Частота excel на английском
  • Часто употребляемые команды при работе с документами в ms word 2010 собраны на
  • Часто используемые шрифты в word