📄 unitfrmmain.~pas
字号:
unit UnitfrmMain;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Grids, DBGrids, ComCtrls, ExtCtrls, StdCtrls,UnitglbType,UnitfrmPara,
DB, DBTables,Comobj,WordXP, OleServer, ADODB;
type
TfrmMain = class(TForm)
PageControl1: TPageControl;
tbsAppBook: TTabSheet;
tbsPara: TTabSheet;
Panel1: TPanel;
btnOpenFile: TButton;
Panel2: TPanel;
btnAdd: TButton;
btnDel: TButton;
btnMdy: TButton;
opnAppBook: TOpenDialog;
strgPara: TStringGrid;
btnSave: TButton;
edtAppName: TEdit;
Label1: TLabel;
strgApp: TStringGrid;
btnImpot: TButton;
ADOQuery1: TADOQuery;
ADOConnection1: TADOConnection;
procedure FormShow(Sender: TObject);
procedure btnAddClick(Sender: TObject);
procedure btnSaveClick(Sender: TObject);
procedure btnOpenFileClick(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure strgParaSelectCell(Sender: TObject; ACol, ARow: Integer;
var CanSelect: Boolean);
procedure btnMdyClick(Sender: TObject);
procedure PageControl1Change(Sender: TObject);
procedure btnDelClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure btnImpotClick(Sender: TObject);
private
{ Private declarations }
//初始化系统参数
procedure initPara(indx: integer);
//打开参数配置文件,并把读出的参数赋值给appPara全局变量
procedure openParaFile(var appPara: appBook; indx: integer);
//写入配置文件,将全局变量appBook写入到配置文件中
procedure writeParaFile(appPara: appBook);
//用appPara全局变量初始化StringGrid参数列表
procedure refreshParaList(appPara: appBook);
//打开Word文档
procedure openWordFile(fileName: string);
//获取Word文档的内容,要使用appPara结构中的参数,以及WordDoc对象
procedure getWordContent();
//关闭Word文件连接,就是把WordApp置成unasigned
procedure closeWordFile();
//从appPara中删除指定行的参数
procedure delPara(row: integer);
public
{ Public declarations }
end;
var
frmMain: TfrmMain;
WordApp: variant;
WordDoc: variant;
rowIndex: integer; //标帜参数设置的时候选择了第几行。
implementation
{$R *.dfm}
procedure TfrmMain.FormShow(Sender: TObject);
var
i:integer;
cnt:integer;
begin
//初始化参数列表的标题栏
strgPara.Cells[0,0] := '序号';
strgPara.Cells[1,0] := '字段名称';
strgPara.Cells[2,0] := '表格序号';
strgPara.Cells[3,0] := '单元格序号';
strgPara.ColWidths[0] := 30;
//初始化系统参数
initPara(appNo);
//初始化参数列表的stringGrid
refreshParaList(appPara);
//初始化申请书信息标题栏
strgApp.Cells[0,0] := '序号';
strgApp.ColWidths[0] := 30;
cnt := appPara.recordNum;
strgApp.ColCount := cnt+1; //初始化列数
for i:=1 to cnt do
begin
strgApp.Cells[i,0] := appPara.appPara[i].fieldName;
end;
end;
procedure TfrmMain.refreshParaList(appPara: appBook);
var
i: integer;
begin
//初始化标题
edtAppName.Text := appPara.appName;
//用appPara全局变量初始化StringGrid参数列表
strgPara.RowCount := appPara.recordNum+1;
for i:=1 to strgPara.RowCount do
begin
strgPara.Cells[0,i] := inttostr(i);
strgPara.Cells[1,i] := appPara.appPara[i].fieldName;
strgPara.Cells[2,i] := inttostr(appPara.appPara[i].tableNum);
strgPara.Cells[3,i] := inttostr(appPara.appPara[i].cellNum);
end;
end;
procedure TfrmMain.initPara(indx: integer);
begin
//初始化系统参数
if appNo > 0 then
begin
//打开参数文件,将读出的参数值赋值给appPara
openParaFile(appPara,indx-1);
//用appPara的值初始化DBGrid
refreshParaList(appPara);
end;
end;
procedure TfrmMain.openParaFile(var appPara: appBook; indx: integer);
var
FP: file of appBook;
begin
//打开参数配置文件,并把读出的参数赋值给appPara全局变量
assignFile(Fp,'.\config');
reset(Fp);
seek(Fp,indx);
Read(Fp,appPara);
end;
procedure TfrmMain.btnAddClick(Sender: TObject);
var
frmPara: TFrmPara;
begin
frmPara := TFrmPara.Create(self);
frmPara.rowNum := appPara.recordNum +1;
frmPara.opt := 'add';
frmPara.ShowModal;
//用新的参数刷新参数列表
refreshParaList(appPara);
end;
procedure TfrmMain.btnSaveClick(Sender: TObject);
begin
if Application.MessageBox('确定写入配置文件?','提示:',MB_YESNO) = IDYES then
begin
appPara.appName := edtAppName.Text;
writeParaFile(appPara);
end;
end;
procedure TfrmMain.writeParaFile(appPara: appBook);
var
Fp: file of appBook;
begin
assignfile(Fp,'.\config');
reset(fp);
//如果appNo为0,说明是新增的。要把appNo变成最后一个记录
if appNo = 0 then
appNo := Filesize(Fp)
else
appNo := appNo - 1;
//定位并写入记录
seek(fp,appNo);
try
write(Fp,appPara);
finally
closeFile(Fp);
end;
showMessage('写入参数文件成功');
end;
procedure TfrmMain.btnOpenFileClick(Sender: TObject);
begin
opnAppBook := TOpenDialog.Create(self);
opnAppBook.Filter := 'Office Word文档(*.doc)|*.doc';
opnAppBook.Execute;
//打开Word文件
openWordFile(opnAppBook.FileName);
//读出Word文档中的记录
getWordContent();
//读完后将Word连接关闭 (不必每次读完就关闭Word连接)
//closeWordFile();
end;
procedure TfrmMain.openWordFile(fileName: string);
begin
if fileName <> '' then
begin
//首先创建对象,如果出现异常就作出提示
try
WordApp := GetActiveOleObject('Word.Application');
WordApp.Visible := false;
WordDoc := WordApp.Documents.open(fileName);
except
try
WordApp := CreateOleObject('Word.Application');
//WORD程序的执行是否可见,值为False时程序在后台执行
WordApp.Visible := false;
WordDoc := WordApp.Documents.open(fileName);
except
ShowMessage('创建word对象失败!');
Exit;
end;
end;
end;
end;
procedure TfrmMain.FormClose(Sender: TObject; var Action: TCloseAction);
begin
try
closeWordFile();
finally
self.Close;
end;
end;
procedure TfrmMain.getWordContent;
var
i,cnt: integer;
tNum,cNum: integer; //分别为表格序号,单元格序号
result: string;
rowIndex: integer; //stringGrid一共有多少行
begin
//要获得的字段总数
cnt := appPara.recordNum;
rowIndex := strgApp.Row;
strgApp.Cells[0,rowIndex] := inttostr(rowIndex);
for i:=1 to cnt do
begin
tNum := appPara.appPara[i].tableNum;
cNum := appPara.appPara[i].cellNum;
result := WordDoc.Tables.Item(tNum).Range.Cells.Item(cNum).Range.Text;
strgApp.Cells[i,rowIndex] := result;
end;
strgApp.RowCount := rowIndex+2;
strgApp.row := rowIndex+1;
end;
procedure TfrmMain.closeWordFile;
begin
//关闭隐藏的Word文档
WordDoc.close(true);
//结束Word进程
WordApp.Quit();
WordApp := unassigned;
end;
procedure TfrmMain.strgParaSelectCell(Sender: TObject; ACol, ARow: Integer;
var CanSelect: Boolean);
begin
rowIndex := ARow;
end;
procedure TfrmMain.btnMdyClick(Sender: TObject);
var
frmPara: TFrmPara;
begin
frmPara := TFrmPara.Create(self);
frmPara.edtParaName.Text := appPara.appPara[rowIndex].fieldName;
frmPara.edtTableNum.Text := inttostr(appPara.appPara[rowIndex].tableNum);
frmPara.edtCellNum.Text := inttostr(appPara.appPara[rowIndex].cellNum);
frmPara.rowNum := rowIndex;
frmPara.opt := 'mdy';
frmPara.ShowModal;
refreshParaList(appPara);
end;
procedure TfrmMain.PageControl1Change(Sender: TObject);
begin
if pageControl1.ActivePage = tbsAppBook then
showMessage('用户信息界面')
else
refreshParaList(appPara);
end;
procedure TfrmMain.btnDelClick(Sender: TObject);
begin
//从appPara中将指定行的参数删除掉
delPara(rowIndex);
//刷新参数列表
refreshParaList(appPara);
end;
procedure TfrmMain.delPara(row: integer);
var
i,cnt:integer;
begin
//从appPara中删除row指定的行的参数
//算法很简单,就从row开始的下一行以次往他前一个赋值
cnt := appPara.recordNum - 1;
for i:=row to cnt do
begin
appPara.appPara[i] := appPara.appPara[i+1];
end;
//记录数减少一个
appPara.recordNum := cnt;
end;
procedure TfrmMain.FormCreate(Sender: TObject);
begin
self.ADOQuery1.Connection:=self.ADOConnection1;
end;
procedure TfrmMain.btnImpotClick(Sender: TObject);
var
sql:string;
i,flag:integer;
begin
flag := 0;
if strgApp.Row = 1 then
begin
showMessage('请先通过打开申请书按钮导入数据!');
exit;
end;
//Import to database
try
//sql语句
for i:=1 to strgApp.Row - 1 do
begin
sql:='insert into t_woracle_test(name,sex) values('''+strgApp.Cells[1,i]+''''+','''+strgApp.Cells[2,i]+''')';
self.ADOQuery1.SQL.Clear; //先清空
self.ADOQuery1.SQL.Add(sql); //加入要执行的sql语句
self.ADOQuery1.ExecSQL; //执行
end;
flag:=1;
except
ShowMessage('对不起,数据库操作异常,请再次尝试');
exit;
end;
if flag=1 then showMessage('导入数据成功');
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -