以下是我在Delphi中用过的Excel操作

ExlApp:=CreateOLEObject('Excel.Application'); //创建对象
ExlApp.Visible :=False;// True;   //是否显示
ExlApp.DisplayAlerts := False;  //是否显示警告
ExlApp.Caption:=aTitle;   //设置标题

ExlApp.Workbooks.Open(FileName);      // 打开文件
ExlApp.Workbooks[1].Sheets[1].Activate ;  //设置哪个工作表为激活状态

ExlApp.Workbooks[1].Title:='报价单';

将行、列数转为坐标名,如 1行3列 转换成 C1
  sTemp:=Char(iCol+64);
  Result:=Format('%s%d',[sTemp,iRow]);

//---------------------------------------合并相同的列

iStart:=iDataStart;  //从第几行开始
  iCount:=0;  //要合并的数量
  for i:=iDataStart to ExlApp.ActiveSheet.UsedRange.Rows.Count do //逐行找相同的列
  begin
    sValue:=Trim(VarToStr(ExlApp.ActiveSheet.Cells[iStart,iIndex].Value)); //起始行的值
    sTemp:=Trim(VarToStr(ExlApp.ActiveSheet.Cells[i,iIndex].Value));//当前行的值
    sNO:=ExlApp.ActiveSheet.Cells[i,1].Value;
    if (sValue <> sTemp) then  //发生变化,要合并前面的列
    begin
      R1:=GetCellName(iStart,iIndex);
      R2:=GetCellName(i-1,iIndex);  //i-1就是合并之前的行,这行不算

ExlApp.ActiveSheet.Range[Format('%s:%s',[R1,R2])].Merge; //合并行
      ExlApp.ActiveSheet.Range[Format('%s:%s',[R1,R2])].Borders[1].Weight := 2; //设框格线
      ExlApp.ActiveSheet.Range[Format('%s:%s',[R1,R2])].Borders[2].Weight := 2;
      ExlApp.ActiveSheet.Range[Format('%s:%s',[R1,R2])].Borders[3].Weight := 2;
      ExlApp.ActiveSheet.Range[Format('%s:%s',[R1,R2])].Borders[4].Weight := 2;
      iStart:=i;
      iCount:=1;
    end
    else if (TryStrToInt(sNO,iTemp)) and (iTemp>0) then
    begin
      Inc(iCount);  //如果起始和当前的值相同,要合并的数量增加
    end;

end;
  if iCount>0 then //最后还有要合并的,继续合并
  begin
    R1:=GetCellName(iStart,iIndex);
    R2:=GetCellName(iStart+iCount-1,iIndex);
    ExlApp.ActiveSheet.Range[Format('%s:%s',[R1,R2])].Merge;    //R1和R2之前的CELL进行合并
    ExlApp.ActiveSheet.Range[Format('%s:%s',[R1,R2])].Borders[1].Weight := 2;   //设框格线
    ExlApp.ActiveSheet.Range[Format('%s:%s',[R1,R2])].Borders[2].Weight := 2;
    ExlApp.ActiveSheet.Range[Format('%s:%s',[R1,R2])].Borders[3].Weight := 2;
    ExlApp.ActiveSheet.Range[Format('%s:%s',[R1,R2])].Borders[4].Weight := 2;
  end;

ExlApp.ActiveSheet.columns[i].Hidden:=True;   //隐藏列

ExlApp.ActiveSheet.Columns[i].Delete;  //删除列

ExlApp.ActiveSheet.Cells[4,2].Value:=FieldByName('cCusName').AsString; //赋值
sTemp:=ExlApp.ActiveSheet.Cells[iDataStart,1].Value; //取值

ExlApp.ActiveSheet.Cells[5,10].NumberFormat:='@';//设置单元格的格式,这是文字型
ExlApp.ActiveSheet.Cells[5,10].NumberFormat:='#0.####';//设置单元格的格式,这是数字型
ExlApp.ActiveSheet.Cells[5,10].NumberFormat:='$#0.####';//设置单元格的格式,这是货币型

ExlApp.ActiveSheet.Columns[11].EntireColumn.AutoFit; //自动调整列宽

ExlApp.ActiveSheet.Rows[3].Insert; //插入一行

ExlApp.ActiveSheet.UsedRange.Rows.Count //总行数,列也一样

//---------------------------------------图片操作

var
  vStream:TADOBlobStream;
  sCol,tmpFile,vPicType,R1:string;
  i,iCol:Integer;
  picture,workRange : OleVariant;
  vName:string;

begin
vStream:=TADOBlobStream.Create(TBlobField(Query001_2.FieldByName('Pics')),bmRead); 将图片数据写入流
if vStream.Size=0 then //没图片数据
begin
  exit;
end;
    vPicType:=CheckImgType(vStream);  //判断图片类型
    vStream.Position:=0;  //指向流的开头
    tmpFile:=GV_TempPath+PubData1.GetGUIDString+'.'+vPicType;  //生成临时文件名
    TBlobField(Query001_2.FieldByName('Pics')).SaveToFile(tmpFile); //流数据保存到临时文件里
    ExlApp.ActiveSheet.Columns[iCol].ColumnWidth :=15;  //设置列宽
    R1:=GetCellName(iRow,iCol);
    workRange:= ExlApp.ActiveSheet.Range[Format('%s:%s',[R1,R1])]; //设定范围,此处只是一格
    workRange.Select;
    picture := ExlApp.ActiveSheet.Shapes.AddPicture(tmpFile,true,true,workRange.left + 1,workRange.top + 1,workRange.width - 2,workRange.height - 2); //插入图片,前面2个true不知道有什么用,后面分别是left,top,width,height

picture := Unassigned;  //释放
    workRange:=Unassigned;
    DeleteFile(tmpFile);  //删除临时文件
    vStream.Free;

try
      iTemp:=1; //从第1个算起

for i:=1 to 10000 do  //因为无法访问shapes的数量,所以这里设大点
      begin
        if VarIsEmpty(ExlApp.ActiveSheet.Shapes.Item(iTemp)) then //判断第N个存在就删除
        begin
          Inc(iTemp);
          Break;
        end else
        begin
          if ExlApp.ActiveSheet.Shapes.Item(iTemp).Width<500 then  //这是自己定义的删除条件
          begin
            ExlApp.ActiveSheet.Shapes.Item(iTemp).Delete; //删除第N个,后面的就会变成第N个,如此循环
          end else
            inc(iTemp);  //不用删除就判断第N+1个
        end;

end;
    except

end;

end;

//---------------------------------------退出
try
    ExlApp.WorkBooks.Close;  //关闭工作薄
    ExlApp.Quit;    //退出
    ExlApp:=unassigned;  //关闭线程,不然在任务表里还会存在
    Result:=True;
  except
    Result:=False;
  end;

Delphi常用的Excel操作相关推荐

  1. 常用的excel操作小技巧--自己用的,仅供记录

    1. 如何做下拉菜单进行选择输入 选择单元格 点击Date→Date Validation→ Allow中选择List→Source中添加你想要的列表选项→ok  2.不同数字/文本 的填充区域,显示 ...

  2. 阿里巴巴开源的Excel操作神器!

    前提 导出数据到Excel是非常常见的后端需求之一,今天来推荐一款阿里出品的Excel操作神器:EasyExcel.EasyExcel从其依赖树来看是对apache-poi的封装,笔者从开始接触Exc ...

  3. Delphi 常用API 函数

    Delphi 常用API 函数 AdjustWindowRect 给定一种窗口样式,计算获得目标客户区矩形所需的窗口大小 AnyPopup 判断屏幕上是否存在任何弹出式窗口 ArrangeIconic ...

  4. 中考计算机考试exce,中考信息技术EXCEL操作.doc

    中考信息技术EXCEL操作 EXCEL操作 合并单元格 第一种办法: 选中需要合并的几个单元格 选择工具栏中的图标: 第二种办法: 选中需要合并的几个单元格 选择:格式 单元格 跳出如图所示 设置对齐 ...

  5. 数据转换excel操作 Microsoft.Office.Interop.Excel.dll的使用

    引用:http://www.cnblogs.com/lanjun/archive/2012/06/17/2552920.html 先说说题外话,前段时间近一个月,我一直在做单据导入功能,其中就涉及到E ...

  6. 【转载】Excel操作 Microsoft.Office.Interop.Excel.dll的使用

    http://www.cnblogs.com/lanjun/archive/2012/06/17/2552920.html 先说说题外话,前段时间近一个月,我一直在做单据导入功能,其中就涉及到Exce ...

  7. DELPHI常用函数集及简要范例 3

    ##DiskFree, DiskSize Example ----------------------------------------------------------------------- ...

  8. java poi row cell,使用POI进行Excel操作的总结一——创建Workbook,Sheet,Row以及Cell

    前段时间,看在其他的网站上给出Excel文档的导入与导出操作,感觉很酷的样子,所以就学习了一下如何使用POI进行Excel的操作,现在对之前的学习过程进行一个总结. 一.现在普遍使用的Excel文档有 ...

  9. 数据处理中常用的Excel基本操作及函数

    数据处理中常用的Excel基本操作及函数-生信基础版 文章目录 数据处理中常用的Excel基本操作及函数-生信基础版 第一部分:键盘快捷键操作 一.CTRL系列 二.其他系列 第二部分:Excel函数 ...

最新文章

  1. Python2 编码问题分析
  2. mysql获取两个表中日期字段的最小差值
  3. 获取当前经纬度php腾讯地图,PHP腾讯地图经纬度转百度地图经纬度
  4. 【MM模块】 Goods Receipt 收货 4
  5. Tomcat源码调试环境搭建
  6. 下单问题分析及解决方式
  7. Request_获取请求参数通用方式演示
  8. 使用Echarts制作散点图(Excel导入数据方式)
  9. Vue.js学习笔记(一) - 起步
  10. 拨开字符编码的迷雾--字符编码转换
  11. Pattern Recognition and Machine Learning(模式识别与机器学习)第一章导读
  12. 计算机主机开机 风扇没有转动,电脑开机黑屏,电源风扇和CPU风扇都正常转动,但是显示器无任何显示,正常的一声滴,萤幕什么都不显示...
  13. 微信小程序如何跳转到tabbar页面-陆大湿
  14. dest在C语言什么作用,目前最全面的dest答疑问题及相关回答
  15. python转pyd
  16. 用递归+缓存求阶乘和排列组合数
  17. sqlserver2014数据导出与导入
  18. STM32F3 GPIO的八种模式及工作原理
  19. React 动效 Framer motion,给你的页面添加一点动感
  20. redis客户端predis介绍

热门文章

  1. Java简简单单抢红包小程序(代码)
  2. 中旅投资计划战略入股开元森泊,成为其第二大股东
  3. SimpleDeserializer encountered a child element, which is NOT expected, in something it was trying to
  4. 总体标准差、样本标准差、标准误差
  5. 【GitHub】GitHub上值得收藏的100个精选前端项目!
  6. PKCS#11标准解读-Cryptoki库如何工作
  7. d3.js 实现企业图谱(基于vue)
  8. oh-my-zsh安装教程
  9. SPA(单页面应用)总结
  10. 跑象科技CEO 卢山巍:大数据具有“黑魔法”魅力