`
宋科明
  • 浏览: 99779 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

向已存Excel文件中导入数据小结

阅读更多

其实前面提到的导出数据到Excel文件中的写入流方法都是新建状态下的Excel文件,重新定位文件头和文件尾,会的损坏原文件。

假如有一个已存Excel文件xlsFile.xls中,已有其它数据,只需向其中添加一引起数据,显然在前几种方法难解决。

 

现有办法解决,效率相对还过得去(还可以向其中写Excel公式):

大体方法以描述:定义一个 lst :TstringList ,向其中添加要写入Excel文件的内容。每列以#9表格控制符结尾。

然后把数据先写到剪切板上 clipboard.astext := lst.Text;

然后打开已存xlsFile.xls,定位要写入数据的cell,shtSheet.Paste;

 

 

如下代码:

var

   省。。。。

 

tmpstr:= ExtractFilePath(Application.ExeName) +  '漂染车间'+exdtdtProductDate.Text+'生产排程.xls';

  try
    exclplctnApp.Connect;
  except
    on E: Exception do
    begin
      E.Message := '无法连接Excel';
      Raise;
    end;
  end;
  exclplctnApp.Visible[0] := False;

  exclwrkbkBook.ConnectTo(exclplctnApp.Workbooks.Open(tmpstr,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,EmptyParam,0));
  exclwrkshtSheet.ConnectTo(exclwrkbkBook.Sheets[1] as _Worksheet);

  (exclplctnApp.Worksheets.Item[1] as _WorkSheet).Activate(0);//激活worksheet
  //下面写入数据

  lst := TStringList.Create;
  try
    try
      dsTastList.DisableControls;
      dsTastList.First;
      n:= 21;
      for i:= 1 to dsTastList.RecordCount  do
      begin
        s_tmp := EmptyStr;

        tmpstr:= '=IF(O22="**",F22&K22&O22&N22,IF(OR(K22="黑色",K22="白色"'+
        ',K22="原纱克"),F22&K22,IF(OR(K22<>"黑色",K22<>"白色",K22<>"原纱克"),F22&K22&O22,"")))';
        tmpstr:= StringReplace(tmpstr,'22',IntToStr(i+n),[rfReplaceAll]);
        s_tmp := s_tmp + tmpstr + #9;  //名称引用

        tmpstr:= '=IF(G22="车间自排",F22&G22&K22,IF(D22<>"",F22&G22,""))';
        tmpstr:= StringReplace(tmpstr,'22',IntToStr(i+n),[rfReplaceAll]);
        s_tmp := s_tmp + tmpstr + #9;//缸台引用

        tmpstr:= '=O22&S22';
        tmpstr:= StringReplace(tmpstr,'22',IntToStr(i+n),[rfReplaceAll]);
        s_tmp := s_tmp + tmpstr + #9;//颜色引用

        tmpstr:= '=IF(OR(I22<=0,I22=""),"",IF(AND(LEFT(Q22,2)="TD",I22<0.8),"小缸",'+
        'IF(AND(LEFT(Q22,2)<>"TD",I22<2.5),"401",IF((I22<10.5),"301",IF((I22<31.5)'+
        ',"107",IF((I22<42),"106",IF((I22<63),"105",IF((I22<73.5),"205","104"))))))))';
        tmpstr:= StringReplace(tmpstr,'22',IntToStr(i+n),[rfReplaceAll]);
        s_tmp := s_tmp + tmpstr+ #9;  //缸台整理

        tmpstr:= '=IF(D22<>"",1,"")';
        tmpstr:= StringReplace(tmpstr,'22',IntToStr(i+n),[rfReplaceAll]);
        s_tmp := s_tmp + tmpstr+ #9; //轮数

        s_tmp := s_tmp + dsTastList.FieldByName('WD_P_DATE').AsString + #9; //生产日期

        tmpstr:= '=IF(AND(I22<>"")*OR(K22="黑色",K22="白色",K22="原纱克"),"车间自排",'+
        'IF(D22<>"104",D22,IF(I22<100,"104",IF(I22<220,"108",IF(I22<320,"103",'+
        'IF(I22<440,"102",IF(I22<640,"101","分批")))))))';
        tmpstr:= StringReplace(tmpstr,'22',IntToStr(i+n),[rfReplaceAll]);
        s_tmp := s_tmp + tmpstr+ #9;//生产缸台

        tmpstr:= '=IF(AND(O22="星韵",A22<>A21),SUMIF(A:A,F22&K22&O22&N22,T:T),'+
        'IF(AND(A22<>A21)*OR(K22="黑色",K22="白色",K22="原纱克"),SUMIF(A:A,'+
        'F22&K22,T:T),IF(A22<>A21,SUMIF(A:A,F22&K22&O22,T:T),"")))';
        tmpstr:= StringReplace(tmpstr,'22',IntToStr(i+n),[rfReplaceAll]);
        tmpstr:= StringReplace(tmpstr,'21',IntToStr(i+n-1),[rfReplaceAll]);
        s_tmp := s_tmp + tmpstr+ #9;//生产数量

        tmpstr:= '=IF(AND(O22="星韵",A22<>A21),SUMIF(A:A,F22&K22&O22&N22,J:J),'+
        'IF(AND(A22<>A21)*OR(K22="黑色",K22="白色",K22="原纱克"),'+
        'SUMIF(A:A,F22&K22,J:J),IF(A22<>A21,SUMIF(A:A,F22&K22&O22,J:J),"")))';
        tmpstr:= StringReplace(tmpstr,'22',IntToStr(i+n),[rfReplaceAll]);
        tmpstr:= StringReplace(tmpstr,'21',IntToStr(i+n-1),[rfReplaceAll]);
        s_tmp := s_tmp + tmpstr+ #9;  //引用数量

        tmpstr:= '=IF(LEFT(Q22,2)="TD",T22*1.5,T22)';
        tmpstr:= StringReplace(tmpstr,'22',IntToStr(i+n),[rfReplaceAll]);
        s_tmp := s_tmp + tmpstr+ #9; //未完成数

 

        s_tmp := s_tmp + dsTastList.FieldByName('C_COLOR_Z').AsString + #9; //类别
        s_tmp := s_tmp + dsTastList.FieldByName('S_S_TYPE').AsString + #9; //类别
        s_tmp := s_tmp + dsTastList.FieldByName('WH_NO').AsString + #9; //生产单号
        s_tmp := s_tmp + dsTastList.FieldByName('WD_S_NO').AsString + #9; //订单号
        s_tmp := s_tmp + dsTastList.FieldByName('WD_CV_NAME').AsString + #9; //客户
        s_tmp := s_tmp + dsTastList.FieldByName('WH_URGENCY').AsString + #9; //紧急程度
        s_tmp := s_tmp + dsTastList.FieldByName('WD_P_CODE').AsString + #9; //物料编号
        s_tmp := s_tmp + dsTastList.FieldByName('WD_P_NAME').AsString + #9; //物料名称
        s_tmp := s_tmp + dsTastList.FieldByName('WD_COL_NAME').AsString + #9; //颜色
        s_tmp := s_tmp + dsTastList.FieldByName('WD_S_QTY').AsString + #9; //订单数量
        s_tmp := s_tmp + dsTastList.FieldByName('WD_MUST_IN_QTY').AsString + #9; //指定入库
        s_tmp := s_tmp + dsTastList.FieldByName('WD_U_CODE').AsString+ #9; //主单位
        s_tmp := s_tmp + dsTastList.FieldByName('WD_U2_QTY').AsString + #9; //次数量
        s_tmp := s_tmp + dsTastList.FieldByName('WD_U2_CODE').AsString + #9; //次单位
        s_tmp := s_tmp + dsTastList.FieldByName('WD_YQ_DATE').AsString+ #9; //生产交期
        s_tmp := s_tmp + dsTastList.FieldByName('WD_JQ_IS_WAIT').AsString+ #9; //交期待定
        s_tmp := s_tmp + dsTastList.FieldByName('S_STATUS').AsString+ #9; //状态
        s_tmp := s_tmp + DateToStr(Now) + #9;  //处理日期

        tmpstr:= '=IF(A22="","",VLOOKUP(A22,$A$21:$G$2360,7,FALSE))';
        tmpstr:= StringReplace(tmpstr,'22',IntToStr(i+n),[rfReplaceAll]);
        s_tmp := s_tmp + tmpstr+ #9; //缸台号

        s_tmp := s_tmp +  '' + #9; //车间生产反馈

        lst.Add(s_tmp);

        dsTastList.Next;
      end;

      if lst.Count > 0 then
      begin
        clipboard.astext := lst.Text;

        exclwrkshtSheet.Range['A22','A22'].Select;
        exclwrkshtSheet.Paste;
        Clipboard.Clear;
        exclplctnApp.Visible[0] := True;
      end;
    except
      exclplctnApp.Workbooks.Close(0);
      exclplctnApp.Disconnect;//关闭Excel
      exclplctnApp.Quit;
    end;
  finally
    //exclplctnApp.Columns.AutoFit;
    dsTastList.EnableControls;
    exclplctnApp.Save;
  end;

分享到:
评论

相关推荐

    电子表格Excel教学设计.pdf

    打开原保存的文件[板书] 演示讲评:部分学生 五、 小结 第二课时 教学内容:数据的输入与单元格的操作 教学目标:掌握单元格中数据的修改与删 除。 学会单元格的移动与复制及单 元格的选定与编辑 教学重点:单元格的...

    Excel_VBA教程

    一、VBA语言基础 1 第一节 标识符 1 第二节 运算符 1 第三节 数据类型 1 第四节 变量与常量 1 第五节 数组 2 第六节 注释和赋值语句 2 第七节 书写规范 2 ...27.放置EXCEL数据到ACCESS表中 370 28.接下来…… 374

    基于BootStrap Metronic开发框架经验小结【七】数据的导入、导出及附件的查看处理

    在很多系统模块里面,我们可能都需要进行一定的数据交换处理,也就是数据的导入或者导出操作,这样的批量处理能给系统用户更好的操作体验,也提高了用户录入数据的效率。本文基于Bootstrap的框架基础上,再对这个...

    ExcelVBA程序设计.doc

    一、VBA语言基础 1 第一节 标识符 1 第二节 运算符 1 第三节 数据类型 1 第四节 变量与常量 1 第五节 数组 2 第六节 注释和赋值语句 2 第七节 书写规范 2 ...27.放置EXCEL数据到ACCESS表中 370 28.接下来…… 374

    Access 2007 VBA宝典 1/4

    完整清晰版 PDF ,有目录。共 120MB,分为四个分卷 ... 无论是否打算以Access报表、数据透视图或数据透视表,或者Word文档或Excel工作表来表现数据,数据都可存储在Access表中,并在Access窗体中输入和编辑数据。

    Access 2007 VBA宝典 4/4

    完整清晰版 PDF ,有目录。共 120MB,分为四个分卷 ... 无论是否打算以Access报表、数据透视图或数据透视表,或者Word文档或Excel工作表来表现数据,数据都可存储在Access表中,并在Access窗体中输入和编辑数据。

    Access 2007 VBA宝典 3/4

    完整清晰版 PDF ,有目录。共 120MB,分为四个分卷 ... 无论是否打算以Access报表、数据透视图或数据透视表,或者Word文档或Excel工作表来表现数据,数据都可存储在Access表中,并在Access窗体中输入和编辑数据。

    Access 2007 VBA宝典 2/4

    完整清晰版 PDF ,有目录。共 120MB,分为四个分卷 ... 无论是否打算以Access报表、数据透视图或数据透视表,或者Word文档或Excel工作表来表现数据,数据都可存储在Access表中,并在Access窗体中输入和编辑数据。

    飞翔商铺进销存系统 v7.61.zip

    ·期初数据支持批量从EXCEL导入或粘贴到软件; ·库存状态左小下角实时反映; ·商品明细账、钱流明细账,销售利润直观可视; ·应收应付清晰明了,可批量结帐,部分结帐; ·经营状况分析,数据明了,进销...

    SharePoint Server2007宝典.part02

    文件较大,所以分卷。SharePoint.Server.2007宝典.part02 目录 第1部分 开始使用SharePoint 第1章 SharePoint产品和技术简介 3 1.1 探索Microsoft Office SharePoint Server 2007 3 ...22.4 小结 521

    visio教程PDF

    1.7 小结 第2章 Visio 2000工程环境 2.1 操作Welcome to Visio 2000窗口 2.1.1 难备新的绘图 2.1.2 准备打开一个已经存在的文件 2.2 基本下拉菜单 2.2.1 File下拉菜单 2.2.2 Tools下拉菜单 ...

    Visio 2000 技术大全

    1.7 小结 第2章 Visio 2000工程环境 2.1 操作Welcome to Visio 2000窗口 2.1.1 难备新的绘图 2.1.2 准备打开一个已经存在的文件 2.2 基本下拉菜单 2.2.1 File下拉菜单 2.2.2 Tools下拉...

    SQL Server 2008商业智能完美解决方案 1/3

    6.1.7 SSMS小结 132 6.2 小结 132 第7章 用BIDS设计OLAP多维数据集 133 7.1 使用BIDS 133 7.2 在“解决方案资源管理器”中工作 135 7.2.1 Analysis Services中的数据源 137 7.2.2 数据源视图 139 7.2.3 Analysis ...

    E8进销存财务管理软件普及版V9.8

    E8进销存财务软件将进销存财务四位一体化软件,特别为中小企业设计,它的功能范围包括基础管理、入库管理、出库管理、退换货管理、仓库管理、现金银行管理、库存管理、会计事务、出纳管理及各类汇总统计报表,并配备...

    E8进销存财务管理软件增强版V9.8

    E8进销存财务软件将进销存财务四位一体化软件,特别为中小企业设计,它的功能范围包括基础管理、入库管理、出库管理、退换货管理、仓库管理、现金银行管理、库存管理、会计事务、出纳管理及各类汇总统计报表,并配备...

    SQL Server 2008商业智能完美解决方案 3/3

    6.1.7 SSMS小结 132 6.2 小结 132 第7章 用BIDS设计OLAP多维数据集 133 7.1 使用BIDS 133 7.2 在“解决方案资源管理器”中工作 135 7.2.1 Analysis Services中的数据源 137 7.2.2 数据源视图 139 7.2.3 Analysis ...

    SQL Server 2008商业智能完美解决方案 2/3

    6.1.7 SSMS小结 132 6.2 小结 132 第7章 用BIDS设计OLAP多维数据集 133 7.1 使用BIDS 133 7.2 在“解决方案资源管理器”中工作 135 7.2.1 Analysis Services中的数据源 137 7.2.2 数据源视图 139 7.2.3 Analysis ...

    数据可视化报告(1).doc

    可视化方案或可视化实现过程 1 导入数据并进行规范化 选择导入excel文件,然后整理文件的格式,让系统可以正常识别。 2 数据连接与整理 把excel表中的表和详细描述进行连接,然后清除掉多余或者无用的项,整理后的数...

    SQL Server 2008 商业智能完美解决方案(3)

    6.1.7 SSMS小结 132 6.2 小结 132 第7章 用BIDS设计OLAP多维数据集 133 7.1 使用BIDS 133 7.2 在“解决方案资源管理器”中工作 135 7.2.1 Analysis Services中的数据源 137 7.2.2 数据源视图 139 7.2.3 ...

    E8进销存财务管理软件增强版V9.7

    E8进销存财务软件将进销存财务四位一体化软件,特别为中小企业设计,它的功能范围包括基础管理、入库管理、出库管理、退换货管理、仓库管理、现金银行管理、库存管理、会计事务、出纳管理及各类汇总统计报表,并配备...

Global site tag (gtag.js) - Google Analytics