Word模板,输出多数据,到多页~ ( 积分: 50 )

  • 主题发起人 主题发起人 zgl198171
  • 开始时间 开始时间
Z

zgl198171

Unregistered / Unconfirmed
GUEST, unregistred user!
各位大哥啊!我今天看了别人的导出到模板的数据库程序!试了一下,可是我要导出多页相同的表格时不行啊,哪位大哥指点一下啊!
程序如下:
var
templateName: OleVariant;
newTemplate: OleVariant;
vSelection: Selection;
vTable: Table;
I,j,pItemIndex,k: Integer;
pCount:Double;
begin
//构造打印模板文件名全路径
templateName := folderName + '工艺模板1.dot';

newTemplate := False;
try
wordApp.Connect();
except
MessageDlg('您的计算机上还未安装Microsoft Office Word97或更高的版本!', mtError, [mbOK], 0);
Abort;
end;

//以指定的模板文件创建新Word文档
aqGY.Open;
pCount:=aqGY.RecordCount/20;
if pCount<1 then
pItemIndex:=1
else
begin
if Trunc(pCount)<pCount then
pItemIndex:=Trunc(pCount)+1
else
pItemIndex:=Trunc(pCount);
//总页数
end;

wordApp.Documents.AddOld(templateName, newTemplate);
wordApp.Caption :=' ';
// vSelection := wordApp.Selection;
//取文档中的第1张表
j:=1;
vTable := wordApp.ActiveDocument.Tables.Item(1);
//pItemIndex
With aqGYdo
begin
i:=0;
First;
While Not Eofdo
begin
vTable.Cell(1, 4).Range.Text := aqTZ.FieldByName('内部图号').AsString;
vTable.Cell(1, 6).Range.Text := aqTZ.FieldByName('客户图号').AsString;
vTable.Cell(1, 8).Range.Text := aqTZ.FieldByName('客户').AsString;
vTable.Cell(2, 4).Range.Text := aqTZ.FieldByName('品名').AsString;
vTable.Cell(2, 6).Range.Text := aqTZ.FieldByName('品名').AsString;
vTable.Cell(2, 8).Range.Text :='共'+inttostr(pItemIndex)+'页';
vTable.Cell(3, 2).Range.Text := aqTZ.FieldByName('材料牌号').AsString;;
vTable.Cell(3, 4).Range.Text := aqTZ.FieldByName('毛坯种类').AsString;;
vTable.Cell(3, 6).Range.Text := aqTZ.FieldByName('成品尺寸').AsString;;
vTable.Cell(3, 8).Range.Text := aqTZ.FieldByName('毛坯可做件数').AsString;
vTable.Cell(3, 10).Range.Text := aqTZ.FieldByName('每件台数').AsString;
vTable.Cell(3, 12).Range.Text := aqTZ.FieldByName('备注').AsString;
vTable.Cell(i+6, 1).Range.Text := Fields[1].AsString;
vTable.Cell(i+6, 2).Range.Text := Fields[2].AsString;
vTable.Cell(i+6, 3).Range.Text := Fields[3].AsString;
vTable.Cell(i+6, 4).Range.Text := Fields[4].AsString;
vTable.Cell(i+6, 5).Range.Text := Fields[5].AsString;
vTable.Cell(i+6, 6).Range.Text := Fields[6].AsString;
vTable.Cell(i+6, 7).Range.Text := Fields[7].AsString;
vTable.Cell(i+6, 8).Range.Text := Fields[8].AsString;
vTable.Cell(i+6, 9).Range.Text := Fields[9].AsString;
Next;
Inc(i);
//if i>20 then

// begin
/// INC(j);
我想在这里做点什么啊,让他到下一张的相同表格中啊,怎么办啊!
// i:=0;
// end;
}
end;
end;
 
各位大哥啊!我今天看了别人的导出到模板的数据库程序!试了一下,可是我要导出多页相同的表格时不行啊,哪位大哥指点一下啊!
程序如下:
var
templateName: OleVariant;
newTemplate: OleVariant;
vSelection: Selection;
vTable: Table;
I,j,pItemIndex,k: Integer;
pCount:Double;
begin
//构造打印模板文件名全路径
templateName := folderName + '工艺模板1.dot';

newTemplate := False;
try
wordApp.Connect();
except
MessageDlg('您的计算机上还未安装Microsoft Office Word97或更高的版本!', mtError, [mbOK], 0);
Abort;
end;

//以指定的模板文件创建新Word文档
aqGY.Open;
pCount:=aqGY.RecordCount/20;
if pCount<1 then
pItemIndex:=1
else
begin
if Trunc(pCount)<pCount then
pItemIndex:=Trunc(pCount)+1
else
pItemIndex:=Trunc(pCount);
//总页数
end;

wordApp.Documents.AddOld(templateName, newTemplate);
wordApp.Caption :=' ';
// vSelection := wordApp.Selection;
//取文档中的第1张表
j:=1;
vTable := wordApp.ActiveDocument.Tables.Item(1);
//pItemIndex
With aqGYdo
begin
i:=0;
First;
While Not Eofdo
begin
vTable.Cell(1, 4).Range.Text := aqTZ.FieldByName('内部图号').AsString;
vTable.Cell(1, 6).Range.Text := aqTZ.FieldByName('客户图号').AsString;
vTable.Cell(1, 8).Range.Text := aqTZ.FieldByName('客户').AsString;
vTable.Cell(2, 4).Range.Text := aqTZ.FieldByName('品名').AsString;
vTable.Cell(2, 6).Range.Text := aqTZ.FieldByName('品名').AsString;
vTable.Cell(2, 8).Range.Text :='共'+inttostr(pItemIndex)+'页';
vTable.Cell(3, 2).Range.Text := aqTZ.FieldByName('材料牌号').AsString;;
vTable.Cell(3, 4).Range.Text := aqTZ.FieldByName('毛坯种类').AsString;;
vTable.Cell(3, 6).Range.Text := aqTZ.FieldByName('成品尺寸').AsString;;
vTable.Cell(3, 8).Range.Text := aqTZ.FieldByName('毛坯可做件数').AsString;
vTable.Cell(3, 10).Range.Text := aqTZ.FieldByName('每件台数').AsString;
vTable.Cell(3, 12).Range.Text := aqTZ.FieldByName('备注').AsString;
vTable.Cell(i+6, 1).Range.Text := Fields[1].AsString;
vTable.Cell(i+6, 2).Range.Text := Fields[2].AsString;
vTable.Cell(i+6, 3).Range.Text := Fields[3].AsString;
vTable.Cell(i+6, 4).Range.Text := Fields[4].AsString;
vTable.Cell(i+6, 5).Range.Text := Fields[5].AsString;
vTable.Cell(i+6, 6).Range.Text := Fields[6].AsString;
vTable.Cell(i+6, 7).Range.Text := Fields[7].AsString;
vTable.Cell(i+6, 8).Range.Text := Fields[8].AsString;
vTable.Cell(i+6, 9).Range.Text := Fields[9].AsString;
Next;
Inc(i);
//if i>20 then

// begin
/// INC(j);
我想在这里做点什么啊,让他到下一张的相同表格中啊,怎么办啊!
// i:=0;
// end;
}
end;
end;
 
大哥们,帮忙啊!!!!
 
大哥啊!!帮帮我啊,老板又要开骂呢,分不够可以再加啊!!!!
 
wordApp.ActiveDocument.Tables.Item(1);
是不是应该让这个1递增呢?
 
是阿。。我也是这样考虑的啊,可是报错啊!!!不能这样操作阿
 
那个表格存在吗?最简单的办法就是在Word的宏环境里面调试VBA代码,看看哪里出问题了
 
你可以在你的模板中事先在每页上设置几个书签,然后通过查询书签来定位数据写入位置.
 
我使用ARWordReport 1.6,免费的。制作word报表很好用。你可以试试,可以节省多少时间呀!
 
后退
顶部