Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Таблицы в Word, Добавить в таблицу данные 
:(
    Опции темы
Usper
Дата 10.7.2012, 15:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 325
Регистрация: 13.4.2007

Репутация: 15
Всего: 15



Честно говоря, не вижу никакого смысла так делать. Всё равно нужно с собой таскать шаблон. И не проще ли в нужные ячейки вставить нужный текст, вместо поиска-замены?


--------------------
На посохе волшебном нехилый набалдашник, большой такой, огромный, нехилый набалдашник.
PM MAIL   Вверх
artsb
Дата 10.7.2012, 15:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 39
Всего: 64



Usper, всё зависит от конкретной задачи. Я не спорю, что можно пробежаться по ячейкам и вставить нужные значения. Но мой способ хорош в том смысле, что можно изменить шаблон и не придётся пересобирать программу заного только из-за того, что столбцов стало на один меньше или больше. В общем, и там и там есть свои плюсы. Пускай ТС сам решает как ему будет удобнее и легче.


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
Usper
Дата 10.7.2012, 15:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 325
Регистрация: 13.4.2007

Репутация: 15
Всего: 15



Хм... действительно это плюс.
Но случайно наткнулся на ещё один минус таскания за собой шаблона, если этот шаблон уже открыт (случайно или намеренно) в момент попытки открытия его программой через OLE, ворд выдаст сообщение, что может его открыть только для чтения. Если пользователь не слишком опытен, это может его сбить с толку.


--------------------
На посохе волшебном нехилый набалдашник, большой такой, огромный, нехилый набалдашник.
PM MAIL   Вверх
artsb
Дата 10.7.2012, 15:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 39
Всего: 64



Этот минус устраняется так:
расширение меняется с DOC на DOT.
Теперь при создании документа на основе шаблона, создаётся новый документ, который никак не связан с шаблоном.


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
StamSvam
Дата 10.7.2012, 18:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 8.7.2012

Репутация: нет
Всего: нет



Возможно я туплю..Но выдает две ошибки. Для каждой из строчек

Код

vSelection.OleProcedure("MoveStart", Word_xp::WdUnits::wdCharacter, 1); // wdCharacter = 1
vSelection.OleProcedure("MoveEnd", Word_xp::WdUnits::wdCharacter, -1);


Выдает такую ошибку при компиляции:

"Qualifaer 'WdUnits' is not a class or namespace name.
Function call missing )"



Вот мой код функции.
Код


#include <stdio.h>
#include <iostream.h>
#include <conio.h>
#include <windows.h>
#include <vcl.h>
#include <utilcls.h>  
//#include <sysvari.h>
#include <ComObj.hpp>
#include "word_xp.h"
#pragma hdrstop

#include "Progection.h"

#pragma package(smart_init)
#pragma link "Word_2K_SRVR"
#pragma resource "*.dfm"


void exportToWord()
{
    Variant vApp, vDoc, vDocs, vParagraphs;
    Variant vParagraph, vRange, vTables, vTable;
    Variant vBookmarks,vBookmark,vSelection;
   
    try
    {
        vApp = CreateOleObject("Word.Application");
    }
    catch(...)
    {
        Application->MessageBoxA("Не могу запустить сервер MS Word. Отчёт не может быть экспортирован.","Ошибка",MB_ICONERROR);
        return;
    }
    vApp.OPS("Visible", false); //прячем создаваемый документ (так быстрее работает)
    vDoc = vApp.OPG("Documents");
    vDoc.OleProcedure("Open","d:\\Temp.doc");
    
    vBookmarks = vDoc.OlePropertyGet("Bookmarks");
    vBookmark = vBookmarks.OleFunction("Item", WideString("myBookmark")); // второй параметр - имя закладки
    vBookmark.OleProcedure("Select");
    vSelection = vApp.OlePropertyGet("Selection");
    vSelection.OleProcedure("MoveStart", Word_xp::WdUnits::wdCharacter, 1); // wdCharacter = 1
    vSelection.OleProcedure("MoveEnd", Word_xp::WdUnits::wdCharacter, -1);
    vSelection.OlePropertySet("Text", WideString("myValue"));

  vRange = vDoc.OleFunction("Range", 0, 0);
  vRange.OleProcedure(_T("Select"));
}


В чем я накосячил?

Полазил по инетам и не нашел ни одного упоминания о параметрах "MoveStart" и "MoveEnd". Для чего они? И что передает параметр Word_xp::WdUnits::wdCharacter? Для чего он нужен?

Это сообщение отредактировал(а) StamSvam - 10.7.2012, 19:20
PM MAIL   Вверх
artsb
Дата 10.7.2012, 20:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 39
Всего: 64



Цитата(StamSvam @  10.7.2012,  18:31 Найти цитируемый пост)

В чем я накосячил?

Да, вроде бы, ни в чём. У меня enum WdUnits описан в word_xp.h и выглядит так:
Код

enum class WdUnits
{
  wdCharacter = 1, 
  wdWord = 2, 
  wdSentence = 3, 
  wdParagraph = 4, 
  wdLine = 5, 
  wdStory = 6, 
  wdScreen = 7, 
  wdSection = 8, 
  wdColumn = 9, 
  wdRow = 10, 
  wdWindow = 11, 
  wdCell = 12, 
  wdCharacterFormatting = 13, 
  wdParagraphFormatting = 14, 
  wdTable = 15, 
  wdItem = 16
};

Ну раз у вас ругается, то напишите просто 1:
Код

vSelection.OleProcedure("MoveStart", 1, 1);
vSelection.OleProcedure("MoveEnd", 1, -1);

А потом разберётесь почему не находит enum.

И если вы используете шаблоны, то открывайте документ как шаблон:
Код

varActiveDocument = varWordDocuments.OleFunction("Add", WideString(TemplateFileName)); // второй параметр - путь до файла *.dot



--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
KaZepKa
Дата 10.7.2012, 21:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 37
Регистрация: 29.10.2011

Репутация: нет
Всего: нет



Можно пройтись чисто по файлу, зная формат, например, в rtf это не сложно.
PM MAIL   Вверх
StamSvam
Дата 10.7.2012, 21:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 8.7.2012

Репутация: нет
Всего: нет



Цитата

И если вы используете шаблоны, то открывайте документ как шаблон:

код C++ Builder
varActiveDocument = varWordDocuments.OleFunction("Add", WideString(TemplateFileName)); // второй параметр - путь до файла *.dot


если я правильно понял, то я создам новый документ, содержащий таблицу из начального файла? Щас протестю

Добавлено через 9 минут и 32 секунды
теперь он (компилятор) не ругается. Зато при вызове функции выводит сообщение 

Project *.exe raised exeption class EOleSysError with message 'Неизвестное имя'. Process stoped.

и показывает строчку

Код

vBookmarks = vDoc.OlePropertyGet("Bookmarks");


Вот это жесть..вообще не понимаю, что ему все время не нравится

вот измененный код:

Код

void exportToWord()
{
    Variant vApp, vDoc, vDocs, vParagraphs;
    Variant vParagraph, vRange, vTables, vTable;
    Variant vBookmarks,vBookmark,vSelection;

    try
    {
        vApp = CreateOleObject("Word.Application");
    }
    catch(...)
    {
        Application->MessageBoxA("Не могу запустить сервер MS Word. Отчёт не может быть экспортирован.","Ошибка",MB_ICONERROR);
        return;
    }
    vApp.OPS("Visible", false); //прячем создаваемый документ (так быстрее работает)
    vDoc = vApp.OPG("Documents");
    vDoc.OleFunction("Add", WideString("d:\\Temp.doc"));
vBookmarks = vDoc.OlePropertyGet("Bookmarks");
vBookmark = vBookmarks.OleFunction("Item", WideString("myB")); // второй параметр - имя закладки
vBookmark.OleProcedure("Select");
vSelection = vApp.OlePropertyGet("Selection");
vSelection.OleProcedure("MoveStart", 1, 1);
vSelection.OleProcedure("MoveEnd", 1, -1);
vSelection.OlePropertySet("Text", WideString("myValue"));
vRange = vDoc.OleFunction("Range", 0, 0);
vRange.OleProcedure(_T("Select"));
vApp.OleProcedure("Quit");

}


PM MAIL   Вверх
StamSvam
Дата 10.7.2012, 22:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 20
Регистрация: 8.7.2012

Репутация: нет
Всего: нет



ВСЕ!! РАЗОБРАЛСЯ! Работает!! Ура! 
Спасибо, что пронянчились со мной все это время!

Фрагмент с исправлениями:

Код

vDocs = vApp.OPG("Documents");
vDocs.OleFunction("Add", WideString("d:\\Temp.doc"));

vDoc=vDocs.OleFunction("Item",1);
vDoc.OleProcedure("Activate");

vBookmarks = vDoc.OlePropertyGet("Bookmarks");


Господа, нереально выручили! 

Извините и не сочтите за наглость, но посоветуйте, где мне глянуть инфу по распечатыванию файла? Думаю, там сам разбирусь.
PM MAIL   Вверх
artsb
Дата 11.7.2012, 08:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2280
Регистрация: 17.7.2007
Где: центр Вселенной

Репутация: 39
Всего: 64



Цитата(StamSvam @  10.7.2012,  22:03 Найти цитируемый пост)
Извините и не сочтите за наглость, но посоветуйте, где мне глянуть инфу по распечатыванию файла? Думаю, там сам разбирусь. 

Печать документа.
Дополнительная информация: раз и два.


--------------------
Чем отличается умный человек от мудрого?
Умный - выпутается из любой ситуации.
Мудрый - просто в неё не попадёт.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0956 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.