Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Word
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.09.2010, 14:26   #1
OLEG'arh
Пользователь
 
Аватар для OLEG'arh
 
Регистрация: 23.11.2006
Сообщений: 42
Вопрос после добавления таблицы в конце файла появляются пустые строки

с++ builder 6, Word 2007.

Програмный комплекс с использованием DLL и MDI

в ходе работы программы формируется фордовский файл, в который из БД вставляется инфа.

много текста и в середине табличка.

после добавления таблицы в конце файла появляются пустые строки. количество пустых строк зависит от размера таблицы.
если закоментить таблицу, то всё как надо.

пробовал прям перед сохранением файла добавить строку. результат после этой строки идут пустые строки.

кто - нибудь сталкивался с подобным? в чём может быть причина
OLEG'arh вне форума Ответить с цитированием
Старый 15.09.2010, 10:19   #2
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Причина может быть в способе добавления таблицы из базы данных. Вы таблицу построчно добавляете или как? Нужно смотреть код
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Старый 16.09.2010, 09:29   #3
OLEG'arh
Пользователь
 
Аватар для OLEG'arh
 
Регистрация: 23.11.2006
Сообщений: 42
По умолчанию

модуль X
выложил не всё, только что связанно с таблицами....
Код:
инициализация Word
void __fastcall WordControlSpace::TWordControl::InitWordApp__(bool IsVisible)
{
    WordApp.OlePropertyGet("Options").OlePropertySet("CheckGrammarAsYouType",false);
    WordApp.OlePropertyGet("Options").OlePropertySet("CheckGrammarWithSpelling",false);

    WordApp.OlePropertySet("DisplayAlerts", false);
    WordApp.OlePropertySet("Visible", IsVisible);
    WordDocument    = WordApp.OlePropertyGet("Documents");
    WordDocument.OleProcedure("Add");
    WordDoc         = WordDocument.OleFunction("Item",1);
    Paragraph       = WordDoc.OlePropertyGet("Paragraphs");
}


//---------------------------------------------------------------------------
добавление параграфа
void __fastcall WordControlSpace::TWordControl::ParagraphsAdd(short  ParagraphsCountAdd)
{
    for(int i=0; i<ParagraphsCountAdd; ++i)
        Paragraph.OleProcedure("Add");
    ParagraphCounter__ += ParagraphsCountAdd;
}

//---------------------------------------------------------------------------
создание таблицы
void __fastcall WordControlSpace::TWordControl::MakeTable(int RowCount_, int ColumnCount_, vector<short> &InitColumsWidth, int TableNum)
{
    TBRange_ = Paragraph__.OlePropertyGet("Range");
    Paragraph__.OlePropertySet("Alignment", 1);
    WordDoc.OlePropertyGet("Tables").OleProcedure("Add", TBRange_, RowCount_, ColumnCount_, 1, 1);
    Table_ = WordDoc.OlePropertyGet("Tables").OleFunction("Item", TableNum);
    Table_.OlePropertyGet("Rows").OlePropertySet("Alignment", 1);
    Table_.OleFunction("AutoFitBehavior", AutoFitWindow);

    Variant vVarTable = WordDoc.OlePropertyGet("Tables").OleFunction("Item",TableNum);
    Variant v = vVarTable.OlePropertyGet("Columns");
    for(unsigned i=0; i<InitColumsWidth.size(); ++i)
        v.OleFunction("Item",i+1).OlePropertySet("Width", InitColumsWidth[i]);
}
//--------------------------------------------------------------------------- 
вставка в таблицу
void __fastcall WordControlSpace::TWordControl::InsertValToTable(AnsiString &InsertValue_, int x, int y, int FontSize__, bool isBold)
{
    ParagraphsAdd();
    Table_Cell = Table_.OleFunction("Cell", x, y);
    Table_Cell.OleFunction("Select");

    Variant v = WordApp.OlePropertyGet("Selection").OlePropertyGet("Font");

    v.OlePropertySet("Size", FontSize__);
    v.OlePropertySet("Underline",0);
    if(isBold)v.OlePropertySet("Bold", true);

    Table_Cell.OlePropertyGet("Range").OlePropertySet("Text", InsertValue_.c_str());
}
//---------------------------------------------------------------------------
сохранение
void __fastcall WordControlSpace::TWordControl::SaveWordDocument(AnsiString SaveFileName)
{
    try
    {
        WordDoc.OleProcedure("SaveAs",SaveFileName.c_str());
    }
    __finally
    {
        WordApp.OleProcedure("Quit");
    }
}
OLEG'arh вне форума Ответить с цитированием
Старый 16.09.2010, 09:29   #4
OLEG'arh
Пользователь
 
Аватар для OLEG'arh
 
Регистрация: 23.11.2006
Сообщений: 42
По умолчанию

далее кусочек из dll -ки, в котором создаётся и заполняется таблица
Код:
                vector<short> InitWordColumnWidth;  //в векторе ширина калонок

                InitWordColumnWidth.push_back(20);    
                InitWordColumnWidth.push_back(20);
                InitWordColumnWidth.push_back(150);
                InitWordColumnWidth.push_back(25);
                InitWordColumnWidth.push_back(25);
                InitWordColumnWidth.push_back(130);
                InitWordColumnWidth.push_back(20);
                InitWordColumnWidth.push_back(20);

                WordCnt->MakeTable(TblRowCount_ + 1, 8, InitWordColumnWidth, 2);  // создание таблицы

                WordCnt->InsertValToTable("x1",              1, 1, 8, true);   //заполнение первой строоки (заголовки)
                WordCnt->InsertValToTable("x2",      1, 2, 8, true);
                WordCnt->InsertValToTable("x3",   1, 3, 8, true);
                WordCnt->InsertValToTable("x4",        1, 4, 8, true);
                WordCnt->InsertValToTable("x5 1, 5, 8, true);
                WordCnt->InsertValToTable("x6         1, 6, 8, true);
                WordCnt->InsertValToTable("x7         1, 7, 8, true);
                WordCnt->InsertValToTable("x8         1, 8, 8, true);

                DataSource1->DataSet->First();
                for(int i=0; i<DataSource1->DataSet->RecordCount; ++i)  заполнение данными остальной таблицы
                {
                    WordCnt->InsertValToTable(IntToStr(CounterInsertToTab__).c_str(),   CounterInsertToTab__+1, 1, 8);
                    WordCnt->InsertValToTable(DataSource1->DataSet->FieldByName("NS")->AsString,    CounterInsertToTab__+1, 2, 8);
                    WordCnt->InsertValToTable(DataSource1->DataSet->FieldByName("FIO")->AsString+" "+
                        DataSource1->DataSet->FieldByName("IMA")->AsString+" "+
                        DataSource1->DataSet->FieldByName("OTCH")->AsString,   CounterInsertToTab__+1, 3, 8);
                    WordCnt->InsertValToTable(DataSource1->DataSet->FieldByName("ISTI")->AsString,  CounterInsertToTab__+1, 4, 8);
                    WordCnt->InsertValToTable(DataSource1->DataSet->FieldByName("DATN")->AsString+"-"+
                            DataSource1->DataSet->FieldByName("DATO")->AsString,   CounterInsertToTab__+1, 5, 8);
                    WordCnt->InsertValToTable(DataSource1->DataSet->FieldByName("KOTD")->AsString,  CounterInsertToTab__+1, 6, 8);
                    WordCnt->InsertValToTable(DataSource1->DataSet->FieldByName("MKBX")->AsString,  CounterInsertToTab__+1, 7, 8);
                    WordCnt->InsertValToTable(DataSource1->DataSet->FieldByName("KUSL")->AsString,  CounterInsertToTab__+1, 8, 8);
                    DataSource1->DataSet->Next();
                    ProgressBar1->StepBy(1);
                    ++CounterInsertToTab__;
                }
                WordCnt->PParagraphCounter__  += (TblRowCount_+1);
                //PParagraphCounter__  - так понимаю свойство изменяющее переменную ParagraphCounter__ в модуле Х.  собственно ParagraphCounter__ отвечает за общее кол. строк в ворд - документе

Последний раз редактировалось OLEG'arh; 16.09.2010 в 09:36.
OLEG'arh вне форума Ответить с цитированием
Старый 17.09.2010, 16:11   #5
viter.alex
Балуюсь кодами
Участник клуба
 
Аватар для viter.alex
 
Регистрация: 09.01.2009
Сообщений: 1,837
По умолчанию

Цитата:
Сообщение от OLEG'arh Посмотреть сообщение
вставка в таблицу
Код:
void __fastcall WordControlSpace::TWordControl::InsertValToTable(AnsiString &InsertValue_, int x, int y, int FontSize__, bool isBold)
{
    ParagraphsAdd();
Зачем добавлять абзац?
Лучше день потерять — потом за пять минут долететь!©
viter.alex вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Знак переноса строки в конце строки. Kalika Microsoft Office Access 2 12.09.2010 11:27
Знак в конце строки таблицы VistaSV30 Microsoft Office Word 1 02.02.2010 21:29
DBGrid не отображает данные после добавления k0ks67 БД в Delphi 4 10.12.2009 21:17
после добавления ярлыка программа не работает Kos123 Помощь студентам 18 30.09.2009 14:27
Сумма по полям в конце таблицы Subscriber SQL, базы данных 8 05.03.2009 13:49