Слетают рисунки в эксель |
Я |
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
Формат файла может задать?
2 — 27.08.15 — 13:02
(1) Формат xlsx
3 — 27.08.15 — 13:04
Saveas(путь, 50);
4 — 27.08.15 — 13:04
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), у тебя какой?
8 — 27.08.15 — 13:16
(6) Теперь файл не открывается в эксель, пишет что формат недопустимый)
9 — 27.08.15 — 13:16
У меня вот такой:
ТабДок.Записать(ПутьКФайлуотчета, ТипФайлаТабличногоДокумента.XLSX);
10 — 27.08.15 — 13:17
(9) это понятно, эксель какой?
11 — 27.08.15 — 13:27
(10) Excel 2010
12 — 27.08.15 — 13:36
(11) походу 51
13 — 27.08.15 — 13:40
(12) походу, только картинки по прежнему слетают..
14 — 27.08.15 — 13:44
(13) значит дело не в формате
15 — 27.08.15 — 13:49
(14) попробовал выполнить тот же код на клиенте — все норм. Значит дело в выполнении на сервере..
16 — 27.08.15 — 13:56
только вариант «на клиенте » мне не подходит(
17 — 27.08.15 — 14:05
Сложно сказать — не сталкивался. Если переимонвать файл в zip и посмотреть внутри — картинка существует?
18 — 27.08.15 — 14:12
Вообще некоторые советуют отказаться от использования «Excel.Application» (например корпорация Microsoft).
Соответственно у меня вопрос, какая есть альтернатива? ADO?
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?
20 — 27.08.15 — 14:16
Корпорация Microsoft на сегодняшний день не рекомендует производить и не поддерживает автоматизацию программ из пакета Microsoft Office с помощью автоматических, неинтерактивных клиентских приложений или компонентов (включая ASP, DCOM и службы NT), поскольку при запуске в этом окружении программы пакета Office могут работать нестабильно или зависать.
21 — 27.08.15 — 14:36
(20) адо для чтения/записи данных ток (имхо), не знаю можно так форматами и свойствами управлять
22 — 27.08.15 — 14:43
Вот что пишет Майкрософт по поводу серверной автоматизации https://support.microsoft.com/ru-ru/kb/257757
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
Книги, листы
Макросы
Сводные таблицы
Текст
Форматирование
Функции
Всякое
Коротко
Подробно
Версии
Вопрос-Ответ
Скачать
Купить
ПРОЕКТЫ
ОНЛАЙН-КУРСЫ
ФОРУМ
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 страниц.
|
#1 |
||
Участник
Регистрация: 07.06.2003 Записей в блоге: 1 |
Вывод в Excel на сервере Есть задача — При изменении запуска класса на client все работает. АОС и Клиент установленны на одной машине, работают под одним пользователем(администратором). 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.
|
||
|
#2 |
||
Модератор
Регистрация: 17.12.2003 Адрес: Moscow Записей в блоге: 9 |
На сервере 2003 стоит или 2007? С Уважением, |
||
|
#3 |
||
Участник
Регистрация: 18.08.2005 Адрес: Москва |
У меня этот тест прошел. Сначала служба АОС была под системной учеткой, ломалось, не давало создать COM, сделал запуск под пользователем с админскими правами на сервере, тест прошел. На сервере установлен 2003-й офис — файл соответственно xls. |
||
|
#4 |
Участник |
В данном случае у пользователя windows на клиенте скорее всего действительно нет прав просто на папку на сервере, расшарить ее в общий доступ, но это временное решение проблемы. |
|
#5 |
||
Участник
Регистрация: 07.06.2003 Записей в блоге: 1 |
На компьютере стоит Windows7 32 бит. Офис 2007 |
||
|
#6 |
Участник |
Цитата: Сообщение от trud А с помощью OpenXML вы можете открыть предварительно настроенный шаблон Excel и записать туда данные в определенные ячейки? Открываем файл excel и модифицируем по потребностям, класс COMExcelDocument_RU переписан, все остальное не менялось, но вся работа с xml вынесена во внешнюю сборку .net. Генерить новые файлы потребности не возникало, но это решаемо, когда за классом акспаты стоит вся «мощчь» C# P.S. Может чтение журнала событий системы поможет узнать в чём грабли?
Последний раз редактировалось player; 19.08.2010 в 16:31.
|
|
#7 |
||
Участник
Регистрация: 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. Т.е. я должен найти все объекты, которые лежат ниже, как-то обновить у них всех ссылки. На первый взгляд получается большая сложность, учитывая что могут быть объединенные ячейки и т.п. |
||
|
#8 |
Участник |
Win server 2008 (64 bit) скрипт работает без ошибок. Клиент и AOS на одной машине , AX 2009 SP1 RU-3. AOS работает под своей учетной записью. |
|
#9 |
Участник |
Если проблема действительно не в пути к файлу, то, может, User Account Control в винде задизаблить? он у вас при каждом чихе не спрашивает Run as administrator? |
|
#10 |
||
Участник
Регистрация: 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.
|
||
|
#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. А вот с объединенными ячейками, именованными ячейками и прочими диапазонами действительно приходится возиться при вставке/удалении строк/столбцов. Трудозатраты — примерно один человеко-месяц без выходных и сверхурочных. |
|
#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). |
|
#13 |
Участник |
По теме вопроса
Последний раз редактировалось player; 20.08.2010 в 12:39.
|
За это сообщение автора поблагодарили: trud (1), db (3), arty (1). |
|
#14 |
||
Участник
Регистрация: 07.06.2003 Записей в блоге: 1 |
Смена удостоверения на конкретного пользователя помогла |
||
|
#15 |
Участник |
Кстати, одна из проблем серверной автоматизации в том что на server 2008 этот «конкретный» пользователь обязательно должен быть админом и у него обязательно должно быть право Interact with Desktop, и еще вроде бы валилось с невозможностью получения прав доступа по GUID объекта который отсутствовал в списке component services (типа лист Microsoft excel или что-то подобное), что в комплексе с вываливаниями при открывающихся в excel диалоговых окон, запуск -надцати excel и выползание в swap при попытке активно смотреть отчеты натолкнуло на вышеозначенную реализацию. P.S. К слову, сам Microsoft активно открещивается от серверной автоматизации с помощью Excel, что нетрудно гуглится, например _http://support.microsoft.com/kb/257757.
Последний раз редактировалось player; 20.08.2010 в 14:04.
|
За это сообщение автора поблагодарили: Logger (10), Dreadlock (1). |
|
#16 |
||
Участник
Регистрация: 07.05.2009 Адрес: Москва |
Всем привет! Столкнулся с тем, что в WS2008 64bit в компонентах нет Microsoft Excel Application, а есть лишь только GUID значения которого нельзя поменять. Нужно выполнить следующее: Цитата: 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). |
|
#17 |
Участник Регистрация: 28.11.2005 Адрес: Москва Записей в блоге: 3 |
|
За это сообщение автора поблагодарили: Logger (5). |
|
#18 |
||
Участник
Регистрация: 07.05.2009 Адрес: Москва |
Еще нашел для MS Office 2010, что надо добавить в папку C:WindowsSystem32configsystemprofileAppDataLocalMicrosoft |
||
За это сообщение автора поблагодарили: Logger (3), gl00mie (2). |
|
#19 |
||
Участник
Регистрация: 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. Теперь стало понятнее, почему в Ax классы по взаимодействию с Excel — клиентские. |
||
|
#20 |
||
Участник
|
Добрый день! |
||