如何将图形导入excel中(50分)

  • 主题发起人 主题发起人 settingsun
  • 开始时间 开始时间
S

settingsun

Unregistered / Unconfirmed
GUEST, unregistred user!
我想将数据库中的某些数据导入excel中,但是其中有图形字段,如何将这些数据库中的图
片导入excel后能正确显示出来,谢谢。
 
完全可以做到,先将图形字段保存到一个临时文件中然后再
调用Sheet.Pictures.Insert方法把图片插入
 
是用delphi的那套控件还是生成ole对象操作,如何将图象插到特定的区域,我用的是
officeXP,能提供点源码吗。
 
没错就是用TExcelApplication,
帮人帮到底,给你写一段例子吧
procedure TForm1.Button1Click(Sender: TObject);
var
aWorkBook : _Workbook;
aSheet : Variant;
begin
if OpenPictureDialog1.Execute then
begin
ExcelApplication1.Connect;
aWorkBook := ExcelApplication1.Workbooks.Add(EmptyParam, 0);
aSheet := aWorkBook.Sheets[1];
aSheet.Range['f1'].Select;//这里是定位图片插入的位置
asheet.Pictures.Insert(OpenPictureDialog1.FileName);
ExcelApplication1.Visible[0] := True;
ExcelApplication1.Disconnect;
end;
end;
 
多谢Tassadar兄,还有一个问题请教,我把数据以及图片导入excel中后,如何计算图片占
多大尺寸,这样的话就能使图片与相应的数据对应起来,要不然数据与图片的位置无法对应。
 
要在Excel中控制图片的大小和位置与数据对应比较麻烦
我一般只是把图片放在数据后面,我帮你试一下,但是
不能保证能帮你搞定
 
谢谢 那我如果想得出数据库中图片的原始大小,应该怎么得到,或者原来图片文件的大小
 
procedure Texportexcel.BitBtn1Click(Sender: TObject);
var
row,column,Tempcolumn:integer;
i,j:integer;
begin
inherited;
ExcelWorksheet1.Disconnect;
ExcelWorkbook1.Disconnect;
ExcelApplication1.Disconnect;
Try
{ Excelapplication1.Connect;
ExcelWorkbook1.Connect;
ExcelWorksheet1.Connect;}
Except
Messagedlg('沒有安裝Excel!'+char(13)+
'請重新安裝!',mtinformation,[mbok],0);
Abort;
end;
Excelapplication1.Visible[0]:=true;
Excelapplication1.Caption:= '數據導出窗口程序';
Excelapplication1.Workbooks.Add(varNull,0);
Excelworkbook1.ConnectTo(excelapplication1.workbooks[excelapplication1.workbooks.count]);
Excelworksheet1.ConnectTo(excelworkbook1.worksheets[1] as _worksheet);
Excelworksheet1.Cells.Item[1,3]:='TOOLING PROGRESS REPORT';
Excelworksheet1.Cells.Item[2,1]:='Customer:';
Excelworksheet1.Cells.Item[2,3]:=dm.xvalue.fieldbyname('customer').value;
Excelworksheet1.Cells.Item[3,1]:='Cust.No:';
Excelworksheet1.Cells.item[3,3]:=dm.xvalue.fieldbyname('custph').value;
Excelworksheet1.Cells.Item[4,1]:='Description';
Excelworksheet1.Cells.Item[4,3]:=dm.xvalue.fieldbyname('custcpname').value;
Excelworksheet1.Cells.item[5,1]:='RSC No.:';
Excelworksheet1.Cells.Item[5,3]:=dm.xvalue.fieldbyname('rscno').value;
Excelworksheet1.Cells.item[6,1]:='Chinese Description:';
Excelworksheet1.Cells.Item[6,3]:=dm.xvalue.fieldbyname('rsccpname').value;
Excelworksheet1.Cells.Item[7,1]:='Start date:';
Excelworksheet1.Cells.Item[7,3]:=dm.xvalue.fieldbyname('rjdate').value;
Excelworksheet1.Cells.item[8,1]:='Estimate Finish Date:';
Excelworksheet1.Cells.Item[8,3]:=dm.xvalue.fieldbyname('rjoverdate').value;
Excelworksheet1.Cells.item[9,1]:='Actual Finish Date';
Excelworksheet1.cells.Item[10,1]:='total days:';
Excelworksheet1.Cells.Item[10,3]:=dm.xvalue.fieldbyname('totaldays').value;
Excelworksheet1.cells.item[11,1]:='Progress Per Day:';
Excelworksheet1.Cells.Item[11,3]:=dm.xvalue.fieldbyname('perday').value+'%';
Excelworksheet1.Cells.Item[12,1]:='Date/Time';
EXCELWORKSHEET1.Cells.Item[12,2]:='PLAN(%)';
Excelworksheet1.Cells.Item[12,3]:='ACTUAL(%)';
Excelworksheet1.Cells.Item[12,4]:='GAP';
Excelworksheet1.Cells.Item[12,5]:='WORKING DAYS';
row:=13;
dm.evalue.First ;
While Not(dm.evalue.Eof) do
begin
TempColumn := 0 ;
for Column:=1 to DbGrid1.FieldCount do
begin
if DbGrid1.Columns.Items[Column-1].Visible = True Then
begin
TempColumn := TempColumn + 1 ;
ExcelWorksheet1.Cells.Item[row,TempColumn] := DbGrid1.Fields[Column-1].AsString;
end;
end;
dm.evalue.Next;
row:=row + 1;
end;
end;
 
要取得图片大小还要根据你数据库保存的图片格式有关
这里是一段代码可以把jpg和bitmap的数据库数据转化称
tpicture,然后你可以从tpicture对象取得其大小

procedure TDBImageEx.LoadPicture;
var
Stream : TMemoryStream;
NewGraphic : TJpegImage;
begin
if not FPictureLoaded and (not Assigned(FDataLink.Field) or
FDataLink.Field.IsBlob) then
begin
if Assigned(FBeforeLoadPicture) then
FBeforeLoadPicture(self);
case FPictureType of
ptJpeg : begin
if (FDataLink.Active)and(not FDataLink.Field.IsNull) then
begin
NewGraphic := TJPEGImage.Create;
Stream := TMemoryStream.Create;
try
(FDataLink.Field as TBlobField).SaveToStream(Stream);
Stream.Position := 0;
NewGraphic.LoadFromStream(Stream);
FPicture.Graphic := NewGraphic;
finally
Stream.Free;
end;
end
else
FPicture.Graphic := nil;
end;
ptBitmap : Picture.Assign(FDataLink.Field);
end;
FDoAutoSize;
end;
end;
 
Tassadar兄,高手
 
不敢当,摸得多了,有点熟而已
 
多人接受答案了。
 
后退
顶部