Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Есть ли в MFC средства для работы с MSOffice? или как можно создать файл Excel 
:(
    Опции темы
Dreamer_0x01
Дата 14.8.2005, 15:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Терминатор
**


Профиль
Группа: Участник
Сообщений: 780
Регистрация: 14.4.2005
Где: Санкт-Петербург

Репутация: 9
Всего: 12



Нужно данные из программы экспортировать в ралличные файлы разных форматов. Среди них - таблица Excel.
Есть ли какие-то стандартные средства, позволяющие это делать, или может кто скинет описание формата xls ?


--------------------
Нет ничего невозможного. Есть цели, и есть время и силы на их достижение.
PM ICQ   Вверх
Denn
Дата 14.8.2005, 18:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 143
Регистрация: 6.8.2005

Репутация: 1
Всего: 2



Я использовал COM Automation, правда давно это было. Автоматизировал Word. Excel почти ничем не отличается в принципе. Находишь экзешник excel'а, загружаешь. Тебе становятся доступны через disp-интерфейс его объекты и методы. Далее как на VBA - это можно посмотреть в соотв. help'е. Там достаточно просто.
PM MAIL ICQ   Вверх
chaos
Дата 15.8.2005, 11:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: 4
Всего: 44



а может ADO поиспользовать? Он справиться с этим!!!
PM WWW   Вверх
chaos
Дата 15.8.2005, 11:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: 4
Всего: 44



может еще это поможет
book
PM WWW   Вверх
chaos
Дата 15.8.2005, 13:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: 4
Всего: 44



Цитата(Dreamer_0x01 @ 14.8.2005, 15:12)
или может кто скинет описание формата xls ?

description excel format

Это сообщение отредактировал(а) chaos - 15.8.2005, 13:25
PM WWW   Вверх
Dreamer_0x01
Дата 15.8.2005, 14:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Терминатор
**


Профиль
Группа: Участник
Сообщений: 780
Регистрация: 14.4.2005
Где: Санкт-Петербург

Репутация: 9
Всего: 12



Цитата

а может ADO поиспользовать? Он справиться с этим!!!


Цитата

Я использовал COM Automation


Справиться в принципе можно с чем угодно, если есть где почитать на русском языке .
Вкратце можете сказать, что такое COM и что такое ADO ?

И заодно вопрос - работа с office xp, office 2000, office 97 сильно будет отличаться?


--------------------
Нет ничего невозможного. Есть цели, и есть время и силы на их достижение.
PM ICQ   Вверх
Denn
Дата 15.8.2005, 15:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 143
Регистрация: 6.8.2005

Репутация: 1
Всего: 2



Про COM... Хде то здесь была ссылка на книжку Сущность технологии COM на русском...

А вкратце... Word представляет собой сервер автоматизации. Он состоит из объектов, которые представляют собой различные его части - документы, страницы, параграфы и т.п. Тоже с Excel. Ты ими манипулируешь из своей программы, которая является контролером автоматизации.

А вот как ADO будет это делать я не представляю.

Цитата(Dreamer_0x01 @ 15.8.2005, 14:23)
И заодно вопрос - работа с office xp, office 2000, office 97 сильно будет отличаться?

Не будет, если ты не будешь использовать специфические фичи для выбранной версии.
PM MAIL ICQ   Вверх
Dreamer_0x01
Дата 15.8.2005, 16:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Терминатор
**


Профиль
Группа: Участник
Сообщений: 780
Регистрация: 14.4.2005
Где: Санкт-Петербург

Репутация: 9
Всего: 12



Цитата

Ты ими манипулируешь из своей программы, которая является контролером автоматизации


То есть предполагается, что моя прога открывает excel и посредством каких-то команд генерирует файл уже внутри него? Или не так?

Цитата

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


Нет, конечно не будет. Мне всего лишь надо сформировать несолько столбцов с несколькими тысячами строк, все значения - тестовые и числовые.


--------------------
Нет ничего невозможного. Есть цели, и есть время и силы на их достижение.
PM ICQ   Вверх
Denn
Дата 15.8.2005, 16:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 143
Регистрация: 6.8.2005

Репутация: 1
Всего: 2



Цитата(Dreamer_0x01 @ 15.8.2005, 16:11)
То есть предполагается, что моя прога открывает excel и посредством каких-то команд генерирует файл уже внутри него? Или не так?

Именно так. Генерится на глазах прямо в Excel. Ты можешь делать все (ну или почти все) что Excel может.
PM MAIL ICQ   Вверх
Earnest
Дата 15.8.2005, 19:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 5962
Регистрация: 17.6.2005
Где: Рязань

Репутация: 87
Всего: 183



Если формат простой - регулярные колонки с цифрами или строками, то можно проще: есть такой формат CSV (Comma Separated Values), Excel его считает своим. Это просто текстовая таблица, где все значения разделены запятыми. На самом деле лучше разделять точкой с запятой, чтобы не путаться с десятичной точкой, которая по-русски запятая.
Короче, только с этим и надо разобраться, чтобы печатать десятичную точку так, как понимает Excel у тебя на машине. Но это для тех случаев, когда надо засунуть данные в Excel по-быстрому, и только на конкретной машине, и при этом формат - простая таблица. Кстати, быстрее будет, чем через Automation.


--------------------
...
PM   Вверх
JoyEx
Дата 15.8.2005, 19:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дядя
**


Профиль
Группа: Участник
Сообщений: 323
Регистрация: 21.6.2005
Где: Москва, РФ

Репутация: 5
Всего: 12



Цитата(Dreamer_0x01 @ 15.8.2005, 14:23)
Вкратце можете сказать, что такое COM ...


http://www.rsdn.ru/summary/247.xml

Если в двух словах: сервер (.exe или .dll (- внутрипроцессный)) регистрируется, т.е. в реестре прописывает свой CLSID (уникальный ID) и вот, когда ты создаешь какой-то COM-объект из этого сервера, то по этому ID (в реестре) ищется прокси [для внутрипроцессного сервера, прокси (представитель) - это его же .dll, если, конечно, апартамент подходит] и загружается в процесс клиента, затем ты получаешь указатель на интерфейс, т.е. на vTable объекта в прокси. Ну и можешь вызывать методы. Каждый COM-объект поддерживает интерфейс IUnknown, через IUnknown::QueryInterface() ты можешь запросить у него другой интерфейс, но вот для скриптовых языков (VBA, JScript...) это делать затруднительно и поэтому они работают токо с IDispatch, т.е. через IDispatch::GetIDsOfNames () из строкового имени метода получают его id и вызывают метод с помощью IDispatch::Invoke(,id,). Для языковой независимости интерфейсы еще описываются на языке IDL и записываются в библиотеку типов (.tlb, .olb или в ресурсы сервера), которая нужна еще и для универсального маршалинга ( - передача данных ).

ЗЫ Сервер может находиться и на удаленной машине, для связи с ним нужно токо поменять флаг на CLSCTX_REMOTE_SERVER в CoCreateInstanceEx() и указать адрес машины, через RPC (Remote Procedure Call) Windows всё остальное за тебя сделает.

Цитата(Denn @ 15.8.2005, 15:54)
Цитата (Dreamer_0x01 @ 15.8.2005, 14:23)
И заодно вопрос - работа с office xp, office 2000, office 97 сильно будет отличаться?
Не будет, если ты не будешь использовать специфические фичи для выбранной версии.


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

Это сообщение отредактировал(а) JoyEx - 15.8.2005, 20:03


--------------------
Если ты уже никого не боишься, значит ты самый страшный 
PM IM ICQ AOL YIM MSN   Вверх
Dreamer_0x01
Дата 15.8.2005, 20:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Терминатор
**


Профиль
Группа: Участник
Сообщений: 780
Регистрация: 14.4.2005
Где: Санкт-Петербург

Репутация: 9
Всего: 12



Earnest

Формат проще некуда. Текстовые заголовки столбцов
"Дата","Время", "Значение канала 1",... ,"Значение канала 16" , "Нештатные ситуации".
И далее в каждой строке соответствующие значения. Строк таких будет несколько тысяч.

Сейчас посмотрел на данные в формате csv - да, действительно просто. В принципе, это выход из ситуации, нужно лишь уточнить, поддерживает ли этот формат файлы большого размера (число строк в дальнейших версиях программ будет доходить до нескольких миллионов), а также поддерживают ли этот формат ранние версии екселя. И по скорости пожалуй это самый быстрый метод генерирования файла.
На данный момент мы просто генерируем текстовый файл, с разделителями в виде пробелов, и такую штуку открываем экселем. Открывается, но пользователь должен иметь некое представление о работе в экселле и обладать элементарным интиллектом, чтобы открыть этот текстовый файл в экселле и вручную расставить столбцы. Увы, на это рассчитывать нельзя smile
Надо,чтоб он нажимал в программе кнопку "экспорт", и ему на экране сразу показывалась табличка.
Здесь получается так, что я огу сначала сгенерировать этот файл data.csv а потом в соответствующем месте программы запустить

ShellExecute((HWND)this,"open","data.csv",NULL,NULL,SW_SHOWNORMAL);

Хоть и извращение, но зато очень быстро !!!
А создание "правильного" файла xls придется перенести в следующую версию программы.

Всем спасибо, в особенности Earnest за идею!!!



--------------------
Нет ничего невозможного. Есть цели, и есть время и силы на их достижение.
PM ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Visual C++/MFC/WTL | Следующая тема »


 




[ Время генерации скрипта: 0.0523 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.