读取Excel中的文本框(TextBox)内容及图片(Picture)

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; //设置图片显示大小

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值