sodon_sodon Ответов: 3

Я хочу прочитать все строки в файле doc с помощью C++


Я хочу прочитать все строки в файле Microsoft Office doc с помощью C++.

Меня не волнует размер шрифта заголовков или что-то еще, я просто хочу прочитать все текстовые строки в файле Microsoft Office doc.

Пожалуйста помочь.

3 Ответов

Рейтинг:
2

E.F. Nijboer

Для этого можно использовать автоматизацию. Взгляните на ссылки:
Автоматизация MS Office OLE с использованием C++[^]

Добавление автоматизации в приложения MFC[^]

Удачи вам!


Рейтинг:
2

Olivier Levrey

Вы проверяли эту статью?
Чтение текста документа непосредственно из файла Microsoft Word[^]

Он написан на языке C#, но его нетрудно перевести на язык C++.


Рейтинг:
2

Member 13865647

О'Кей, так что немного поздно, но вот мое решение:

1) Используйте MSWORD.OLB-файл для генерации оберток для:
_Приложение
_Документ
Документы
Диапазон
Слова

2) закомментировать - &ГТ; #импорт "C:\\Program файлы\корпорация Майкрософт Офис\\Office16\\турниров.OLB" no_namespace , в каждом сгенерированном файле wrapper .h

3) где вы хотите использовать его, например:
MyWordReadingClass.h - файл:

#включить "CApplication.h"
#включить "CDocuments.h"
#включить "CDocument0.h"

.. так далее, те выше, которые были сгенерированы

класс MyWordReadingClass : public CDialogEx {
DECLARE_DYNAMIC(MyWordReadingClass)
общественный:
... остальная часть вашего кода ...
частный:
// Интерфейс приложения Word
CApplication m_iAppInterface;
// Интерфейс документов
CDocuments m_iDocuments;
// Активный интерфейс документа
CDocument0 m_iActiveDocument;
// Содержание документа - диапазон
CRange m_iDocumentRange;
// Класс, представляющий слова
Слова m_oWords;
// Общее количество слов в документе Doc
длинные m_lTotalNumberOfWords;
// краткий текст
std::vector<cstring> m_vText;
};

MyWordReadingClass.cpp - файл:

void MyWordReadingClass::OnBnLoadDoc()
{
CFileDialog fdlgFileChooser(true, _T("*.*"), 0, 4 | 2, _T("файлы Microsoft Word|*.*"));

if (fdlgFileChooser.DoModal() == IDCANCEL)
{
вернуть;
}

if (PathFileExists(fdlgFileChooser.GetPathName()))
{
если (!m_iAppInterface.CreateDispatch(_T("Word.Приложение")))
{
AfxMessageBox(_T("не удается открыть слово"));
вернуть;
}

// Установить видимость, Показать / Скрыть (нет необходимости показывать документ)
m_iAppInterface.put_Visible(ложь);

COleVariant ovTrue((коротко)TRUE);
COleVariant ovFalse((short)FALSE);
COleVariant ovOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);

// Получить Документы
m_iDocuments = m_iAppInterface.get_Documents();

// Открыть документ
m_iActiveDocument = m_iDocuments.Open(COleVariant(fdlgFileChooser.GetPathName()),
ovOptional, ovOptional, ovOptional, ovOptional, ovOptional, ovOptional,
ovOptional, ovOptional, ovOptional, ovOptional, ovOptional, ovOptional,
овоптионал, овоптионал, овоптионал);
m_oWords = m_iActiveDocument.get_Words();
m_lTotalNumberOfWords = m_oWords.get_Count();

Индекс улуна = 1;
а (индекс &ЛТ;= m_lTotalNumberOfWords)
{
CRange oRange = m_oWords.Пункт(индекс);
индекс++;
Однако слово = оранжевый.get_Text();
слово.TrimRight();
m_vText.emplace_back(слово);
}

// m_vText все слова здесь делают какую-то операцию...

COleVariant ovNoPrompt((short)FALSE);
m_iDocuments.Закрыть(ovOptional, ovOptional, ovOptional);
m_iAppInterface.ReleaseDispatch();
}
}

Надеюсь, это поможет :)


Richard MacCutchan

Я ценю ваш ответ, но после 8 лет очень маловероятно, что спрашивающий имеет какой-либо интерес к этому вопросу. Попробуйте поработать над некоторыми новыми и более активными вопросами.