📄 unit3.cpp
字号:
//---------------------------------------------------------------------------
#include <comobj.hpp>
#include <vcl.h>
#pragma hdrstop
#include <utilcls.h>
#include "Unit3.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm3 *Form3;
//---------------------------------------------------------------------------
__fastcall TForm3::TForm3(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm3::Button1Click(TObject *Sender)
{
if(!DBGrid1->DataSource->DataSet->Active) // 数据集没有打开就返回
return;
Variant vWordApp;
Variant vTable;
Variant vCell;
try
{
vWordApp = Variant::CreateObject("Word.Application");
}
catch(...)
{
MessageBox(0, "启动 Word 出错, 可能是没有安装Word.",
"DBGrid2Word", MB_OK | MB_ICONERROR);
vWordApp = Unassigned;
return;
}
// 隐藏Word界面
vWordApp.OlePropertySet("Visible", false);
// 新建一个文档
vWordApp.OlePropertyGet("Documents").OleFunction("Add");
//
Variant vSelect = vWordApp.OlePropertyGet("Selection");
// 设置一下字体,大小
vSelect.OlePropertyGet("Font").OlePropertySet("Size", DBGrid1->Font->Size);
vSelect.OlePropertyGet("Font").OlePropertySet("Name", DBGrid1->Font->Name.c_str());
// 要插入表格的行数
int nRowCount(DBGrid1->DataSource->DataSet->RecordCount + 1);
nRowCount = nRowCount < 2? 2: nRowCount;
// 要插入表格的列数
int nColCount(DBGrid1->Columns->Count);
nColCount = nColCount < 1? 1: nColCount;
// 在Word文档中插入与DBGrid行数列数基本相同的一个表格
vWordApp.OlePropertyGet("ActiveDocument").OlePropertyGet("Tables")
.OleProcedure("Add",
vSelect.OlePropertyGet("Range"),
nRowCount, // 行数
nColCount, // 列数
1, // DefaultTableBehavior:=wdWord9TableBehavior
0); // AutoFitBehavior:=wdAutoFitFixed
// 操作这个表格
vTable = vWordApp.OlePropertyGet("ActiveDocument").
OleFunction("Range").OlePropertyGet("Tables").OleFunction("Item", 1);
// 设置单元格的宽度
for(int i=0; i<nColCount; i++)
{
int nColWidth = DBGrid1->Columns->Items[i]->Width;
vTable.OlePropertyGet("Columns").OleFunction("Item", i + 1)
.OlePropertySet("PreferredWidthType", 3); // wdPreferredWidthPoints
vTable.OlePropertyGet("Columns").OleFunction("Item", i + 1)
.OlePropertySet("PreferredWidth", nColWidth);
}
for(int j=0; j<DBGrid1->Columns->Count; j++)
{
vCell = vTable.OleFunction("Cell", 1, j + 1);
vCell.OlePropertySet("Range", DBGrid1->Columns->Items[j]->FieldName.c_str());
// 列名单元格背景颜色 // wdColorGray125
vCell.OlePropertyGet("Shading")
.OlePropertySet("BackgroundPatternColor", 14737632);
}
// 将DBGrid中的数据写入Word表格
DBGrid1->DataSource->DataSet->First();
for(int i=0; i<nRowCount; i++)
{
// 63 63 72 75 6E 2E 63 6F 6D
for(int j=0; j<DBGrid1->Columns->Count; j++)
{
vCell = vTable.OleFunction("Cell", i + 2, j + 1);
vCell.OlePropertySet("Range",
DBGrid1->DataSource->DataSet->FieldByName(
DBGrid1->Columns->Items[j]->FieldName)->AsString.c_str());
}
DBGrid1->DataSource->DataSet->Next();
}
// 保存Word文档并退出
// vWordApp.OlePropertyGet("ActiveDocument").OleProcedure("SaveAs", strDocFile.c_str());
vWordApp.OlePropertyGet("ActiveDocument").OleProcedure("Close");
Application->ProcessMessages();
vWordApp.OleProcedure("Quit");
Application->ProcessMessages();
vWordApp = Unassigned;
// 工作结束
MessageBox(0, "DBGrid2Word 转换结束!",
"DBGrid2Word", MB_OK | MB_ICONINFORMATION);
}
//---------------------------------------------------------------------------
void __fastcall TForm3::Button2Click(TObject *Sender)
{
Variant vWordApp;
Variant vTable;
Variant vCell;
int number=0;
AnsiString strWordFile=GetCurrentDir() + "\\student.doc";
if(!FileExists(strWordFile))
{
MessageBox(NULL,"文件不存在!","提示",MB_OK);
return;
}
try
{
vWordApp = Variant::CreateObject("Word.Application");
}
catch(...)
{
vWordApp = Unassigned;
MessageBox(NULL, "启动Word出错,可能是没有安装Word.","提示",MB_OK|MB_ICONERROR);
return;
}
// 隐藏Word界面
vWordApp.OlePropertySet("Visible", false);
try
{
vWordApp.OlePropertyGet("Documents").OleProcedure("Open", strWordFile.c_str());
vTable = vWordApp.OlePropertyGet("ActiveDocument").OleFunction("Range")
.OlePropertyGet("Tables").OleFunction("Item", 1);
}
catch(...)
{
vWordApp.OleFunction("Quit");
vWordApp = Unassigned;
MessageBox(NULL,"文件被破坏!","提示",MB_OK);
return;
}
int iRowCount=vTable.OlePropertyGet("Rows").OlePropertyGet("Count");
int iColCount=vTable.OlePropertyGet("Columns").OlePropertyGet("Count");
int iFieldCount=ADODataSet1->FieldCount;
if(iColCount!=iFieldCount)
{
vWordApp.OleFunction("Quit");
vWordApp = Unassigned;
MessageBox(NULL,"文件格式不正确!","提示",MB_OK);
return;
}
for(int i=1; i<iRowCount; i++)
{
ADODataSet1->Append();
for(int j=0; j<iColCount; j++)
{
vCell = vTable.OleFunction("Cell", i + 1, j + 1);
//ADODS->Fields->Fields[j]->DataType;
//AnsiString strValue= vCell.OlePropertyGet("Range").OlePropertyGet("Text");
//ShowMessage(strValue);
int iTextLength=AnsiString(vCell.OlePropertyGet("Range").OlePropertyGet("Text")).Length();
AnsiString strValue=AnsiString(vCell.OlePropertyGet("Range").OlePropertyGet("Text"));
ADODataSet1->Fields->Fields[j]->Value =Variant(strValue.SubString(0,iTextLength-2));
}
ADODataSet1->Post();
number++;
}
vWordApp.OleFunction("Quit");
vWordApp = Unassigned;
MessageBox(NULL,(AnsiString("WordToAccess共导入记录数:")+IntToStr(number)).c_str(),"WordToAccess",MB_OK);
}
//---------------------------------------------------------------------------
void __fastcall TForm3::Button3Click(TObject *Sender)
{
Close();
}
//---------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -