社区
茶馆
帖子详情
bcb中如何操作word的表格?
gengxp
2002-01-31 07:42:57
怎样用server组件中的wordapplication和worddocument控件来操作word文档中的表格,如一篇带有表格的文档,怎样用代码往这个table中插入一行
高手们帮帮忙吧
...全文
463
16
打赏
收藏
bcb中如何操作word的表格?
怎样用server组件中的wordapplication和worddocument控件来操作word文档中的表格,如一篇带有表格的文档,怎样用代码往这个table中插入一行 高手们帮帮忙吧
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
16 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
gengxp
2002-02-04
打赏
举报
回复
再拉到前面来让各位看看
gengxp
2002-02-02
打赏
举报
回复
宏中的这些语句
Selection.MoveDown Unit:=wdLine, Count:=7
Selection.MoveRight Unit:=wdCharacter, Count:=1
Selection.InsertRows 1
怎样翻译成bcb中的语句?
wyb_45
2002-02-02
打赏
举报
回复
按在安装完BCB,有好多例子。
OLE和word,在例子里搜以一下
ciml
2002-02-02
打赏
举报
回复
我的表格就是已经作好了,只是只有一行,打印的时候动态添加行的!
你熟悉vb不?可以先在vb中做,在word里录制宏,看宏代码,你就明白了!
gengxp
2002-02-02
打赏
举报
回复
再拉到前面来让各位仁兄看看
gengxp
2002-02-01
打赏
举报
回复
to ant4psu(ant) 谢谢你,你的代码我试过了,行的通。
但是向表格中插入一行,bcb中怎么写
gengxp
2002-02-01
打赏
举报
回复
再拉到前面来让各位仁兄看看
gengxp
2002-02-01
打赏
举报
回复
to ciml(镜子) 谢谢
你的方法是在word文档中新增一个表格,我想请教,如果表格在文档中已经画好,运行时我打开这个表格然后动态添加几行到这个表格指定行的后面,怎么做?
ciml
2002-02-01
打赏
举报
回复
我开发的项目中的一断代码:
你需要建立一个名字为'装箱单.doc'的word文件放在程序启动路径下
其中只包含一个一行七列的表格用来填字段名:
序号 申请单号 零 件 号 零 件 名 称 数量 责任单位 备 注
表格下方填以下文字:
填报人: 填报时间:当前日期
打印的时候自动把'当前日期'替换为打印日期
wdDoc,wdApp是从server面板上放上去的,
v_qy_cl是一个Query,你自己应该看明白了吧
//调用word打印报表
TDateTime curDate=Date();
AnsiString DateStr;
DateStr=curDate.FormatString("yyyy")+"年"+curDate.FormatString("mm")+"月"+curDate.FormatString("dd")+"日";
TVariant FileName=SysData->AppPath+"装箱单.doc";//文件名必须加上路径,否则会出错!
OleVariant ItemIndex=1;
wdApp->Connect();
wdApp->Visible=true;
wdApp->Documents->Open(&FileName);
wdDoc->ConnectTo(wdApp->Documents->Item(ItemIndex));
//替换其中的填报日前为当前系统日期
TVariant RepPara=wdReplaceAll;
TVariant EmptyPara=EmptyParam;
wdApp->Selection->Find->Text=WideString("当前日期").c_bstr();
wdApp->Selection->Find->Replacement->Text=WideString(DateStr).c_bstr();
wdApp->Selection->Find->Execute(&EmptyPara,&EmptyPara,&EmptyPara,&EmptyPara,
&EmptyPara,&EmptyPara,&EmptyPara,&EmptyPara,
&EmptyPara,&EmptyPara,&RepPara,&EmptyPara,
&EmptyPara,&EmptyPara,&EmptyPara);
AnsiString gzdName=SysData->gzdName.SubString(1,SysData->gzdName.Pos(".")-1);
AnsiString clName=SysData->sqd_clName.SubString(1,SysData->sqd_clName.Pos(".")-1);
SysData->v_qy_cl->SQL->Clear();
SysData->v_qy_cl->SQL->Add("select "+clName+".sqdh,"+clName+".clh,"+clName+".name,");
SysData->v_qy_cl->SQL->Add(clName+".cls,"+gzdName+".bjzzc2 from "+clName+","+gzdName);
SysData->v_qy_cl->SQL->Add(" where "+gzdName+".sqdh="+clName+".sqdh");
SysData->v_qy_cl->Open();
unsigned int j=2;
for(int i=1;i<=SysData->v_qy_cl->RecordCount;i++)
{
wdDoc->Tables->Item(1)->Rows->Add();//添加一行
wdDoc->Tables->Item(1)->Cell(j,1)->Range->Text=WideString(IntToStr(i)).c_bstr();
wdDoc->Tables->Item(1)->Cell(j,2)->Range->Text=WideString(SysData->v_qy_cl->FieldByName("sqdh")->AsString).c_bstr();
wdDoc->Tables->Item(1)->Cell(j,3)->Range->Text=WideString(SysData->v_qy_cl->FieldByName("clh")->AsString).c_bstr();
wdDoc->Tables->Item(1)->Cell(j,4)->Range->Text=WideString(SysData->v_qy_cl->FieldByName("name")->AsString).c_bstr();
wdDoc->Tables->Item(1)->Cell(j,5)->Range->Text=WideString(SysData->v_qy_cl->FieldByName("cls")->AsString).c_bstr();
wdDoc->Tables->Item(1)->Cell(j,6)->Range->Text=WideString(SysData->v_qy_cl->FieldByName("bjzzc2")->AsString).c_bstr();
j++;
if((i % 38)==0||i==SysData->v_qy_cl->RecordCount) //已经满一页,打印
{
TVariant start,end;
start=wdDoc->Tables->Item(1)->Rows->Item(2)->Range->Start;
end=wdDoc->Tables->Item(1)->Rows->Item(j-1)->Range->End;
wdDoc->Range(&start,&end)->Bold=false; //内容部分不加粗
wdDoc->PrintOut();
Sleep(3000);
wdDoc->Range(&start,&end)->Rows->Delete(); //删除所有数据行,重新开始
j=2;
}
SysData->v_qy_cl->Next(); //下一记录
}
//退出word
OleVariant SaveChanges = wdDoNotSaveChanges;
OleVariant OriginalFormat = Unassigned;
OleVariant RouteDocument = Unassigned;
wdApp->Quit(SaveChanges, OriginalFormat, RouteDocument);
wdApp->Disconnect();
gengxp
2002-02-01
打赏
举报
回复
怎么又跑到第三页来了
fengqiang
2002-01-31
打赏
举报
回复
要在应用程序中控制Word 97的运行,首先必须在编制自动化客户程序时使其头
文件中包含文件ComObj.hpp,写入#include <ComObj.hpp>。编程工具C++
Builder的开发者把调用Word 97自动化对象的功能大致包装成了几个Ole object
class函数,应用程序设计人员可以很方便地利用它们。
* 设定Ole对象的属性:
OlePropertyGet(propname)
OlePropertySet(propname,value) 其中value是任何可以转换为Variant型的值
* 调用Ole对象的方法:
OleProcedure(OleProcName,[val,...])
OleFunction(OleFuncName,[val,...])
其中val是任何可以转换为Variant型的值
可以通过OleFunction(OleFuncName,[val,...])父对象返回其子对象,句法是:子
对象名=父对象名. OleFunction(OleFuncName,val)。而且可以对此方法组合从
父对象返回其下层对象的对象。
C++ Builder中使用OLE自动化控制Word 97,必须掌握Word 97的自动化对象及
Microsoft Word Visual Basic帮助文件中关于Word的对象方法和属性。Word对
象代表一个Word 的元素,如文档、段落、书签或单个的字符。集合是一个对象,
该对象包含其他数个对象,通常这些对象属于相同的类型,例如,一个集合对象中
可包含文档中的所有书签对象。通过使用属性和方法,可以修改单个的对象,也可
修改整个的对象集合。属性是对象的一个特性或者该对象操作的一个方面。例如
,文档属性包含名称、内容、保存状态,以及是否启用修订。要更改一个对象的属
性,可以修改属性的值。方法是对象可以进行的动作。
代表Word 97应用程序的自动化对象有两个:Word.Application和Word.Basic,通
过Application对象的WordBasic属性可以允许它们之间进行变换赋值。在
C++Builder中通过CreateOleObject("…")就可启动Word 并获得句柄,将其赋给
Variant变量。如有两个Variant型变量V1和V2,WordBasic是Application对象的
属性:
V1=CreateOleObject("Word.Application");
V2=V1.OleFunction("WordBasic")。
以下通过一个简单的例子,具体说明如何在C++ Builder中实现Word 97的自动化
功能,其功能是打开或创建新文档,并向当前活动中发送文字、插入位图和画条直
线等。在C++ Builder 集成开发环境IDE下,建立一项目Project1,其中包含
Form1(其Caption为OLE Automation)的单元文件Unit1.cpp。表单Form1的
OpenDialog1对象的Filter设为Word文档或位图。Unit1.cpp的头文件中必须包含
"ComObj.hpp"。代码如下:
头文件Unit1.h代码为:
#ifndef Unit1H
#define Unit1H
//---------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ComObj.hpp>
#include <Dialogs.hpp>
#include <ExtCtrls.hpp>
//---------------------
class TForm1 : public TForm
{
__published:
// IDE-managed Components
TButton *Button1;
TOpenDialog *OpenDialog1;
TButton *Button2;
TMemo *Memo1;
TBevel *Bevel1;
TButton *Button3;
TLabel *Label1;
TButton *Button5;
TBevel *Bevel2;
TLabel *Label2;
TLabel *Label3;
void __fastcall Button1Click(TObject *Sender);
void __fastcall Button3Click(TObject *Sender);
void __fastcall Button2Click(TObject *Sender);
void __fastcall Button5Click(TObject *Sender);
private:// User declarations
public:// User declarations
Variant
V,Vdocuments,Vdocument1,Vdocument2,Vactive;
/*定义Variant型全局//变量,分别指代Application对象, V的Documents对象,
Vdocuments的Document对象(Vdocument1,Vdocument2)以及V的ActiveDocument对
象*/
int tag; //用于记录Button3被点击的次数
__fastcall TForm1(TComponent* Owner);
Variant __fastcall GetWordObject();//获得Word 97自动化对象函数
void __fastcall Add(int i);// 编辑当前活动文档指定的段落文字的函数
};
//---------------------
extern PACKAGE TForm1 *Form1;
//---------------------
#endif
Unit1.cpp文件代码为:
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#include <ComObj.hpp>
//---------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
tag=1;//令tag的初值为1,其将随Button3的点击次数而递增
}
//---------------------
Variant __fastcall TForm1::GetWordObject()
{
Variant Obj1;
AnsiString AppName="Word.Application" ;
HWND hPrevApp = ::FindWindow(NULL, "Microsoft Word");
if(!hPrevApp)
{
Obj1=CreateOleObject(AppName) ;//Word没启动就启动它返回一自动化对象
}
else
Obj1=GetActiveOleObject(AppName); //否则返回正在运行的实例自动化对象
Obj1.OlePropertySet("Visible",true);
return Obj1;
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
int j;
V=GetWordObject();//获得Word 97自动化对象
Application
Vdocuments=V.OleFunction("Documents"); //通过
Application获取Documents对象
if (OpenDialog1->Execute())
//使用Documents对象的Open方法打开文件,并返回Document对象
Vdocument1=Vdocuments.OleFunction("Open",OpenDialog1->FileName);
j=Vdocument1.OleFunction("ComputeStatistics",2);//计算打开文档的页数
Label1->Caption="文件"+Vdocument1.OlePropertyGet("Name")+"页数是:"+
IntToStr(j);
}
//---------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
int i,j;
i=tag;
Vactive=V.OleFunction("ActiveDocument");//获取
Application的ActiveDocument对象
j=Vactive.OleFunction("ComputeStatistics",4);//计算当前文档的段落数
//的的Paragraphs集合对象增加一段
Vactive.OleFunction("Paragraphs").OleFunction("Add");
i=j+i;// 当前文档被编辑的段落序号
Add(i);//调用编辑当前活动文档指定的段落文字的函数
Memo1->Clear();//清除Memo1的内容
tag=tag+1;
}
//---------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
V=GetWordObject();
Vdocuments=V.OleFunction("");
Vdocument2=Vdocuments.OleFunction("Add");//使用
Documents 对象的Add方法新建文档
Vdocument2.OlePropertySet("Password","12345");//设置新建文档的口令
}
//---------------------
void __fastcall TForm1::Add(int i)
{
Variant V1;
//设置被编辑段的内容、字体大小、颜色及是否斜体
V1=((Vactive.OleFunction("
Paragraphs")).OleFunction("Item",i)).OleFunction("Range");
(V1.OleFunction("Font")).OlePropertySet("Italic",true);
(V1.OleFunction("Font")).OlePropertySet("Size",18);
(V1.OleFunction("Font")).OlePropertySet("ColorIndex",6);
(V1.OleFunction("Font")).OlePropertySet("Size",18);
V1.OlePropertySet("Text",Memo1->Text);
}
//---------------------
void __fastcall TForm1::Button5Click(TObject *Sender)
{
Variant Vshape,Vactive1,Vline;
Vactive1=V.OleFunction("ActiveDocument");
Vshape=Vactive1.OleFunction("Shapes");//获取当前活动文档的Shapes对象
//使用Shapes对象的AddLine方法化直线
Vline=Vshape.OleFunction("AddLine",90,80,400,80);
if (OpenDialog1->Execute())
//使用Shapes对象的AddPicture方法插入指定位图
Vshape.OleFunction("AddPicture",OpenDialog1->FileName,50,50,80,100);
}
此程序在C++ Builder 3中编译通过,运行该应用程序首先必须获得文档,然后才
可以编辑文档。
zhiyuandigital
2002-01-31
打赏
举报
回复
以前的贴子上有啊
以下是转贴:
下面以COM方式来操纵WORD。
//注意:要包含头文件
#include "Word_2k.h"
#include <utilcls.h>
#include <comobj.hpp>
定义:
Variant WordApp,WordDocs,WordDoc;
Variant WordWindows,WordWindow;
Variant WordParas,WordPara;
Variant WordRange;
创建Word对象:
WordApp=CreateOleObject("Word.Application");
WordDocs=WordApp.OlePropertyGet("Documents");
打开Word文档:
WordDoc=WordDocs.OleFunction("Open","c:\\test.doc");
WordApp.OlePropertySet("Visible",true);
显示Word文档的路径名和文件名:
ShowMessage(WordDoc.OlePropertyGet("FullName"));
ShowMessage(WordDoc.OlePropertyGet("Name"));
ShowMessage(WordDoc.OlePropertyGet("Path"));
结束Word程序:
WordApp.OleProcedure("Quit");
另存为其它格式:
WordDoc=WordApp.OlePropertyGet("ActiveDocument");
WordDoc.OleFunction("SaveAs","c:\\test.html",wdFormatHTML);
新建一个文档:
WordDocs.OleProcedure("Add");
关闭文档:
VBA: Document.close(SaveChanges,OriginalFormat,RouteDocument);
SaveChanges:如果文档修改过,这个参数决定是否保存这些变化:
wdSaveChanges
wdDoNotSaveChanges
wdPromptToSave
OriginalFormat:当保存文档时,指定使用的格式
wdOriginalFormat 用它的原始格式保存文档
wdWordDocument 用Word格式保存文档
wdPromptUser 问用户是否想用原始格式保存文档。
RouteDocument:如果置为True,这个参数告诉Word发送文档到下一个接受方
跳转到文档中的指定位置:
显示段落标记:
VBA代码:Application.ActiveDocument.Windows(1).View.ShowParagraphs=true;
WordDoc=WordApp.OlePropertyGet("ActiveDocument");
Variant WordWindows=WordDoc.OlePropertyGet("Windows");
WordWindow=WordWindows.OleFunction("Item",1);//用Item属性返回集合中的对象
Variant WordView=WordWindow.OlePropertyGet("View");
WordView.OlePropertySet("ShowParagraphs",true);
显示全部非打印字符:
VBA代码:Application.ActiveDocument.Windows(1).View.ShowAll=true;
最近使用文件列表:
Application.DisplayRecentFiles,要控制列表中的表项数目,使用RecentFiles.Maxium
设置保存Word使用的缺省文件格式:
Application.DefaultSaveFormat="MsWord6Exp"
读取Word文档转换器:
Variant fcs,fc,lastparagraph;
fcs=WordApp.OlePropertyGet("FileConverters");
int count=fcs.OlePropertyGet("Count");//读取文件转换器的数目
int i;
for(i=1;i<=count;i++)
{
fc=fcs.OleFunction("Item",i);
ListBox1->Items->Add((AnsiString)fc.OlePropertyGet("FormatName"));
}
打印预览:
WordDoc=WordApp.OlePropertyGet("ActiveDocument");
WordDoc.OleProcedure("PrintPreview");
全选:
WordDoc=WordApp.OlePropertyGet("ActiveDocument");
WordDoc.OleProcedure("Select");
如何截获Word文档的New,Open和Close事件?
设置段落字体:使用Range对象
WordDoc=WordApp.OlePropertyGet("ActiveDocument");
WordParas=WordDoc.OlePropertyGet("Paragraphs");
WordPara=WordParas.OleFunction("Item",1);
WordRange=WordPara.OlePropertyGet("Range");
WordRange.OlePropertySet("Bold",true);
WordRange.OlePropertySet("Italic",true);
也可以使用Selection对象:
Variant WordSelection=WordApp.OlePropertyGet("Selection");
Variant WordFont=WordSelection.OlePropertyGet("Font");
WordFont.OlePropertySet("Bold",true);
WordFont.OlePropertySet("Italic",true);
三杯倒
2002-01-31
打赏
举报
回复
学习。
sxychee
2002-01-31
打赏
举报
回复
你可通过OLE控制WORD
ant4psu
2002-01-31
打赏
举报
回复
BTW,这是一个delphi代码改写的,不知道直接能不能用,不过delphi的可以用。
ant4psu
2002-01-31
打赏
举报
回复
void TTZDBTableWord.InsertTableRow( TStringList *list, TFont *font)
{int i;
int tempindex;
int temprow;
FWordDocument->Tables->Add( FWordDocument->Words->Get_Last(), 1, list->Count);
tempindex = FWordDocument->Tables->Get_Count();
temprow := FWordDocument->Tables->Item( tempindex)->Rows->Get_Count();
for( i = 1;i < list->Count; i ++)
{FWordDocument->Tables->Item( tempindex)->Cell( temprow,i)->Range->Get_Font->Set_Size( font->Size);
FWordDocument->Tables->Item( tempindex)->Cell( temprow, i)->Range->Get_Font->Set_Name( font->Name);
FWordDocument->Tables->Item( tempindex)->Cell( temprow, i)->Range->Set_Text( list->Strings[ i - 1]);
}
}
基于
BCB
自动控制
Word
表格
.pdf
基于
BCB
自动控制
Word
表格
.pdf 基于
BCB
自动控制
Word
表格
.pdf
BCB
自动控制
Word
表格
pdf c++ builder
用
BCB
操作
Word
文档
1、使用C++ Builder 6.0 读写
Word
文档
中
的
表格
的内容。 2、不新建
表格
。 3、基于网络上的程序更改,回到网络。 4、包含工程文件和可执行文件
FastReport.v4.7.22for.Delphi.
BCB
.Full.Source
中
文修正企业版
FastReport可以从各种数据源的
表格
、查询程序、数组及数据文件
中
导入数据。 FastReport并不依赖于Borland公司的数据库引擎(BDE)。只要是基于标准Tdataset组件的数据库,都能使用FastReport。 FastReport也可在IB...
FastReport.v4.8.36 for.Delphi.
BCB
.Full.Source
中
文修正版
全网第一家 FastReport.v4.8.36 for.Delphi.
BCB
.Full.Source 最新版 CURRENT VERSION Build: 4.8.36 Date: 11/22/09 http://fast-report.com/en/products/report-for-delphi-fastreport-4-feature-matrix.html ...
FastReport.v4.7.147 for.Delphi.
BCB
.Full.Source
中
文修正企业版
FastReport可以从各种数据源的
表格
、查询程序、数组及数据文件
中
导入数据。 FastReport并不依赖于Borland公司的数据库引擎(BDE)。只要是基于标准Tdataset组件的数据库,都能使用FastReport。 FastReport也可在IB...
茶馆
552
社区成员
20,061
社区内容
发帖
与我相关
我的任务
茶馆
C++ Builder 茶馆
复制链接
扫一扫
分享
社区描述
C++ Builder 茶馆
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章