лучший способ программного изменения таблиц Excel - PullRequest
7 голосов
/ 13 января 2009

Я ищу библиотеку, которая позволит мне программно изменять файлы Excel, чтобы добавлять данные в определенные ячейки. Моя текущая идея состоит в том, чтобы использовать именованные диапазоны, чтобы определить, куда вставить новые данные (по существу, диапазон 1x1), а затем обновить именованные диапазоны, чтобы они указывали на данные. Существующее приложение, с которым он собирается интегрироваться, полностью написано на C ++, поэтому я в идеале ищу решение C ++ (следовательно, почему этот поток имеет ограниченную полезность). Если ничего не помогает, я воспользуюсь решением .NET, если есть какой-то способ связать его с нашим приложением C ++.

Идеальным решением было бы использование открытого исходного кода, но ни один из тех, что я видел до сих пор ( MyXls и XLSSTREAM ), не отвечает требованиям. Мне нравится внешний вид Aspose.Cells , но это для .NET или Java, а не C ++ (и стоит денег). Мне нужно поддерживать все форматы Excel с 97 по настоящее время, включая форматы XLSX и XLSB. В идеале он также поддерживает такие форматы, как OpenOffice и (для вывода) PDF и HTML.

Некоторые варианты использования, которые мне нужно поддерживать:

  • чтение и изменение любой ячейки в электронной таблице, включая формулы
  • создание, чтение, изменение именованных диапазонов (самих диапазонов, а не только ячеек)
  • копирование форматирования из ячейки в кучу других (включая условное форматирование) - мы будем использовать одну ячейку в качестве шаблона для всех остальных, которые мы заполняем данными.

Любая помощь, которую вы можете оказать мне в поиске подходящей библиотеки, была бы великолепна. Я также хотел бы услышать некоторые отзывы о различных предложениях (в том числе в моем посте), чтобы я мог принимать более обоснованные решения - что легко использовать, без ошибок, дешево и т. Д.

Ответы [ 6 ]

3 голосов
/ 13 января 2009

Самое безопасное предложение - просто использовать OLE. Он использует COM, который вообще не требует .NET.

http://en.wikipedia.org/wiki/OLE_Automation <- примерно на полпути вниз пример C ++. </p>

Возможно, вам придется обернуть несколько функций в функции для удобства использования, но работать с ними действительно не страшно.

РЕДАКТИРОВАТЬ: Просто имейте в виду, что вам нужна копия Excel для его работы. Кроме того, есть некоторые собственные файлы .h, которые вы можете найти специально для Excel. (это все объясняется в статье в Википедии)

2 голосов
/ 13 января 2009

Я не знаю, подходит ли вам этот вариант, но новые форматы Office 2007 представлены в формате zip-XML, что позволяет очень легко вносить свои изменения. См. здесь для спецификаций .

1 голос
/ 27 января 2009

SpreadsheetGear for .NET удовлетворит ваши требования и имеет API, очень похожий на Excel.

Когда вы вставляете ячейки, ваши заданные имена (и любые другие формулы / диаграммы / и т. Д.) Автоматически исправляются так, чтобы они ссылались на новый диапазон (так же, как в Excel). Поэтому вам не нужно обновлять определенные имена (хотя есть полная поддержка для создания и обновления определенных имен, если это именно то, что вы хотите сделать).

SpreadsheetGear - это компонент .NET, но вы можете создать свою собственную обертку, которая вызывается из C ++.

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

0 голосов
/ 18 сентября 2009

Я закончил тем, что использовал Aspose.Cells, как я упоминал в моем первоначальном посте, так как это казалось самым простым путем. Я очень доволен тем, как это получилось, и их поддержка очень хорошая. Мне пришлось создать оболочку вокруг него в C #, которая экспортировала интерфейс COM в мое приложение C ++.

0 голосов
/ 13 января 2009

Я бы сказал, что решение .net с COM-взаимодействием для связи с вашим приложением C ++ является лучшим решением. За более чем десять лет работы с ними я никогда не видел COM-автоматизации Excel, которая бы нигде не пропускала память.

Если вам нужно автоматизировать Excel, я рекомендую Инструменты Visual Studio для Office . Если вам не нужно автоматизировать, нужно только изменять файлы, и эти файлы могут быть в формате Office 2007, вам лучше найти библиотеку, которая манипулирует файлами напрямую, а не открывать Excel для этого.

0 голосов
/ 13 января 2009

Вы уже пробовали использовать интерфейсы Excel COM? Очевидно, что Excel должен быть установлен на машине, и с этим трудно справиться ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...