2012-01-25 5 views
3

Я рассматриваю возможность замены (очень) большого размера кода автоматизации Office на то, что работает с форматом Office XML напрямую. Я только начинаю, но уже беспокоюсь, что это слишком большая задача.Работа с Office «открытый» XML - насколько это сложно?

Я буду иметь дело с Word, Excel и PowerPoint. Пока я смотрел только Word и Excel. Похоже, что документы Word должны быть достаточно легко манипулировать, но книги Excel выглядят как кошмар. Например ...

В Word, похоже, вы можете удалить абзац, просто удалив соответствующий тег «w: p». Тем не менее, предоставленный фрагмент кода для удаления строки в Excel занимает около 150 строк кода (!).

Причина, по которой код Excel настолько велик, что удаление строки означает обновление индексов строк всех последующих строк, исправление таблицы «общие строки» и т. Д. Согласно комментарию вверху, фрагмент кода даже не является полным, поскольку он не будет иметь дело с книгой, в которой есть таблицы (я могу жить с этим).

Что я не понимаю, является ли это единственным ограничением, которое имеет образец кода. Например, возникла бы проблема, если в книге была сводная таблица? Или диаграмму, которая ссылается на данные с одного листа? Или некоторые именованные диапазоны? Вам также не придется обновлять формулы для любых ячеек (и т. Д.), Которые ссылались на строку, индекс строки которой изменился?

[Это не говоря уже о «известкова цепи», которая (к счастью), я думаю, вы можете просто удалить, так как это только chache, который может быть перестроен.]

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

Также, если есть другие проблемы, похожие на Excel или Word или PowerPoint, я бы хотел услышать о них сейчас, прежде чем тратить слишком много времени на тупик. Благодарю.

ответ

14

Работая с Open XML SDK 2.0 уже почти два года, я могу сказать, что выполнение кажущихся тривиальными задач может занять много часов, а иногда и дней, чтобы выяснить, как это сделать должным образом. Например, удаление строки Excel должно быть достаточно простым и простым в использовании? Нет, потому что вам нужен не только код для удаления вашей строки, но затем вам нужно обновить все индексы строк, обновить ссылки на объединенные ячейки, обновить ссылки гиперссылок и т. Д. Наш внутренний метод удаления близок к 500 строкам кода, чтобы просто удалить строка, и я уверен, что у нас нет всех случаев, которые были учтены.

Самая большая жалоба у меня есть отсутствие документации о том, как выполнять наиболее распространенные задачи. Раздел MSDN, посвященный Open XML SDK, очень ограничен, и всякий раз, когда вам нужно что-то осложнять, вы действительно сами по себе. Мне пришлось подробно прочитать стандарт Open XML, чтобы понять, что означают определенные элементы и как они должны быть реализованы, поскольку я мог найти очень мало онлайн.

Другая сложная часть - если вы вставляете элемент в то место, где оно не принадлежит, или помещают недопустимый атрибут на элемент, вы получите поврежденный файл при попытке открыть его. В большинстве случаев вы не получите никакой информации о том, что вызвало ошибку, и вам придется посмотреть стандартную спецификацию Open XML, чтобы увидеть, что вы сделали неправильно.

Если вам нужно быстрое преобразование кода автоматизации Office в Open XML, а то, что вы делаете, не является основным, тогда я бы сказал, что он прошел. Если у вас есть время и терпение, чтобы читать XML-структуры Word, Excel и PowerPoint и узнавать, как они соотносятся, я говорю об этом.По-моему, это единственный способ иметь очень хороший контроль над этими офисными документами, но при запуске будет отличная кривая обучения.

О, и только для развлечения здесь, сколько кода необходимо добавить комментарий в Excel cell.

+0

Спасибо. Я нашел некоторые библиотеки для работы с Excel и для решения некоторых проблем, о которых я упомянул в своем вопросе (и вы повторили в своем ответе) - см. Мой ответ. –

+0

Г-н @amurra, мы сейчас в 2014 году, Open XML v2.5 (который выпущен в конце 2012 года) очень многообещающий, когда я читал об этом, моя команда настаивает на том, чтобы использовать только библиотеки, которые поддерживаются Microsoft, что вы предлагаете? –

+0

Я цитирую веб-сайт Microsoft [link] (http://msdn.microsoft.com/en-us/library/bb448854.aspx), который в последний раз обновляется ** 25 июля 2014 года **: « Open XML SDK 2.5 упрощает задачу управления пакетами Open XML и базовыми элементами схемы Open XML в пакете. Open XML SDK 2.5 инкапсулирует многие общие задачи, которые разработчики выполняют на пакетах Open XML, чтобы вы могли выполнять сложные операции только с несколькими строками кода ». –

3

Просто для полноты картины, вот некоторые библиотеки, которые я нашел для работы с Excel XML:

www.extremexml.com - слой поверх открытых классов XML SDK; фокусируется на введении данных в существующую электронную таблицу; обрабатывает многие проблемы перекрестных ссылок, которые я определил в своем вопросе. Open source, но GPL2 не LGPL. Код выглядит неплохо, а документация отличная. Тем не менее, он не выглядит ужасно активным на Codeplex.

Closed XML - еще один слой поверх Open XML SDK - снова с открытым исходным кодом, но с менее ограничительной лицензией (MIT). Выглядит неплохо и выглядит более «активным», чем выше.

SpreadsheetLight - из того, что я могу сказать, библиотека с закрытыми исходными кодами, сидящая поверх классов SDK Open XML. Больше нацелены на тех, кто хочет создать электронную таблицу с нуля, а не вносить изменения в существующие электронные таблицы.

+0

Если у вас есть проблемы с работами с библиотеками на основе Open XML, вы можете теперь рассмотреть [EPPlus] (http://epplus.codeplex.com/) (LGPL). –

2

Вот еще одна библиотека третья сторона посвящена работе с OpenXML:

http://www.officewriter.com

В приведенном примере по amurra выше удаления строк таблиц Excel, это единственный способ вызова с помощью этого инструмента. Он обновляет формулы и все другие ссылки, для которых, по-видимому, требуется 500 строк кода.

OpenKML SDK сам по себе является отличным инструментом для очень простых вещей, но вам по-прежнему приходится беспокоиться о многих внутренних форматах и ​​структуре упаковки, чтобы все было в порядке.

0

Вот некоторые дополнительные библиотеки, которые могут манипулировать с OOXML форматов:
- GemBox.Spreadsheet (XLSX)
- GemBox.Document (DOCX)

Также Gembox опубликовал несколько статей, которые показывают, как манипулировать с форматом OOXML файла с чистым .NET (без использования какой-либо библиотеки), я думаю, вы найдете интересный:

www.codeproject.com/Articles/15593/Read-and-write-Open-XML-files-MS-Office
(Введение в формат SpreadsheetML и объяснение о том, как мы можем читать и писать рабочий лист CEL л содержание)

www.codeproject.com/Articles/649064/Show-Word-File-in-WPF
(Введение в WordprocessingML формат и демонстрация того, как мы можем прочитать текст документа)

+2

Ссылка на потенциал решение всегда приветствуется, но, пожалуйста, добавьте контекст вокруг ссылки, чтобы у ваших коллег было некоторое представление о том, что это такое и почему оно есть. Всегда указывайте наиболее значимую часть важной ссылки, если целевой сайт недоступен или постоянно находится в автономном режиме. – Exaqt

 Смежные вопросы

  • Нет связанных вопросов^_^