var
i, j, idx: Integer;
AExcel, ASheet: Variant;
sText: string;
begin
try
AExcel := CreateOleObject('Excel.Application');
try
AExcel.DisplayAlerts := False;
AExcel.Workbooks.Open('E:/Temp/test.xls');
for i := 1 to AExcel.Workbooks.Count do begin
ASheet := AExcel.Worksheets[i];
//读文本框(TextBoxes)内容
for j := 1 to ASheet.TextBoxes.Count do begin
//注意:读文本框内容时,如果直接用ASheet.TextBoxes[j].Text,则最多只能读取256个字符
//ASheet.TextBoxes[j].Characters.Text读出来的文本与ASheet.TextBoxes[j].Text相同
idx := 0;
sText := '';
while idx < ASheet.TextBoxes[j].Characters.Count do begin
sText := sText + ASheet.TextBoxes[j].Characters[idx, 250].Text;
Inc(idx, 250);
end;
with TMemo(Self.FindComponent('Memo'+ IntToStr(j))) do begin
Lines.Text := sText;
end;
if j = 2 then Break; //read 2 textbox for test
end;
//读图片(Pictures)
for j := 1 to ASheet.Pictures.Count do begin
ASheet.Pictures[j].Copy; //因未找到直接存为文件的方法
if Clipboard.HasFormat(CF_PICTURE) then begin
Clipboard.Open;
try
Image1.Picture.Assign(Clipboard); //故借助于剪贴板
finally
Clipboard.Close;
end;
with TBitmap.Create do //因Excel中的图片一般存为wmf格式
try //故要存为位图,应作如下转换
PixelFormat := pf24bit;
Width := Image1.Picture.Width;
Height := Image1.Picture.Height;
Canvas.Draw(0, 0, Image1.Picture.Graphic);
SaveToFile('E:/Temp/1.bmp');
finally
Free;
end;
end;
end;
end;
finally
AExcel.Quit;
AExcel := Unassigned;
end;
except
on E: Exception do
ShowMessage(E.Message);
end;
再加点插入图片的代码,以备参考
var
AExcel: Variant;
range: OleVariant;
...
AExcel.Range[FStart].Select; //选中某一单元格; FStart: 'A5'之类的串,表示EXCEL单元格
AExcel.ActiveSheet.Pictures.Insert(tempJpg); //插入一图片,tempJpg为图片文件的路径名
range := AExcel.ActiveSheet.Range[FStart, FEnd]; //选中某一区域
AExcel.ActiveSheet.Pictures[i].Left := range.Left; //设置图片位置
AExcel.ActiveSheet.Pictures[i].Top := range.Top; //设置图片位置
AExcel.ActiveSheet.Pictures[i].Width := range.Width; //设置图片显示大小
AExcel.ActiveSheet.Pictures[i].Height := range.Height; //设置图片显示大小