使用方法二可解決以下狀況
Excel 2010 插入圖片後, 發到收件人後, 圖片不能正確顯示, 只顯示"無法顯示連結的圖像"
//use office2000,comobj;
procedure DBGrid3Excel(var DBGrid: TINFODBGrid; ExcelFileName: string);
var MyExcel: Variant;
x,y, Z:integer;
aGONO1:String;
aPIC: Variant;
iPic:Integer;
aRange: Variant;
begin
Z:=dbgrid.FieldCount;
deletefile(ExcelFileName);
MyExcel := CreateOleOBject('Excel.Application');
MyExcel.WorkBooks.Add;
MyExcel.Visible := True;
MyExcel.WorkBooks[1].Saveas(ExcelFileName);
dbgrid.DataSource.DataSet.First;
MyExcel.Range['A1:N1'].Select;//選取一整行
MyExcel.Selection.Merge;
MyExcel.WorkBooks[1].WorkSheets[1].Cells[1,1] := Printstr;
y:=2;
for x:=1 to dbgrid.FieldCount do
begin
if dbgrid.Columns[x-1].Visible then
begin
MyExcel.WorkBooks[1].WorkSheets[1].Cells[y,x] := dbgrid.Columns[x-1].title.caption;
// 將該欄設為標選
MyExcel.WorkBooks[1].WorkSheets[1].Cells[y,x].Select;
// 將標題欄位變粗體字
MyExcel.Selection.Font.Bold := true;
// 設定欄位寬度
MyExcel.WorkBooks[1].WorkSheets[1].Columns[x].ColumnWidth := dbgrid.Fields[x-1].DisplayWidth;
end;
end;
inc(y);
iPic:=1;
aGONO1:='';
while not dbgrid.DataSource.DataSet.eof do
begin
for x:=1 to dbgrid.FieldCount do
begin
if dbgrid.Fields[x-1].FieldName='PICNAM' then
begin
MyExcel.WorkBooks[1].WorkSheets[1].Columns[x].ColumnWidth := 19;
MyExcel.WorkBooks[1].WorkSheets[1].Rows[y].RowHeight:= 53;//recycle
if (FileExists(Pchar(dbgrid.DataSource.DataSet.FieldByName('PICNAM').AsString)))then
begin
MyExcel.WorkBooks[1].WorkSheets[1].Cells[y,1].Select;
//方法一
aPIC:= MyExcel.WorkBooks[1].WorkSheets[1].Pictures.Insert(dbgrid.DataSource.DataSet.FieldByName('PICNAM').Value);
aPIC.Select;
//aPIC.ShapeRange.IncrementLeft(0);
//aPIC.ShapeRange.IncrementTop(0);
//aPIC.ShapeRange.LockAspectRatio := msoFalse; //圖檔大小LOCK
aPIC.ShapeRange.height:=50;//指定高度
//aPIC.ShapeRange.Width:=50;
//aPIC.ShapeRange.ScaleWidth:=0.5;
//取消底色
aPIC.ShapeRange.PictureFormat.TransparentBackground := 1;
aPIC.ShapeRange.PictureFormat.TransparencyColor := RGB(255, 255, 255);
aPIC.ShapeRange.Fill.Visible := 0;
//方法二 Shapes.AddPicture
aPIC:= MyExcel.WorkBooks[1].WorkSheets[1].Shapes.AddPicture(dbgrid.DataSource.DataSet.FieldByName('PICNAM').Value, msoTrue, msoTrue, 0, 33+52.5*(y-3), 50, 50);
//MyExcel.WorkBooks[1].WorkSheets[iSheets].Pictures.Insert(dbgrid.DataSource.DataSet.FieldByName('PICNAM').Value);
//MyExcel.WorkBooks[1].WorkSheets[iSheets].Pictures.Insert('\\127.0.0.1\PICT\10WEG011001.jpg');
//設定圖檔大小
//MyExcel.WorkBooks[1].WorkSheets[iSheets].Pictures[iPic].ShapeRange.height:=200;
//MyExcel.WorkBooks[1].WorkSheets[iSheets].Pictures[iPic].ShapeRange.width:=40;
Inc(iPic);//記錄目前圖檔陣列
end;
end
else if dbgrid.Columns[x-1].Visible then
begin
if dbgrid.Fields[x-1].DataType =ftString then
MyExcel.WorkBooks[1].WorkSheets[1].Cells[y,x] := ''''+dbgrid.Fields[x-1].DisplayText
else
MyExcel.WorkBooks[1].WorkSheets[1].Cells[y,x] := dbgrid.Fields[x-1].DisplayText;
end;
end;
inc(y);
//aGONO1 := dbgrid.DataSource.DataSet.FieldByName('GONO1').AsString;
dbgrid.DataSource.DataSet.next;
end;
end;
以下節錄 Shapes.AddPicture 方法說明:
從已存在的檔案中建立圖片。傳回代表新圖片的 Shape 物件。
語法
ActiveSheet.AddPicture(Filename, LinkToFile, SaveWithDocument, Left, Top, Width, Height)
參數
名稱 必要/選用 資料類型 描述
Filename 必要 String 要建立 OLE 物件的來源檔案。
LinkToFile 必要 MsoTriState 要連結的檔案。
SaveWithDocument 必要 MsoTriState 要與文件一同儲存的圖片。
Left 必要 Single 圖片的左上角位置 (以點為單位),與文件左上角相對。
Top 必要 Single 圖片的左上角位置 (以點為單位),與文件頂端相對。
Width 必要 Single 圖片的寬度 (以點為單位)。
Height 必要 Single 圖片的高度 (以點為單位)。
傳回值 Shape
備註
MsoTriState 可以為下列其中一個 MsoTriState 常數。
msoCTrue
msoFalse :將圖片建立成獨立的檔案複本。
msoTriStateMixed
msoTriStateToggle
msoTrue:建立圖片與其來源檔案之間的連結。
MsoTriState 可以為下列其中一個 MsoTriState 常數。
msoCTrue
msoFalse:只在文件中存放連結資訊。
msoTriStateMixed
msoTriStateToggle
msoTrue:將連結的圖片與其所插入的文件一同儲存。如果 LinkToFile 為 msoFalse,則此引數必須為 msoTrue。
沒有留言:
張貼留言