📄 unit1.~pas
字号:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, DB, Grids, DBGrids, DBTables, Excel2000, OleServer,Printers,
Excel97;
type
TForm1 = class(TForm)
Button1: TButton;
ExcelApplication1: TExcelApplication;
ExcelWorksheet1: TExcelWorksheet;
ExcelWorkbook1: TExcelWorkbook;
Button2: TButton;
StringGrid1: TStringGrid;
Button3: TButton;
Button4: TButton;
GroupBox1: TGroupBox;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
Edit5: TEdit;
OpenDialog1: TOpenDialog;
Edit6: TEdit;
Edit7: TEdit;
Edit8: TEdit;
Edit9: TEdit;
Edit10: TEdit;
Button5: TButton;
Button6: TButton;
GroupBox2: TGroupBox;
Edit11: TEdit;
Label1: TLabel;
Label2: TLabel;
Edit12: TEdit;
GroupBox3: TGroupBox;
Edit13: TEdit;
Label3: TLabel;
Label4: TLabel;
Edit14: TEdit;
procedure Button2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Button6Click(Sender: TObject);
procedure Edit11KeyPress(Sender: TObject; var Key: Char);
procedure Edit12KeyPress(Sender: TObject; var Key: Char);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
// global variants
postno,offsets_post,startx_post,starty_post:integer;
startx_addr,starty_addr:integer;
startx_name,starty_name:integer;
startx_name2,starty_name2:integer;
x_securityno,y_securityno:integer;
x_securitycontractno,y_securitycontractno:integer;
x_securitytype,y_securitytype:integer;
x_moneydate,y_moneydate:integer;
x_moneyvalue,y_moneyvalue:integer;
x_moneystyle,y_moneystyle:integer;
x_printdate,y_printdate:integer;
implementation
uses ComObj,unit2;
{$R *.dfm}
//根据字符串,拆分字符串,相当于vb中的split函数
function SplitString(const Source,ch:string):TStringList;
var
temp:String;
i:Integer;
begin
Result:=TStringList.Create;
//如果是空自符串则返回空列表
if Source=''
then exit;
temp:=Source;
i:=pos(ch,Source);
while i<>0 do
begin
Result.add(copy(temp,0,i-1));
Delete(temp,1,i);
i:=pos(ch,temp);
end;
Result.add(temp);
end;
procedure TForm1.Button2Click(Sender: TObject);
var i,j:integer;
begin
opendialog1.InitialDir:=ExtractFileDir(paramstr(0));//文件的打存放初始路径
opendialog1.Execute;
Try
ExcelApplication1.Connect;//EXCEL应用程序
Except
MessageDlg('Excel may not be installed',mtError, [mbOk], 0);
Abort;
End;
ExcelApplication1.Visible[0]:=True;
ExcelApplication1.Caption:='Excel Application';
try
excelapplication1.Workbooks.Open(opendialog1.FileName,
null,null,null,null,null,null,null,null,null,null,null,null,0);//打开指定的EXCEL 文件
except
begin
ExcelApplication1.Disconnect;//出现异常情况时关闭
ExcelApplication1.Quit;showmessage('请选择EXCEL电子表格!');
exit;
end;
end;
ExcelWorkbook1.ConnectTo(ExcelApplication1.Workbooks[1]);//ExcelWorkbook1与Eexcelapplication1建立连接
ExcelWorksheet1.ConnectTo(ExcelWorkbook1.Worksheets[1] as _Worksheet);//Excelworksheet1与Excelworkbook1建立连接
//开始从EXCEL中取数,放到stringgrid1中,取完数后关闭EXCEL
for i:=1 to 1000000 do//最大取值1000
for j:=1 to 11 do
begin
if trim(excelworksheet1.cells.item[i+1,1])<>'' then
begin
stringgrid1.rowCount:=i+1;
stringgrid1.Cells[j,i]:=ExcelWorksheet1.Cells.Item[i+1,j];
end
else
begin
ExcelApplication1.Disconnect;
ExcelApplication1.Quit;
exit;
end;
//将第一条数据赋给编辑框
edit2.text:=stringgrid1.Cells[1,2];
edit1.text:=stringgrid1.Cells[2,2];
edit3.text:=stringgrid1.Cells[3,2];
edit4.text:=stringgrid1.Cells[4,2];
edit5.text:=stringgrid1.Cells[5,2];
edit6.text:=stringgrid1.Cells[6,2];
edit7.text:=stringgrid1.Cells[7,2];
edit8.text:=stringgrid1.Cells[8,2];
edit9.text:=stringgrid1.Cells[9,2];
edit10.text:=stringgrid1.Cells[10,2];
button5.Enabled:=true;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var x:integer;
begin
x:=stringgrid1.row+1;
if x<> stringgrid1.RowCount then
begin
stringgrid1.row:=stringgrid1.row+1;
//将下一条数据赋给编辑框
edit2.text:=stringgrid1.Cells[1,x];
edit1.text:=stringgrid1.Cells[2,x];
edit3.text:=stringgrid1.Cells[3,x];
edit4.text:=stringgrid1.Cells[4,x];
edit5.text:=stringgrid1.Cells[5,x];
edit6.text:=stringgrid1.Cells[6,x];
edit7.text:=stringgrid1.Cells[7,x];
edit8.text:=stringgrid1.Cells[8,x];
edit9.text:=stringgrid1.Cells[9,x];
edit10.text:=stringgrid1.Cells[10,x];
exit;
end
else
showmessage('已到最后一条记录!');
end;
procedure TForm1.Button3Click(Sender: TObject);
var x:integer;
begin
x:=stringgrid1.row-1;
if x<>0 then
begin
stringgrid1.row:=stringgrid1.row-1;
//将上一条数据赋给编辑框
edit2.text:=stringgrid1.Cells[1,x];
edit1.text:=stringgrid1.Cells[2,x];
edit3.text:=stringgrid1.Cells[3,x];
edit4.text:=stringgrid1.Cells[4,x];
edit5.text:=stringgrid1.Cells[5,x];
edit6.text:=stringgrid1.Cells[6,x];
edit7.text:=stringgrid1.Cells[7,x];
edit8.text:=stringgrid1.Cells[8,x];
edit9.text:=stringgrid1.Cells[9,x];
edit10.text:=stringgrid1.Cells[10,x];
exit;
end
else
showmessage('已到第一条记录!');
end;
procedure TForm1.Button4Click(Sender: TObject);
var
stringlist:TStringList;
s1,s2,s3,s4,s5,s6,leftspace:string;
i:integer;
begin
Printer.BeginDoc;
// 打印邮编
postno:=strtoint(edit2.Text);
Printer.Canvas.Font.Name := '宋体';
Printer.Canvas.Font.Size := strtoint(edit13.Text);
s1:='';
i:=0;
repeat
s1:=s1+' ';
i:=i+1;
until i>startx_post;
s1:= s1+inttostr((postno div 100000) mod 10)+ ' '+
inttostr((postno div 10000) mod 10)+ ' '+
inttostr((postno div 1000) mod 10)+ ' '+
inttostr((postno div 100) mod 10)+ ' '+
inttostr((postno div 10) mod 10) + ' '+
inttostr(postno mod 10);
Printer.Canvas.TextOut(0,starty_post,s1);
// 打印地址,姓名 1
s1:='';
i:=0;
repeat
s1:=s1+' ';
i:=i+1;
until i>startx_addr;
s1:=s1+edit1.Text ;
Printer.Canvas.TextOut(0,starty_addr,s1);
s1:='';
i:=0;
repeat
s1:=s1+' ';
i:=i+1;
until i>startx_name;
s1:=s1+edit3.Text ;
Printer.Canvas.TextOut(0,starty_name,s1);
s1:=s1+' '+ '(先生/女士 亲启)';
Printer.Canvas.TextOut(0,starty_name,s1);
// 正义区域字体大小
Printer.Canvas.Font.Size := strtoint(edit14.Text);
// 姓名 2
s1:='';
i:=0;
repeat
s1:=s1+' ';
i:=i+1;
until i>startx_name2;
s1:=s1+ edit3.Text;
Printer.Canvas.TextOut(0,starty_name2,s1);
// 保险号
s1:='';
i:=0;
repeat
s1:=s1+' ';
i:=i+1;
until i>x_securityno;
s1:=s1+edit6.Text ;
Printer.Canvas.TextOut(0,y_securityno,s1);
// 保险合同号
s1:='';
i:=0;
repeat
s1:=s1+' ';
i:=i+1;
until i>x_securitycontractno;
s1:=s1+edit5.Text ;
Printer.Canvas.TextOut(0,y_securitycontractno,s1);
// 保险种类
s1:='';
i:=0;
repeat
s1:=s1+' ';
i:=i+1;
until i>x_securitytype;
s1:=s1+edit7.Text ;
Printer.Canvas.TextOut(0,y_securitytype,s1);
// 缴费日期
s1:='';
i:=0;
repeat
s1:=s1+' ';
i:=i+1;
until i>x_moneydate;
s1:=s1+edit9.Text ;
Printer.Canvas.TextOut(0,y_moneydate,s1);
// 交费方式
s1:='';
i:=0;
repeat
s1:=s1+' ';
i:=i+1;
until i>x_moneystyle;
s1:=s1+edit8.Text ;
Printer.Canvas.TextOut(0,y_moneystyle,s1);
// 应交费用
s1:='';
i:=0;
repeat
s1:=s1+' ';
i:=i+1;
until i>x_moneyvalue;
s1:=s1+edit10.Text ;
Printer.Canvas.TextOut(0,y_moneyvalue,s1);
// 打印日期
s1:='';
i:=0;
repeat
s1:=s1+' ';
i:=i+1;
until i>x_printdate;
stringlist:=SplitString(edit4.Text ,'/');
s4:=stringlist[0];
s5:=stringlist[1];
s6:=stringlist[2];
s1:=s1+s6+' ';
s1:=s1+s4+' ';
s1:=s1+s5;
Printer.Canvas.TextOut(0,y_printdate,s1);
Printer.EndDoc;
end;
procedure TForm1.Button5Click(Sender: TObject);
begin
form2.Top:=0;
form2.Left:=(screen.Width-form2.Width) div 2;
Form2.show;
Button4.Enabled:=true;
Button6.Enabled :=true;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
form1.Left:=(screen.Width -form1.Width) div 2;
form1.Top:= (screen.Height -form1.Height ) div 2;
end;
procedure TForm1.Button6Click(Sender: TObject);
var
i,j:integer;
stringlist:TStringList;
s1,s2,s3,s4,s5,s6,leftspace:string;
begin
if (strtoint(edit12.Text)<strtoint(edit11.Text)) then
begin
ShowMessage('起始页和终止页设置有问题!');
exit;
end;
if (strtoint(edit11.Text)<1) then
begin
ShowMessage('起始页至少从第一行开始!');
exit;
end;
if(application.MessageBox('确认要按设置连续打印,请按确认','提示',MB_OKCANCEL)=2) then
exit;
j:= strtoint(edit11.Text)+1;
// 开打
Printer.BeginDoc;
Printer.Canvas.Font.Name := '宋体';
Printer.Canvas.Font.Size := 18;
repeat
stringgrid1.row:=j;
//将下一条数据赋给编辑框
edit2.text:=stringgrid1.Cells[1,j];
edit1.text:=stringgrid1.Cells[2,j];
edit3.text:=stringgrid1.Cells[3,j];
edit4.text:=stringgrid1.Cells[4,j];
edit5.text:=stringgrid1.Cells[5,j];
edit6.text:=stringgrid1.Cells[6,j];
edit7.text:=stringgrid1.Cells[7,j];
edit8.text:=stringgrid1.Cells[8,j];
edit9.text:=stringgrid1.Cells[9,j];
edit10.text:=stringgrid1.Cells[10,j];
j:=j+1;
// 封面区域
Printer.Canvas.Font.Size :=strtoint(edit13.Text );
// 打印邮编
postno:=strtoint(edit2.Text);
s1:='';
i:=0;
repeat
s1:=s1+' ';
i:=i+1;
until i>startx_post;
s1:= s1+inttostr((postno div 100000) mod 10)+ ' '+
inttostr((postno div 10000) mod 10)+ ' '+
inttostr((postno div 1000) mod 10)+ ' '+
inttostr((postno div 100) mod 10)+ ' '+
inttostr((postno div 10) mod 10) + ' '+
inttostr(postno mod 10);
Printer.Canvas.TextOut(0,starty_post,s1);
// 打印地址,姓名 1
s1:='';
i:=0;
repeat
s1:=s1+' ';
i:=i+1;
until i>startx_addr;
s1:=s1+edit1.Text ;
Printer.Canvas.TextOut(0,starty_addr,s1);
s1:='';
i:=0;
repeat
s1:=s1+' ';
i:=i+1;
until i>startx_name;
s1:=s1+edit3.Text ;
Printer.Canvas.TextOut(0,starty_name,s1);
s1:=s1+' '+ '(先生/女士 亲启)';
Printer.Canvas.TextOut(0,starty_name,s1);
// 正文区域
Printer.Canvas.Font.Size :=strtoint(edit14.Text );
// 姓名 2
s1:='';
i:=0;
repeat
s1:=s1+' ';
i:=i+1;
until i>startx_name2;
s1:=s1+ edit3.Text;
Printer.Canvas.TextOut(0,starty_name2,s1);
// 缴费日期
s1:='';
i:=0;
repeat
s1:=s1+' ';
i:=i+1;
until i>x_moneydate;
s1:=s1+edit9.Text ;
Printer.Canvas.TextOut(0,y_moneydate,s1);
// 保险号
s1:='';
i:=0;
repeat
s1:=s1+' ';
i:=i+1;
until i>x_securityno;
s1:=s1+edit6.Text ;
Printer.Canvas.TextOut(0,y_securityno,s1);
// 保险合同号
s1:='';
i:=0;
repeat
s1:=s1+' ';
i:=i+1;
until i>x_securitycontractno;
s1:=s1+edit5.Text ;
Printer.Canvas.TextOut(0,y_securitycontractno,s1);
// 保险种类
s1:='';
i:=0;
repeat
s1:=s1+' ';
i:=i+1;
until i>x_securitytype;
s1:=s1+edit7.Text ;
Printer.Canvas.TextOut(0,y_securitytype,s1);
// 交费方式
s1:='';
i:=0;
repeat
s1:=s1+' ';
i:=i+1;
until i>x_moneystyle;
s1:=s1+edit8.Text ;
Printer.Canvas.TextOut(0,y_moneystyle,s1);
// 应交费用
s1:='';
i:=0;
repeat
s1:=s1+' ';
i:=i+1;
until i>x_moneyvalue;
s1:=s1+edit10.Text ;
Printer.Canvas.TextOut(0,y_moneyvalue,s1);
// 打印日期
s1:='';
i:=0;
repeat
s1:=s1+' ';
i:=i+1;
until i>x_printdate;
stringlist:=SplitString(edit4.Text ,'/');
s4:=stringlist[0];
s5:=stringlist[1];
s6:=stringlist[2];
s1:=s1+s6+' ';
s1:=s1+s4+' ';
s1:=s1+s5;
Printer.Canvas.TextOut(0,y_printdate,s1);
if j<=strtoint(edit12.Text)+1 then
Printer.NewPage;
sleep(100);
until j>strtoint(edit12.Text)+1;
Printer.EndDoc;
end;
procedure TForm1.Edit11KeyPress(Sender: TObject; var Key: Char);
begin
if ((Key>'9') or (key<'0')) and (Key<>#13) then
begin
ShowMessage('请不要输入非数字量');
end;
end;
procedure TForm1.Edit12KeyPress(Sender: TObject; var Key: Char);
begin
if ((Key>'9') or (key<'0')) and (Key<>#13) then
ShowMessage('请不要输入非数字量');
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -