![]() |
|
|
![]()
|
|
| Dreamer_0x01 |
|
|||
![]() Терминатор ![]() ![]() Профиль Группа: Участник Сообщений: 780 Регистрация: 14.4.2005 Где: Санкт-Петербург Репутация: 9 Всего: 12 |
Нужно данные из программы экспортировать в ралличные файлы разных форматов. Среди них - таблица Excel.
Есть ли какие-то стандартные средства, позволяющие это делать, или может кто скинет описание формата xls ? -------------------- Нет ничего невозможного. Есть цели, и есть время и силы на их достижение. |
|||
|
||||
| Denn |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 143 Регистрация: 6.8.2005 Репутация: 1 Всего: 2 |
Я использовал COM Automation, правда давно это было. Автоматизировал Word. Excel почти ничем не отличается в принципе. Находишь экзешник excel'а, загружаешь. Тебе становятся доступны через disp-интерфейс его объекты и методы. Далее как на VBA - это можно посмотреть в соотв. help'е. Там достаточно просто.
|
|||
|
||||
| chaos |
|
|||
![]() Серийный программист ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2979 Регистрация: 7.7.2004 Где: Екатеринбург Репутация: 4 Всего: 44 |
а может ADO поиспользовать? Он справиться с этим!!!
|
|||
|
||||
| chaos |
|
|||
![]() Серийный программист ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2979 Регистрация: 7.7.2004 Где: Екатеринбург Репутация: 4 Всего: 44 |
||||
|
||||
| chaos |
|
|||
![]() Серийный программист ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2979 Регистрация: 7.7.2004 Где: Екатеринбург Репутация: 4 Всего: 44 |
description excel format Это сообщение отредактировал(а) chaos - 15.8.2005, 13:25 |
|||
|
||||
| Dreamer_0x01 |
|
||||
![]() Терминатор ![]() ![]() Профиль Группа: Участник Сообщений: 780 Регистрация: 14.4.2005 Где: Санкт-Петербург Репутация: 9 Всего: 12 |
Справиться в принципе можно с чем угодно, если есть где почитать на русском языке . Вкратце можете сказать, что такое COM и что такое ADO ? И заодно вопрос - работа с office xp, office 2000, office 97 сильно будет отличаться? -------------------- Нет ничего невозможного. Есть цели, и есть время и силы на их достижение. |
||||
|
|||||
| Denn |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 143 Регистрация: 6.8.2005 Репутация: 1 Всего: 2 |
Про COM... Хде то здесь была ссылка на книжку Сущность технологии COM на русском...
А вкратце... Word представляет собой сервер автоматизации. Он состоит из объектов, которые представляют собой различные его части - документы, страницы, параграфы и т.п. Тоже с Excel. Ты ими манипулируешь из своей программы, которая является контролером автоматизации. А вот как ADO будет это делать я не представляю.
Не будет, если ты не будешь использовать специфические фичи для выбранной версии. |
|||
|
||||
| Dreamer_0x01 |
|
||||
![]() Терминатор ![]() ![]() Профиль Группа: Участник Сообщений: 780 Регистрация: 14.4.2005 Где: Санкт-Петербург Репутация: 9 Всего: 12 |
То есть предполагается, что моя прога открывает excel и посредством каких-то команд генерирует файл уже внутри него? Или не так?
Нет, конечно не будет. Мне всего лишь надо сформировать несолько столбцов с несколькими тысячами строк, все значения - тестовые и числовые. -------------------- Нет ничего невозможного. Есть цели, и есть время и силы на их достижение. |
||||
|
|||||
| Denn |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 143 Регистрация: 6.8.2005 Репутация: 1 Всего: 2 |
Именно так. Генерится на глазах прямо в Excel. Ты можешь делать все (ну или почти все) что Excel может. |
|||
|
||||
| Earnest |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5962 Регистрация: 17.6.2005 Где: Рязань Репутация: 87 Всего: 183 |
Если формат простой - регулярные колонки с цифрами или строками, то можно проще: есть такой формат CSV (Comma Separated Values), Excel его считает своим. Это просто текстовая таблица, где все значения разделены запятыми. На самом деле лучше разделять точкой с запятой, чтобы не путаться с десятичной точкой, которая по-русски запятая.
Короче, только с этим и надо разобраться, чтобы печатать десятичную точку так, как понимает Excel у тебя на машине. Но это для тех случаев, когда надо засунуть данные в Excel по-быстрому, и только на конкретной машине, и при этом формат - простая таблица. Кстати, быстрее будет, чем через Automation. -------------------- ... |
|||
|
||||
| JoyEx |
|
||||
|
Дядя ![]() ![]() Профиль Группа: Участник Сообщений: 323 Регистрация: 21.6.2005 Где: Москва, РФ Репутация: 5 Всего: 12 |
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 всё остальное за тебя сделает.
- и да и нет, если хочешь, чтобы твоя автоматизация работала с office97-XP, то тогда используй библиотеку типов из office97. Это сообщение отредактировал(а) JoyEx - 15.8.2005, 20:03 -------------------- Если ты уже никого не боишься, значит ты самый страшный |
||||
|
|||||
| Dreamer_0x01 |
|
|||
![]() Терминатор ![]() ![]() Профиль Группа: Участник Сообщений: 780 Регистрация: 14.4.2005 Где: Санкт-Петербург Репутация: 9 Всего: 12 |
Earnest
Формат проще некуда. Текстовые заголовки столбцов "Дата","Время", "Значение канала 1",... ,"Значение канала 16" , "Нештатные ситуации". И далее в каждой строке соответствующие значения. Строк таких будет несколько тысяч. Сейчас посмотрел на данные в формате csv - да, действительно просто. В принципе, это выход из ситуации, нужно лишь уточнить, поддерживает ли этот формат файлы большого размера (число строк в дальнейших версиях программ будет доходить до нескольких миллионов), а также поддерживают ли этот формат ранние версии екселя. И по скорости пожалуй это самый быстрый метод генерирования файла. На данный момент мы просто генерируем текстовый файл, с разделителями в виде пробелов, и такую штуку открываем экселем. Открывается, но пользователь должен иметь некое представление о работе в экселле и обладать элементарным интиллектом, чтобы открыть этот текстовый файл в экселле и вручную расставить столбцы. Увы, на это рассчитывать нельзя Надо,чтоб он нажимал в программе кнопку "экспорт", и ему на экране сразу показывалась табличка. Здесь получается так, что я огу сначала сгенерировать этот файл data.csv а потом в соответствующем месте программы запустить ShellExecute((HWND)this,"open","data.csv",NULL,NULL,SW_SHOWNORMAL); Хоть и извращение, но зато очень быстро !!! А создание "правильного" файла xls придется перенести в следующую версию программы. Всем спасибо, в особенности Earnest за идею!!! -------------------- Нет ничего невозможного. Есть цели, и есть время и силы на их достижение. |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Visual C++/MFC/WTL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |