Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/23: Рейтинг темы: голосов - 23, средняя оценка - 4.91
 Аватар для fantaz1
33 / 25 / 7
Регистрация: 08.11.2008
Сообщений: 107

"Visual C++" + "Excel"

10.07.2010, 18:38. Показов 4657. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите разобраться с вот этим уроком работы Visual C++ с Excel(Word) www.cyberguru.ru, а точнее с импортом нужных библиотек. Там приведен пример для 2000 и 97 офиса, как сделать тоже самое для 2007?
При компиляции кода данного в уроке, выдается куча ошибок.
Вот код импорта библиотек:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
// Office.h
 
#define Uses_MSO2000
 
#ifdef Uses_MSO2000
// for MS Office 2000
#import "C:\Program Files\Microsoft Office\Office\MSO9.DLL"
#import "C:\Program Files\Common Files\Microsoft Shared\VBA\VBA6\VBE6EXT.OLB"
#import "C:\Program Files\Microsoft Office\Office\MSWORD9.OLB" \
rename("ExitWindows","_ExitWindows")
#import "C:\Program Files\Microsoft Office\Office\EXCEL9.OLB" \
rename("DialogBox","_DialogBox") \
rename("RGB","_RGB") \
exclude("I","IPicture")
#import "C:\Program Files\Common Files\Microsoft Shared\DAO\DAO360.DLL" \
rename("EOF","EndOfFile") rename("BOF","BegOfFile")
#import "C:\Program Files\Microsoft Office\Office\MSACC9.OLB"
#else
// for MS Office 97
#import "C:\Program Files\Microsoft Office\Office\MSO97.DLL"
#import "C:\Program Files\Common Files\Microsoft Shared\VBA\VBEEXT1.OLB"
#import "C:\Program Files\Microsoft Office\Office\MSWORD8.OLB" \
rename("ExitWindows","_ExitWindows")
#import "C:\Program Files\Microsoft Office\Office\EXCEL8.OLB" \
rename("DialogBox","_DialogBox") \
rename("RGB","_RGB") \
exclude("I","IPicture")
#import "C:\Program Files\Common Files\Microsoft Shared\DAO\DAO350.DLL" \
rename("EOF","EndOfFile")
rename("BOF","BegOfFile")
#import "C:\Program Files\Microsoft Office\Office\MSACC8.OLB"
#endif
ну и код самой программы
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
// console.cpp : Defines the entry point for the console application.
 
#include "stdafx.h"
#include <stdio.h>
#include "Office.h"
 
void main()
{
::CoInitialize(NULL);
try {
using namespace Excel;
_ApplicationPtr excel("Excel.Application");
excel->Visible[0] = true;
 
// создаём новую книгу
_WorkbookPtr book = excel->Workbooks->Add();
// получаем первый лист (в VBA нумерация с единицы)
_WorksheetPtr sheet = book->Worksheets->Item[1L];
} catch (_com_error& er) {
char buf[1024];
sprintf(buf,"_com_error:\n"
"Error : %08lX\n"
"ErrorMessage: %s\n"
"Description : %s\n"
"Source : %s\n",
er.Error(),
(LPCTSTR)_bstr_t(er.ErrorMessage()),
(LPCTSTR)_bstr_t(er.Description()),
(LPCTSTR)_bstr_t(er.Source()));
 
CharToOem(buf,buf); // только для косольных приложений
printf(buf);
}
::CoUninitialize();
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
10.07.2010, 18:38
Ответы с готовыми решениями:

Visual studio excel
Ввести натуральное число N и действительные А1,А2...Аn.Выяснить,верно ли, что наибольшее число посследовальтености А1,А2...,Аn по модулю...

взаимодействие Excel и microsoft visual c++
Всем доброго времени суток. Нужно открыть файл эксэля и забирать значения из ячеек. В c++ builder'е это сделать было просто: ...

Excel и Visual Studio 2008
Друзья, не знаю как описать грамотно, но мне нужно сделать такую штуку: В программе есть переменные имеющие определенное...

3
Эксперт по математике/физике
 Аватар для Том Ардер
4218 / 3416 / 396
Регистрация: 15.06.2009
Сообщений: 5,817
12.07.2010, 00:54
Использую такое уже давно. Вот рабочий код (Office 2000):

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#import "E:\PROGRAM FILES\MICROSOFT OFFICE\OFFICE\MSO9.DLL"
 
#import "E:\PROGRAM FILES\MICROSOFT OFFICE\OFFICE\excel9.olb" \
    rename("DialogBox", "DialogBoxXL") \
    rename("RGB", "RBGXL") \
    rename("DocumentProperties", "DocumentPropertiesXL") \
    no_dual_interfaces
using namespace Excel;
 
#import "E:\Program Files\Microsoft Office\Office\MSWORD9.OLB" \
    rename("ExitWindows","_ExitWindows") \
    rename("FieldsPtr","WordFieldsPtr") \
    rename_namespace("WinWord")
using namespace WinWord;
 
#import "E:\Program Files\Common Files\System\ADO\msado21.tlb"  rename( "EOF", "adoEOF")
 
#import "E:\Program Files\Common Files\Microsoft Shared\DAO\dao360.dll" rename( "EOF", "adoEOF")
 
#import "E:\PROGRAM FILES\MICROSOFT OFFICE\OFFICE\Msacc9.olb"
 
typedef Access::_ApplicationPtr AccessApp;

применение:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    using namespace Excel;
    Excel::_ApplicationPtr pXL;
 
    pXL.CreateInstance(L"Excel.Application");
    pXL->Visible = VARIANT_FALSE;
 
    WorkbooksPtr        pBooks = pXL->Workbooks;
    _WorkbookPtr        pBook  = pBooks->Add((long)xlWorkbook);
    _WorksheetPtr       pSheet[20];
..............
        pXL->Visible = VARIANT_TRUE;
    pXL->Caption = (LPCSTR) lpszFileName;
    pBook->Saved = VARIANT_TRUE;
    pBook->SaveCopyAs((LPCSTR) lpszFileName);
0
 Аватар для fantaz1
33 / 25 / 7
Регистрация: 08.11.2008
Сообщений: 107
12.07.2010, 10:50  [ТС]
Том Ардер спасибо конешно, но это пример снова для 2000 офиса... а мне та нужно для 2007!
0
Эксперт по математике/физике
 Аватар для Том Ардер
4218 / 3416 / 396
Регистрация: 15.06.2009
Сообщений: 5,817
12.07.2010, 17:16
Если можно обойтись без импорта, то посмотри http://support.microsoft.com/kb/216686

#import 2007 не испытывал - не было надобности.

Для 2002 (ХР) офиса у меня работает
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#import "C:\PROGRAM FILES\COMMON FILES\MICROSOFT SHARED\OFFICE10\MSO.DLL" \
    named_guids, \
    rename("RGB","officeRGB"), \
    rename("DocumentProperties", "officeDocumentProperties")  
using namespace Office;
 
#import "C:\PROGRAM FILES\COMMON FILES\MICROSOFT SHARED\VBA\VBA6\Vbe6ext.olb" \
    rename("Events", "EventsVB")
using namespace VBIDE;
 
#import "C:\PROGRAM FILES\MICROSOFT OFFICE\OFFICE10\excel.exe" \
    rename("DialogBox", "DialogBoxXL") \
    rename("RGB", "RBGXL") \
    rename("DocumentProperties", "DocumentPropertiesXL") \
    no_dual_interfaces
using namespace Excel;
 
#import "C:\Program Files\Microsoft Office\Office10\MSWORD.OLB" \
    rename("ExitWindows","_ExitWindows") \
    rename("FieldsPtr","WordFieldsPtr") \
    rename_namespace("WinWord")
using namespace WinWord;
Общее правило - в начале каждого *.tlh файла есть список библиотек, которые надо подключить перед ним.

Access так импортировать не удалось, библиотеки противоречили друг другу. Пришлось создавать файл msacc.h в режиме "automation"
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
12.07.2010, 17:16
Помогаю со студенческими работами здесь

Вывод массива в Excel, с++ visual studio 2010
Помогите, пожалуйста, мне нужно вывести 2-х-мерный массив данных в Excel, программа выводит массив в текстовый файл, но там работать с...

Подскажите, пожалуйста, как преобразовать данные из excel в string или в char*, char perm [] в visual c++
Подскажите, пожалуйста, как преобразовать данные из excel в string или в char*, char perm также для вывода на экран среда visual c++ ...

Вылетает Visual Studio 2008 из-за системы управления версиями Microsoft Visual SourceSafe.
Всем здравствуйте. Недавно установил VS 2008 sp1 rus. Хочу создать проект на VC++ (делаю всё подобно как в VS 6.0). Файл - Создать...

Вывод русского текста в консольном окне Visual C++ программы Visual Studio Community 2017
Опробовал разные варианты, но почему-то в версии 2017 предыдущие методы не работают. Программа упёрто выводит кракозябры, вместо русских...

Какое отличие между Visual C++ от Visual C++ 2010 Express
Подскажите какая разница между какимто стандартным Visual C++ от Visual C++ 2010 Express... Что может быть лучшее? Заранее спасибо!!!


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
Доступность команды формы по условию
Maks 07.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: сделать доступной кнопку (команда формы "ЗавершитьСписание") при. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru