⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unitfrmmain.~pas

📁 Ole编程
💻 ~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 + -