powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Ошибка при работе с COM
7 сообщений из 7, страница 1 из 1
Ошибка при работе с COM
    #39316583
kos20
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все привет!
Пытаюсь научиться работать с EXCEL через COM объект, но пока не получается.
По факту пытаюсь повторить урок http://www.technical-recipes.com/2012/how-to-interface-with-excel-in-c/

Как и что сделал:
1. Импортировал COM объект Excel_tlb
2. Подключил cpp, тк h жудко ругался (сразу вопрос почему?)
3 написал код
Код: plaintext
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.
#pragma hdrstop
#pragma argsused

#ifdef _WIN32
#include <tchar.h>


#else
  typedef char _TCHAR;
  #define _tmain main
#endif

#include <stdio.h>
//#include "Excel_TLB.h" - тут куча ошибок если раскоментить 
#include "Excel_TLB.cpp"
#include <comobj.hpp>
 int _tmain(int argc, _TCHAR* argv[])
{

	  Excel_tlb::_ApplicationPtr pXL;
	  pXL->Workbooks->Open("C:\Users\\Книга1.xlsx");
	  pXL->Quit();

	return 0;
}



4. Результат ошибка: [bcc32 Error] File1.cpp(24): E2285 Could not find a match for 'Workbooks::Open(const char *)'
Full parser context
File1.cpp(18): parsing: int main(int,char * *)

Вопрос: почему ошибка и как от нее избавиться? Всем спасибо!))
...
Рейтинг: 0 / 0
Ошибка при работе с COM
    #39316598
Пётр Седов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kos20Пытаюсь научиться работать с EXCEL через COM объект, но пока не получается.Реально нужен именно Excel, хотя есть бесплатный Calc? (LibreOffice)

kos202. Подключил cpp, тк h жудко ругался (сразу вопрос почему?)Так вы приведите сообщения об ошибках, может и ответят, почему.

kos20
Код: plaintext
1.
2.
	  Excel_tlb::_ApplicationPtr pXL;
	  pXL->Workbooks->Open("C:\Users\\Книга1.xlsx");

Указатель pXL наверняка надо как-то инициализировать, вряд ли же он в конструкторе-по-умолчанию создаёт COM-объект.

kos204. Результат ошибка: [bcc32 Error] File1.cpp(24): E2285 Could not find a match for 'Workbooks::Open(const char *)'
Full parser context
File1.cpp(18): parsing: int main(int,char * *)

Вопрос: почему ошибка и как от нее избавиться?
В COM работа со строками идёт в кодировке UTF-16, строковый литерал должен быть так:
Код: plaintext
1.
L"C:\\Users\\Книга1.xlsx"

или так:
Код: plaintext
1.
u"C:\\Users\\Книга1.xlsx"

(и не забываем удваивать все backslash-и)

А вообще, почитайте старое , вдруг поможет.
...
Рейтинг: 0 / 0
Ошибка при работе с COM
    #39316636
m_Sla
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kos20,

16947676
...
Рейтинг: 0 / 0
Ошибка при работе с COM
    #39317341
kos20
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ознакомился с предоставленной информацией, вот что получилось:
- хедер получилось подключить, все работает
- нашел такой вот пример
Код: plaintext
1.
2.
3.
4.
5.
6.
	 Excel_tlb::TCOM_Application        m_XLApp;
_WorksheetPtr                      m_Worksheet;
if (!m_XLApp)
   m_XLApp = Excel_tlb::CoExcelApplication::Create();
m_XLApp->Workbooks->Add(xlWBATWorksheet);
m_XLApp->Workbooks->get_Item(1)->Sheets->set_Visible(0,true);



Но почемe-то ругается в последних 2 строчках
здесь на xlWBATWorksheet - типа не найден идентификатор, хотя в #include "Excel_TLB.h" такой идентификатор есть

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
enum class XlWBATemplate
{
  xlWBATChart = (int)-4109,  //0xFFFFEFF3
  xlWBATExcel4IntlMacroSheet = 4, 
  xlWBATExcel4MacroSheet = 3, 
  xlWBATWorksheet = (int)-4167 //0xFFFFEFB9
};


Вторая ошибка тут get_Item(1)
[bcc32 Error] Unit1.cpp(30): E2285 Could not find a match for 'Workbooks::get_Item(int)'
Full parser context
Unit1.cpp(24): parsing: void _fastcall TForm1::Button1Click(TObject *)
...
Рейтинг: 0 / 0
Ошибка при работе с COM
    #39317347
kos20
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ошибки в основном
[bcc32 Error] Unit1.cpp(46): E2451 Undefined symbol 'bVisiblePar'
Full parser context
Unit1.cpp(25): parsing: void _fastcall TForm1::Button1Click(TObject *)


Почему такие ошибки возникают? Как решить?
(((
...
Рейтинг: 0 / 0
Ошибка при работе с COM
    #39317386
Пётр Седов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kos20
Код: plaintext
1.
2.
3.
4.
	 Excel_tlb::TCOM_Application        m_XLApp;
_WorksheetPtr                      m_Worksheet;
if (!m_XLApp)
   m_XLApp = Excel_tlb::CoExcelApplication::Create();

Префикс «m_» -- только для полей класса ( m ember), для локальных переменных в функции его не надо использовать.

kos20
Код: plaintext
1.
2.
m_XLApp->Workbooks->Add(xlWBATWorksheet);
m_XLApp->Workbooks->get_Item(1)->Sheets->set_Visible(0,true);



Но почемe-то ругается в последних 2 строчках
здесь на xlWBATWorksheet - типа не найден идентификатор, хотя в #include "Excel_TLB.h" такой идентификатор есть

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
enum class XlWBATemplate
{
  xlWBATChart = (int)-4109,  //0xFFFFEFF3
  xlWBATExcel4IntlMacroSheet = 4, 
  xlWBATExcel4MacroSheet = 3, 
  xlWBATWorksheet = (int)-4167 //0xFFFFEFB9
};

Это же enum class, его надо с квалификацией писать:
Код: plaintext
1.
m_XLApp->Workbooks->Add(XlWBATemplate::xlWBATWorksheet);

Но тут может быть лучше просто int-овую константу завести:
Код: plaintext
1.
const int xlWBATWorksheet = -4167;


kos20 Почему такие ошибки возникают? Как решить? (((Может вам на Delphi перейти?
анекдотРабинович в синагоге жалуется раввину: «Жизнь такая тяжёлая, что мне делать?»
раввин: «Покрестись в христианство.»
Рабинович: «И что, станет лучше?»
раввин: «Нет, но ты будешь морочить голову попу, а не мне.»
...
Рейтинг: 0 / 0
Ошибка при работе с COM
    #39319206
kos20
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
После кучи проб и ошибок удалось создать новый документ через ExcelApplication1
Код: plaintext
1.
2.
3.
ExcelApplication1->Connect();
ExcelApplication1->Workbooks->Add();
ExcelApplication1->Visible[0] = true;



Но вот открыть не получилось, пишет, что документ не найден ""...

Код: plaintext
1.
2.
3.
ExcelApplication1->Connect();
ExcelApplication1->Workbooks->Open(L"d:\\Excel\\2015.xlsm");
ExcelWorksheet1->ConnectTo(ExcelApplication1->ActiveSheet);



Ошибка ниже

Почему возникает и как исправить?
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Ошибка при работе с COM
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]