Профайлер показывает, что это — самое узкое место по производительности (и CopyToClipboard, и PasteSpecial).
Как это все убыстрить? Может как-то не через буфер обмена?
sct>Профайлер показывает, что это — самое узкое место по производительности (и CopyToClipboard, и PasteSpecial). sct>Как это все убыстрить? Может как-то не через буфер обмена?
Здравствуйте, sct, Вы писали:
sct>Здравствуйте, Angler, Вы писали:
A>>используйте Open XML SDK.
sct>Что-то не нашел, как там работать именно с OLE-объектами. sct>Примерчика нет никакого?
имелась ввиду работа с excel файлами не через com , а с помощью Open XML SDK 2.0 for Microsoft Office , по сути это работа с xml'ем — данные пишутся в файл в текстовом виде, что гораздо (в разы) быстрее, проблема в том, что такой формат поддерживает только 2007 офис
Здравствуйте, crazydown, Вы писали:
C>имелась ввиду работа с excel файлами не через com , а с помощью Open XML SDK 2.0 for Microsoft Office , по сути это работа с xml'ем — данные пишутся в файл в текстовом виде, что гораздо (в разы) быстрее, проблема в том, что такой формат поддерживает только 2007 офис
Это то я понял. Excel 2007 тоже подходит. Вопрос только, поддерживает ли Open XML вставку OLE-объектов и хорошо бы примерчик какой.
Спасибо заранее.
Здравствуйте, sct, Вы писали:
sct>Здравствуйте, crazydown, Вы писали:
C>>имелась ввиду работа с excel файлами не через com , а с помощью Open XML SDK 2.0 for Microsoft Office , по сути это работа с xml'ем — данные пишутся в файл в текстовом виде, что гораздо (в разы) быстрее, проблема в том, что такой формат поддерживает только 2007 офис
sct>Это то я понял. Excel 2007 тоже подходит. Вопрос только, поддерживает ли Open XML вставку OLE-объектов и хорошо бы примерчик какой. sct>Спасибо заранее.
первые же ссылки в гугле по "open xml sdk insert ole object"
Здравствуйте, crazydown, Вы писали:
C>первые же ссылки в гугле по "open xml sdk insert ole object" C>...
С помощью Open XML SDK Productivity Tool получил из xslx-файла с OLE-объектом C# код для создания такого файла.
Все, в принципе, понятно, кроме самого главного. А именно, откуда в этом C# коде берутся бинарные данные для ole-объекта?
Там есть код типа:
public class Class1{
...
#region Binary Data
private string embeddedObjectPart1Data ="0M8R4KGxGuEAAAAAAAAAAAAAAAAAAAAAPgADAP7/CQAGAAAAAAAAAAAAAAABAAAAAQAAAAAAAAAAEAAAEgAAAAEAAAD+////AAAAAAAAAAD////////////////////////////////////////////////////////////////
...
///////////////////////9/////v///wMAAAAEAAAABQAAAAYAAAA
...
EMgICAwICAwICAwICAwICAwICAwICAwICAwICAwICAwICAwICAwCiAgIC0wLjQ2OTkgICAgMC43Nzg3ICAgIDAuMDAwMCBDICAgMCAgMCAgMCAgMCAgMCAgMCAgMCAgMCAgMCAgMCAgMCAgMAogICAgMC4yNDYzICAgLTAuNDYyMyAgICAwLjAwMDAgQyAgIDAgIDAgIDAgIDAgIDAgIDAgIDAgIDAgIDAgIDAgIDAgIDAKICAgIDAuOTYwNyAgICAwLjc3ODcgICAgMC4wMD
..."private string imagePart1Data ="..."private string spreadsheetPrinterSettingsPart1Data = "..."
}
Смотрел под отладчиком свой код по вставке ole-объекта через PasteSpecial в excel — там таких бинарных данных не наблюдается .
Что тут можно сделать?
sct>Смотрел под отладчиком свой код по вставке ole-объекта через PasteSpecial в excel — там таких бинарных данных не наблюдается . sct>Что тут можно сделать?
Я так понимаю, что содержимое в base64. Открой свой xslx архиватором(к примеру 7zip) и поищи сам бинарник. Или ещё проще:
-создай копию своего оригинального xslx
-удали из него свой вставленный обьектик, сохрани
-в рефлекторе есть возможность сравнить два разных open xml файлика, он покажет тебе отличия, на основании которых можно будет уже дальше кумекать.
Да, а что за обьект пытаешься вставить?
Здравствуйте, Angler, Вы писали:
A>Здравствуйте, crazydown, Вы писали:
C>>... проблема в том, что такой формат поддерживает только 2007 офис....
A>Не совсем так. Существует также возмножность работать и в 2003 офисе, при установке дополнительных элементов.
подробнее пожалуйста
могу ли я с помощью Open XML SDK и "дополнительных элементов" получить бинарный формат (doc,xls) ?
Здравствуйте, crazydown, Вы писали:
C>подробнее пожалуйста C>могу ли я с помощью Open XML SDK и "дополнительных элементов" получить бинарный формат (doc,xls) ?
Здравствуйте, Angler, Вы писали:
A>Я так понимаю, что содержимое в base64. Открой свой xslx архиватором(к примеру 7zip) и поищи сам бинарник. Или ещё проще: A> -создай копию своего оригинального xslx A> -удали из него свой вставленный обьектик, сохрани A> -в рефлекторе есть возможность сравнить два разных open xml файлика, он покажет тебе отличия, на основании которых можно будет уже дальше кумекать. A>Да, а что за обьект пытаешься вставить?
Не совсем понял, это к чему сравнение делать? Для того, чтобы понять, чем отличается xslx-файл с ole-объектом на такой же файл без ole-объекта? Так я это и так знаю — бинарными данными для ole-объекта!
У меня вопрос другой — как я могу эти бинарные данные получить в моем C# коде для вставки в генерируемый xslx-файл из моего ole-объекта? Дело в том, что через команду Reflect Code в XML SDK Productivity Tool я могу увидеть бинарники для конкретного ole-объекта, а мне их надо вставить программным способом пару тысяч. Сейчас я вставляю через буфер обмена кодом типа
Здравствуйте, Angler, Вы писали:
A>Да, а что за обьект пытаешься вставить?
Может это и не столь важно — проблема с любым ole-объетом, хоть с Word.
Если важно, то работаю с Symyx Draw (http://www.symyx.com/micro/getdraw/) — такая приблуда для рисования химич. формул.
Здравствуйте, sct, Вы писали:
sct>Здравствуйте, Angler, Вы писали:
A>>Да, а что за обьект пытаешься вставить?
sct>Может это и не столь важно — проблема с любым ole-объетом, хоть с Word. sct>Если важно, то работаю с Symyx Draw (http://www.symyx.com/micro/getdraw/) — такая приблуда для рисования химич. формул.
вот только что проверил:
-создал xlsx
-вставил обьект ms word
-сохранил
-открыл рефлектором xlsx
Здравствуйте, Angler, Вы писали:
A>таким образом, чтобы вставить файлик Word-а в качестве oleObject-а, нам необходимо: A>1. создать EmbeddedPackagePart: A>
A>EmbeddedPackagePart embeddedPackagePart1 = part.AddNewPart<EmbeddedPackagePart> ("application/vnd.openxmlformats-officedocument.wordprocessingml.document", "rId2");
A>
A>2. скормить ему данные файлика(см. FeedData)
A>Разница лишь в том, что встраиваемые файлы ты будешь создавать в Symyx Draw.
Спасибо за ответы .
Только пока все равно как-то не получается, увы .
Код примерно такой (пример для Word):
Этот код я получил, взяв xslx файл со встроенным OLE-объектом Word и просмотрев его в через Reflect Code в XML SDK Productivity Tool.
Вот непонятно мне, откуда брать-то бинарные значения для embeddedPackagePart1Data (т. е. содержимое ole-объекта) ?
Как эти бинарные данные выудить из Word (или Symyx Draw) объекта? Что за метод дергать (сам экземпляр класса Symyx Draw есть у меня).
Re[11]: Вставка OLE-объектов в Excel - оптимизация
sct>Вот непонятно мне, откуда брать-то бинарные значения для embeddedPackagePart1Data (т. е. содержимое ole-объекта) ? sct>Как эти бинарные данные выудить из Word
Давай так: выложи 2 файлика
xslx — куда встраивать
docx — который ты хочешь встроить
и я набросаю на коленке, как это сделать.
Потом посмотрим пример с Symyx Draw
Re[12]: Вставка OLE-объектов в Excel - оптимизация
Вот "на коленке" сделал. Без обработки ошибок и исползования статических relationshipID's. В каталоге где запускаешь должны лежать два файла:
src.xlsx — пустой шаблон, как минимум с одним worksheet
emb.docx — файл, который хотим вставить как ole обьект
на выходе получем dst.xlsx