word中一行存多张图片问题!急(100分)

  • 主题发起人 主题发起人 xzsnj
  • 开始时间 开始时间
X

xzsnj

Unregistered / Unconfirmed
GUEST, unregistred user!
我现在已经动态生成了一个word,然后需要从一个文件夹中将所有图片拿出放到word中,一行要放四幅图片。图片下面写图片名称,然后向下循环。不知道该怎么写,网上找到的资料用处都不大。
 
动态生成的我没有试过,在word中如果一行放多张图片,我是用表格给限制开的。
我想动态的也差不多,先生成个表格,然后再操作表格,插入图片
 
我现在也是这样试验的,是从网上弄到的代码:
var
wordApp,worddoc,mypic: Variant;
timestr:string;
i:integer;
wrdselection:Variant;
begin
try
wordApp := CreateOleObject('Word.Application');
except
MessageDlg('您的计算机上还未安装Microsoft Office Word2000或更高的版本!',
mtError, [mbOK], 0);
Abort;
end;
wordapp.visible:=true;
worddoc := wordapp.documents.add;
worddoc.select;
wrdselection :=wordapp.selection;
worddoc.Tables.Add(wrdSelection.Range,1,4,2,0);
worddoc.Tables.Item(1).Borders.Item(1).LineStyle:=7;
worddoc.Tables.Item(1).Borders.Item(2).LineStyle:=7;
worddoc.Tables.Item(1).Borders.Item(3).LineStyle:=7;
worddoc.Tables.Item(1).Borders.Item(4).LineStyle:=7;
for i:=0 to m_zp.Lines.Count-1 do
begin
worddoc.tables.item(1).cell(1,i).range.InlineShapes.AddPicture(trim(m_zp.Lines),False,True);
end;
timestr:=FormatDateTime('yyyymmddhhmmss',now);
wordapp.Documents.Item(1).Saveas('照片'+timestr+'.doc');
end;
我这里就是先用一行照片进行试验的,但是好像报错。
“这不是有效文件名。请试用下列方法:检查路径确认无措。从文件或者文件夹中选择文件”
还没有找到原因!
 
trim(m_zp.Lines),这个必须是绝对路径。。
 
worddoc.tables.item(1).cell(1,4).range.InlineShapes.AddPicture('d:/My Documents/图片/991234_左.jpg',false,True);

我测试的时候一直用这句话代替,但是一直就是这里报错。如果只插入文字就没有问题。一用上面一句话插入图片就有问题了!报上面我写的错误。
m_zp 这个我是我用的一个memo
我也是一直用的是绝对路径!不知道是不是因为图片太大了还是怎么着!
 
用表格可以的,
打印控件里面输出的的图片,都是用网格来分开的
 
我也知道是可以的,比如插入单张图片:
wordapp.ActiveDocument.InlineShapes.AddPicture('d:/My Documents/照片/肖像1.jpg', False, True);
这个就没有问题,但是一旦向单元个定向插入图片,就用:
worddoc.tables.item(1).cell(1,1).range.InlineShapes.AddPicture(trim(m_zp.Lines),False,True);
就会报错,谁能帮我看看这是问什么?或则给我段代码例子也好啊!
 
办法有许多,就是往表格插入图像,我给你代码,我正在用的。。
第一个方法使用标签。
第二个办法使用Cell定位。我的那个项目用的就是这个方法。我的源代码的一部分。(我这个是页眉表格插入图片)
我直接超作wordapplication(Word2000)没有使用WORDOC。
procedure TFrmCertificate_Sample.Word2000Header;
var
FFile:String;
FRange,LinkToFile,SaveWithDocument:OleVariant;
begin
//------
FFile:=GetAppPATH+'Report/Sign.bmp';
LinkToFile:=False;
SaveWithDocument:=True;
with Word2000.Selection.Sections.Item(1).Headers.Item(1).Range.Tables.Item(1) do
begin
if MyFrame.Suffix='测试报告' then begin
FRange:=Cell(1,1).Range;
if Cell(1,1).Range.InlineShapes.Count=0 then
Cell(1,1).Range.InlineShapes.AddPicture(FFile,LinkToFile,SaveWithDocument,FRange);
Cell(1,2).Range.Text:=SpaceMyTitle(MyFrame.CnTitle);
Cell(2,1).Range.Text:=' '+MyFrame.EnTitle;
end else begin
if Cell(1,1).Range.InlineShapes.Count>0 then
Cell(1,1).Range.InlineShapes.Item(1).Delete;
Cell(1,2).Range.Text:=' ';
Cell(2,1).Range.Text:=' ';
end;
//----证书编号-----
//Cell(4,1).Range.Font.Name:=MyFrame.FontName;
//Cell(4,1).Range.Font.Size:=14;
Cell(4,1).Range.Text:=gContent(0)+DM.GetCertificateNoView;
end;
end;
 
我原来少了一个参数,改过形式为:
wordDoc.Tables.item(1).cell(1,2).range.InlineShapes.AddPicture('d:/My Documents/照片/肖像1.jpg',false,True,wordDoc.Tables.item(1).Cell(1,2).Range);
已经可以通过了。
谢谢蓝叶菱,我现在在插入后,想控制图片具体大小怎么办呢!
得到回复后,就散分!
 
大小啊,你啊,方法好多了,你操作WORD录入就可以了,
怎么找到你的图形呢?
if Cell(1,1).Range.InlineShapes.Count=0 then
判断,有没有,图形通过item进行查找。
这个是我录制的VBA,你转换一下了。
Selection.InlineShapes(1).Fill.Visible = msoFalse
Selection.InlineShapes(1).Fill.Transparency = 0#
Selection.InlineShapes(1).Line.Weight = 0.75
Selection.InlineShapes(1).Line.Transparency = 0#
Selection.InlineShapes(1).Line.Visible = msoFalse
Selection.InlineShapes(1).LockAspectRatio = msoTrue
Selection.InlineShapes(1).Height = 53.85
Selection.InlineShapes(1).Width = 44.5
Selection.InlineShapes(1).PictureFormat.Brightness = 0.5
Selection.InlineShapes(1).PictureFormat.Contrast = 0.5
Selection.InlineShapes(1).PictureFormat.ColorType = msoPictureAutomatic
Selection.InlineShapes(1).PictureFormat.CropLeft = 0#
Selection.InlineShapes(1).PictureFormat.CropRight = 0#
Selection.InlineShapes(1).PictureFormat.CropTop = 0#
Selection.InlineShapes(1).PictureFormat.CropBottom = 0#
。。。
0.5是0。5CM你可以使用word2000.cemm.(0.5)这个函数我忘记了。
 
已经解决了,我的写法是
wordApp,worddoc: Variant;
FRange,myPic:OleVariant;
try
wordApp := CreateOleObject('Word.Application');
except
MessageDlg('您的计算机上还未安装Microsoft Office Word2000或更高的版本!',
mtError, [mbOK], 0);
Abort;
end;
wordapp.visible:=true;
worddoc := wordapp.documents.add;

worddoc.select;
worddoc.Tables.Add(wrdSelection.Range,1,4,2,0);
worddoc.Tables.Item(1).Borders.Item(1).LineStyle:=7;
wordDoc.Tables.Item(1).Rows.Item(1).Range.Paragraphs.Alignment:=wdAlignParagraphCenter;

FRange:=wordDoc.Tables.item(1).Cell(1,3).Range;
myPic:=wordDoc.Tables.item(1).cell(1,3).range.InlineShapes.AddPicture('d:/My Documents/照片/肖像2.jpg',false,True,FRange);
myPic.width:=100;
myPic.height:=100;

分已经散出去了!
 
多人接受答案了。
 
源代码还要加一句:
wrdselection:Variant;
wrdselection :=wordapp.selection;
 

Similar threads

回复
0
查看
804
不得闲
回复
0
查看
1K
不得闲
D
回复
0
查看
744
DelphiTeacher的专栏
D
后退
顶部