Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Генератор писем по шаблону(Word+Excel))

358
13 марта 2003 года
moonmike
423 / / 18.10.2002
Пришлось тут написать програмку, которая по данным из Excel'евского файла генерит кучу однотипных Вордовских документов. Сие было проделано. Конечно надо еще дорабатывать, отлавливать исключения и т.д, но надо было срочно получить результат, что и было сделано. Да и код не документирован. Но он достаточно мал чтобы разобраться что к чему. Принцип работы поймете из сурцов, которые и прилагаю. Вместе с файлом Экселя с данными и шаблоном в Ворде.
Для начала работы надо задать Файл БД(Эксель) и файл шаблона (Word) а потом нажать старт=))

Надеюсь кому-нить поможет и пригодится.
6.1K
14 января 2005 года
Alekc
38 / / 23.12.2004
Цитата:
Originally posted by moonmike
Пришлось тут написать програмку, которая по данным из Excel'евского файла генерит кучу однотипных Вордовских документов...



Спасибо автору за его нелегкий труд - просто и хорошо!
Сам скачал и воспользовался его кодом.
Однако на форуме замечал у некоторых проблемы с запуском в 6-м Билдере.
С позволения автора хочу добавить.
Для успешной компиляции в 6-м мне пришлось изменить(добавить) несколько строк:
в заголовках
.cpp
#pragma link "Word_2K_SRVR"

.h
#include[list=1]
#include "Word_2K_SRVR.h"
#include[list=1]

Также в коде стоит изменить тип переменной - имя файла:
WD.OlePropertyGet("Documents").OleProcedure("Open",StringToOleStr(OpenDialog1->FileName));

Не сочтите за умничество :))

52K
29 июля 2009 года
osmodius
2 / / 28.07.2009
Ни хочу никого обидеть но вот немного подредактированный вариант.
Я вообще пока не понимаю как это работает , но вроде идет.

C++Builder 6

"Word_2K_SRVR"- для 2000
"Word_97_SRVR"- для 97

Еще раз извиняюсь и прикрепляю файл

//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
#include "ComObj.hpp"
#include "utilcls.h"
#include <word_2k.h>
#pragma link "Word_2K_SRVR"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
Variant XL, WD, WDoc, WS;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
List = new TStringList();
}
//---------------------------------------------------------------------------

void __fastcall TForm1::N2Click(TObject *Sender)
{
Application->Terminate();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::N3Click(TObject *Sender)
{
if(OpenDialog1->Execute())
{
try
{
WD = Variant::GetActiveObject("Word.Application");
}
catch(...)
{
WD = Variant::CreateObject("Word.Application");
}
WD.OlePropertySet("Visible", True);
WD.OlePropertyGet("Documents").OleProcedure("Open" ,StringToOleStr(OpenDialog1->FileName));
WDoc = WD.OlePropertyGet("ActiveDocument");
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::N4Click(TObject *Sender)
{
if(OpenDialog2->Execute())
{
List->Clear();
if(!XL.IsNull())
{
XL.Clear();
}
try
{
XL = Variant::GetActiveObject("Excel.Application");
}
catch(...)
{
XL = Variant::CreateObject("Excel.Application");
}
XL.OlePropertySet("Visible", True);
XL.OlePropertyGet("Workbooks").OleProcedure("Open" ,StringToOleStr(OpenDialog2->FileName));
WS = XL.OlePropertyGet("ActiveWorkbook").OlePropertyGet("WorkSheets",1);
int Count = 1;
AnsiString It = WS.OlePropertyGet("Cells",1,Count).OlePropertyGet("Value");
while(It != "")
{
List->Add((AnsiString)WS.OlePropertyGet("Cells",1,Count).OlePropertyGet("Value"));
Count++;
It = WS.OlePropertyGet("Cells",1,Count).OlePropertyGet("Value");
}
XLRowCount = 2;
XLPos = 2;
It = WS.OlePropertyGet("Cells",XLRowCount,1).OlePropertyGet("Value");
while(It != "")
{
XLRowCount++;
It = WS.OlePropertyGet("Cells",XLRowCount,1).OlePropertyGet("Value");
}
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormDestroy(TObject *Sender)
{
List->Clear();
delete List;
if(!XL.IsEmpty())
XL.Clear();
if(!WD.IsEmpty())
{
WDoc.OleFunction("Close");
WDoc.Clear();
if(!WD.OlePropertyGet("Documents").OlePropertyGet("Count"))
{
WD.OleFunction("Quit");
}
WD.Clear();
}
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Start1Click(TObject *Sender)
{
if((OpenDialog1->FileName == "") & (OpenDialog2->FileName == ""))
{
Application->MessageBox("&#206;&#242;&#241;&#243;&#242;&#241;&#242;&#226;&#243;&#254;&#242; &#241;&#226;&#229;&#228;&#229;&#237;&#232;&#255; &#238; &#244;&#224;&#233;&#235;&#229; &#248;&#224;&#225;&#235;&#238;&#237;&#224; &#232;&#235;&#232; &#193;&#196;","&#206;&#248;&#232;&#225;&#234;&#224;", MB_OK|MB_ICONWARNING);
}
else
{
while(XLPos < XLRowCount)
{
AnsiString First, Replace;
int i = 0;
while(i < List->Count)
{
First = List->Strings;
Replace = WS.OlePropertyGet("Cells",XLPos,i + 1).OlePropertyGet("Value");
ReplaceWord(First,Replace);
i++;
}
//&#210;&#229;&#239;&#229;&#240;&#252; &#237;&#224;&#228;&#238; &#228;&#238;&#234;&#243;&#236;&#229;&#237;&#242; &#241;&#238;&#245;&#240;&#224;&#237;&#232;&#242;&#252; &#239;&#238;&#228; &#232;&#236;&#229;&#237;&#229;&#236; &#232; &#231;&#224;&#227;&#240;&#243;&#231;&#232;&#242;&#252; &#231;&#224;&#237;&#238;&#226;&#238; &#248;&#224;&#225;&#235;&#238;&#237;
AnsiString St = OpenDialog1->FileName.SubString(1,OpenDialog1->FileName.Length()-4);
AnsiString End =OpenDialog1->FileName.SubString(OpenDialog1->FileName.Length()-3,4);
AnsiString ThisName = St + " " + WS.OlePropertyGet("Cells",XLPos,1).OlePropertyGet("Value") + End;
WDoc.OleProcedure("SaveAs",ThisName.c_str());
WDoc.OleFunction("Close");
WDoc.Clear();
WD.OlePropertyGet("Documents").OleProcedure("Open" ,StringToOleStr(OpenDialog1->FileName));
WDoc = WD.OlePropertyGet("ActiveDocument");
XLPos++;
}
}
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ReplaceWord(AnsiString & First, AnsiString & Replace)
{
Variant ReplaceType = wdReplaceAll;
WDoc.OleFunction("Range").OlePropertyGet("Find").OleProcedure("Execute", StringToOleStr(First), EmptyParam, EmptyParam,
EmptyParam, EmptyParam, EmptyParam, EmptyParam,
EmptyParam, EmptyParam, StringToOleStr(Replace), ReplaceType);
}
52K
29 июля 2009 года
osmodius
2 / / 28.07.2009
да и верхущка H файла

//---------------------------------------------------------------------------

#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <Dialogs.hpp>
#include <ExtCtrls.hpp>
#include <Menus.hpp>
#include <OleCtnrs.hpp>
#include "Word_2K_SRVR.h"

Знаете кого-то, кто может ответить? Поделитесь с ним ссылкой.

Ваш ответ

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог