FAQ > 金融建模 > 第三方交互 > Excel

Q:如何替换Excel中的指定Sheet的内容?    

  • A:在导出数据到Excel中的指定Sheet表时,默认情况下会新建指定名称的Sheet,
    但如果excel中已经存在指定名称Sheet,重新导入时是范围覆盖的模式,即只会替换新表范围大小的数据,在不清楚原表数据大小的情况下会产生冗余数据。
    若需要全量替换,则需要先删除旧的Sheet表,再导入新表
    实现范例
    附件模型附件:ExportFile2ToSheet.fun
    删除指定sheet模型:FAQ:ExcelDeleteSheet
    执行代码
      dir:= "C:\\Users\\86152\\Desktop\\test.xlsx";//文件路径
      sheet:= "test";//sheet表名
      data1:=ones(5,array("a","b","c"));
      ret:=rdo2 ExportFile2(ftxls(),"",dir,data1,1,0,sheet);//若存在,则覆盖
      本地结果:
      
      data2:=ones(4,array("a","b"))*5;
      ret:=rdo2 ExportFile2ToSheet(data2,dir,Sheet);////若存在,则先删除,后导出
      return ret;//返回1
      本地结果:excel中sheet表是更新后的结果
      

    ExportFile2ToSheet
    Function ExportFile2ToSheet(data,dir,Sheet,alias,IncludeHeader,IncludeIndex,Range);
    Begin
    {
      说明:导出数据覆盖旧的Sheet表
      参数:可参考模型ExportFile2
      data: 数组,新的数据表
      dir: string,文件路径
      Sheet:String,Sheet表名称
      alias:string, 目录别名
      IncludeHeader: boolen, 为真时,导出的数据包含字段名称
      IncludeIndex: boolen, 为真时,到出的数据包含数组下标
      Range: string 指定单元格
    }
      if not alias then alias:="";
      if not IncludeHeader then alias:=1;
      if not IncludeIndex then alias:=0;
      //删除旧的Sheet表
      ret:=ExcelDeleteSheet(dir,sheet);
      if ret then
      begin
        ret1:=ExcelSave(dir); //保存
        ret2:=excelclose(dir); //关闭进程
      end
      //重新导出新建
      ret:=ExportFile2(ftXLS(),alias,dir,data,IncludeHeader,IncludeIndex,sheet,Range);
      return ret;
    End;