powered by simpleCommunicator - 2.0.19     © 2024 Programmizd 02
Map
Форумы / C++ [игнор отключен] [закрыт для гостей] / Создать документ Word в С++
4 сообщений из 4, страница 1 из 1
Создать документ Word в С++
    #40138113
Фотография БурыйТина
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Братцы, подскажите пожалуйста как в Visual Studio C++ создать документ Word или Exel и программно отредактировать его?
Поделитесь кусочком кода?
...
Рейтинг: 0 / 0
Создать документ Word в С++
    #40138114
Фотография Valentin Kolesnikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В Visual Studio C++, вы можете создать и редактировать документы Word и Excel, используя библиотеки, такие как "Microsoft Office Interop" для работы с приложениями Microsoft Office. Вот общие шаги:

1. Убедитесь, что у вас установлен Microsoft Office на вашем компьютере.

2. Откройте Visual Studio и создайте новый проект на C++.

3. Добавьте ссылку на библиотеки Interop для Word и Excel. Для этого перейдите в "Solution Explorer", щелкните правой кнопкой мыши на "References" и выберите "Add Reference...". Затем выберите "Microsoft.Office.Interop.Word" и "Microsoft.Office.Interop.Excel" в списке.

4. Теперь вы можете использовать следующий пример кода для создания документа Word и его редактирования:
Код: 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.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
#include <iostream>
#include <Windows.h>
#include <atlbase.h>
#include <comutil.h>
#include <winerror.h>
#include <stdio.h>

#import "C:\Program Files (x86)\Common Files\Microsoft Shared\OFFICE15\mso.dll"
using namespace Office;
#import "C:\Program Files (x86)\Microsoft Office\root\Office16\EXCEL.EXE" rename("DialogBox", "ExcelDialogBox") rename("RGB", "ExcelRGB")
using namespace Excel;

int main()
{
    // Инициализируем COM
    HRESULT hr = CoInitialize(NULL);
    if (FAILED(hr)) {
        std::cerr << "Failed to initialize COM library" << std::endl;
        return hr;
    }

    try {
        // Создаем объект Excel
        _ApplicationPtr excelApp;
        hr = excelApp.CreateInstance(__uuidof(Application));
        if (FAILED(hr)) {
            std::cerr << "Failed to create Excel Application object" << std::endl;
            return hr;
        }

        // Создаем новую книгу Excel
        _WorkbookPtr workbook = excelApp->Workbooks->Add(Excel::xlWorksheet);

        // Получаем активный лист
        _WorksheetPtr worksheet = workbook->ActiveSheet;

        // Заполняем ячейку A1
        _variant_t cellValue = L"Hello, Excel!";
        worksheet->Cells->Item[1][1] = cellValue;

        // Сохраняем книгу
        std::wstring fileName = L"C:\\Path\\To\\Your\\Excel\\File.xlsx";
        workbook->SaveAs(fileName.c_str());

        // Закрываем Excel
        excelApp->Quit();
    }
    catch (_com_error &e) {
        std::cerr << "COM Exception: " << e.ErrorMessage() << std::endl;
        return e.Error();
    }

    // Освобождаем COM
    CoUninitialize();

    std::cout << "Excel document created and edited successfully." << std::endl;
    return 0;
}
Аналогично, вы можете создать и редактировать документы Word, заменив "EXCEL.EXE" на "WINWORD.EXE" и соответствующим образом настроив код.

Обратите внимание, что пути к библиотекам Interop могут различаться в зависимости от версии Microsoft Office и вашей операционной системы. Убедитесь, что пути указаны правильно в вашем проекте.
...
Рейтинг: 0 / 0
Создать документ Word в С++
    #40138123
Фотография БурыйТина
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Valentin Kolesnikov [игнорируется] 

День добрый
возник вот тут затык
Цитата 
[игнорируется]
Добавьте ссылку на библиотеки Interop для Word и Excel. Для этого перейдите в "Solution Explorer", щелкните правой кнопкой мыши на "References" и выберите "Add Reference...". Затем выберите "Microsoft.Office.Interop.Word" и "Microsoft.Office.Interop.Excel" в списке.
Не могу я найти ссылку на эту библиотеку. Через NuGet нахожу, но не встает пакет, там в зависимостях Net, а у меня чистый C++ проект.

Видимо надо перейти на C# и Net ?

Я выбрал С++ учитывая что имел с ним опыт около 15 лет назад. Программирование было как хобби. 15 лет я ничего не писал, сейчас возникло желание несколько автоматизировать свой труд.

подскажите пожалуйста, чистый С++ ушел ввиду того что все перешли на Net для поддержки кроссплатформенности? чтобы компилировать программу в нужную ОСь и все?

вот рока результат моих страданий ))
Код: 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.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
 CoInitialize(NULL);
 CLSID clsid;
 HRESULT hr = CLSIDFromProgID(L"Word.Application", &clsid);//Выполняет поиск идентификатора CLSID в реестре с учетом идентификатора ProgID.
 // "Excel.Application" for MSExcel

 IDispatch* pWApp = nullptr;
 if (SUCCEEDED(hr))
 {
     hr = CoCreateInstance(clsid, NULL, CLSCTX_LOCAL_SERVER,
         IID_IDispatch, (void**)&pWApp);//Создает и инициализирует по умолчанию один объект класса , связанный с указанным идентификатором CLSID.
 }

 DISPID dispID[2];
 VARIANT pvResult;
 LPOLESTR ptName = LPOLESTR(L"Visible");
 hr = pWApp->GetIDsOfNames(IID_NULL, &ptName, 1, LOCALE_USER_DEFAULT, dispID);
 if (SUCCEEDED(hr))
 {
     VARIANT x;
     x.vt = VT_I4;
     x.lVal = 1; // 1=visible; 0=invisible;
     DISPID prop = DISPATCH_PROPERTYPUT;

     //DISPPARAMS dp = { NULL,NULL,0,0 };
     //dp.cArgs = 1;
     //dp.rgvarg = &x;
     //dp.cNamedArgs = 1;
     //dp.rgdispidNamedArgs = NULL;

     DISPPARAMS dp = { NULL,NULL,0,0 };
     dp.cArgs = 1;
     dp.cNamedArgs = 1;
     dp.rgdispidNamedArgs = &dispID[1];

     dp.rgvarg = new VARIANT[dp.cArgs];
     dp.rgvarg[0].vt = VT_BSTR;
     dp.rgvarg[0].bstrVal = SysAllocString(OLESTR("Hello"));

         hr = pWApp->Invoke(dispID[0], IID_NULL, LOCALE_SYSTEM_DEFAULT, DISPATCH_PROPERTYPUT,
             &dp, &pvResult, NULL, NULL);

         //MessageBoxA(hWnd, "Важная инфа", "Дошел", MB_OK);
         pWApp->Release();
         delete[] dp.rgvarg;
 }
Процесс ворд создается, но дальше я ничего не могу с ним сделать, ни отобразить, ни уничтожить. Остановился короче. Я хочу сделать экземляр Ворда видимым и уже передавать туда данные и т.д., чтобы видеть как программа работает.
...
Изменено: 09.10.2023, 15:29 - БурыйТина
Рейтинг: 0 / 0
Создать документ Word в С++
    #40138133
Фотография БурыйТина
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Реализовал, получился легкий ппц...
Не ожидал таких сложностей, но отступать уже было поздно.
Правда Сматьего# делает тоже самое за несколько строчек. Но я никак не смог привыкнуть к коду шарпа, не ложится и все.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Создать документ Word в С++
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали тему (0):
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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