March 21, 2012

House15 House15
Lab Rat
41 posts

[Решено]QAxObject чтение файлов

 

Здравсвуйте, уважаемые форумчане.

Есть проблема – точно не представляю как прочесть файл разрешения .doc, .docx с помощью QAxObject.
Сразу оговорюсь – много лазил в сети и даже писал на этот же форум в англоязычный раздел. писал на этот же форум в англоязычный раздел [qt-project.org]

Про открытие и вставку текста в файл я примерно понял – выше это подробно описано. Однако процесс чтения текста (желательно без разметки) остаётся тайной, покрытой мраком. Документация, сгенерированная тем же QAxObject тоже не прояснила ситуацию.

Помогите, пожалуйста.

3 replies

March 21, 2012

Skyrim Skyrim
Lab Rat
43 posts

Привет.
Уже наверно догадался после англо-форума, что все дело тут в Visual Basic.
methods, properties, events все оттуда. если чего нужно сделать с текстом, файлом или самим Вордом почитай справку именно по Visual Basic.
Итак чтение.
как мне кажется (может ошибочно) самый простой способ чтение по словам:
читать будем в QTextEdit

  1. QAxObject *docA = word->querySubObject("ActiveDocument"); //в продолжение анго-поста
  2. QAxObject *words  = docA->querySubObject("Words");
  3. QString textResult; //будущий результат
  4. int countWord = words->dynamicCall("Count()").toInt(); //кол-во слов в тексте
  5. //на самом деле он обманывает, считает зараза с пробелами :(
  6. for (int a = 1; a <= countWord; a++){
  7.     textResult.append(words->querySubObject("Item(int)", a)->dynamicCall("Text()").toString());
  8. }
  9. ui->textEdit->setText(textResult);

В помощь посоветовал порекомендовал бы книгу В.Корнякова “Программирование документов и приложений MS Office в Delphi”. для с++ похожего не находил.

March 22, 2012

House15 House15
Lab Rat
41 posts

Так, вроде работает. Осталась одна загвоздка. При таком чтении файла, конец строки обозначается странным символом. Я не знаю как указать программе на конец строки.

Задача следующая:

  1.  for (int a = 1; a <= countWord; a++)
  2.  textResult.append(words->querySubObject("Item(int)", a)->dynamicCall("Text()").toString());
  3.  
  4.  QStringList testList = textResult.split("\n");

То есть я хочу разделить получившуюся строку на элементы массива, но символне распознается. Можно как-то определить конец строки средствами Visual Basic? Или как обозначить этот символ, чтобы Qt могла его воспринять?

March 22, 2012

House15 House15
Lab Rat
41 posts

Нашёл! Всем на будущее: символ конца строки ( или, как он называется в word “разрыв строки”) это “\v”. Просто ориентируемся на него, вместо “\n”.

Всё, проблема решена, топик можно закрывать. Всем большое спасибо! =)

 
  ‹‹ QThread. Как вывести поток из состояния блокировки?      QTableView ››

You must log in to post a reply. Not a member yet? Register here!