Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/delphi/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Delphi:如何修剪excel范围_Excel_Delphi_Vba - Fatal编程技术网

Delphi:如何修剪excel范围

Delphi:如何修剪excel范围,excel,delphi,vba,Excel,Delphi,Vba,虽然我是stackoverflow的超级粉丝,并且我发现了一些很好的解决方案,但这是我的第一个问题。 我正在编写一个Delphi工具(D6…很旧,但仍在使用!),以便更轻松地管理学校的学生 Delphi读取一些(甚至更早的…)VisualFoxPro数据库表,并在查询中收集所需的数据。此数据应导出到Excel。 “理论上”一切正常,但我有几个问题: 查询字段中填充了大量前导空格,这似乎 是FoxPro的问题(我发现: ,不知道如何工作 (用它) 修剪sql命令不起作用(空白 由foxpro查询创

虽然我是stackoverflow的超级粉丝,并且我发现了一些很好的解决方案,但这是我的第一个问题。 我正在编写一个Delphi工具(D6…很旧,但仍在使用!),以便更轻松地管理学校的学生

Delphi读取一些(甚至更早的…)VisualFoxPro数据库表,并在查询中收集所需的数据。此数据应导出到Excel。 “理论上”一切正常,但我有几个问题:

  • 查询字段中填充了大量前导空格,这似乎 是FoxPro的问题(我发现: ,不知道如何工作 (用它)
  • 修剪sql命令不起作用(空白 由foxpro查询创建,表是“干净的”)
  • 试图在Delphi中借助字段的“onGetText”方法完成事情 名称-这很有帮助,但在数据集中,空格未被触及 (只有它们在网格中的字段值是正确的)-也没有帮助 因为导出到delphi使用查询
  • 因此,我必须消除从Delphi到Excel的空白。我用这个: 我想我可以执行Excel的修剪功能来操作 领域。所以我的问题是:如何执行vba代码?我发现:
  • 有什么想法吗?提前谢谢

    附言: 我还寻找了一种简单的“替换所有空格但不在单词内”的方法,想到了regexp,但在我的Delphi代码中找不到实现这一点的方法

    由于excel表格中没有太多文本(100行,4列),我可以遍历每个单元格。。。但这似乎不是很优雅。

    因此,这里有一个代码,用于简单地替换所有空格-不幸的是,它还替换了单元格中两个单词之间的必要空格:

     ovExcelApp := CreateOleObject('Excel.Application');
       try
       ovExcelApp.displayAlerts := false;
       ovExcelWorkbook := ovExcelApp.WorkBooks.Add;
       ovWS := ovExcelWorkbook.Worksheets.Item[1]; 
       ovWS.Activate;
       ovWS.Select;
       ovWS.Cells.NumberFormat := AnsiChar('@');
       ovRange := ovWS.Range['A1', 'A1']; //go to first cell
       ovRange.Resize[Data.RecordCount, Data.Fields.Count];
       ovRange.CopyFromRecordset(Data, Data.RecordCount, Data.Fields.Count); 
       ovExcelApp.Cells.Replace(
           What := ' ',
           Replacement := '', 
           LookAt := 2, 
           SearchOrder := 1, 
           MatchCase := False,
           SearchFormat := False,
           ReplaceFormat := False
           );
       end;
       // How could I do a regexp (only replace leading spaces) or do a trim over all cells withing ovWS?
       ovRange.EntireColumn.AutoFit;
       ovWS.SaveAs(DestName, 1, '', '', False, False);
    
    尝试修剪字段值会导致错误:

    procedure Tf_dbftools.qADO_einzelnAfterOpen(DataSet: TDataSet);
    begin
      with qADO_einzeln do begin
        first;
        while not eof do begin
          edit;
          Fields[0].AsString := trim(fields[0].asstring);
          Fields[1].AsString := trim(fields[1].asstring);
          Fields[2].AsString := trim(fields[2].asstring);
          Fields[3].AsString := trim(fields[3].asstring);
          next;
        end;
        //post -> error
      end;
    end;
    
    我只需要编辑qADO查询resp中的数据(来自不同的表)。用于将内容正确导出到Excel的数据集。我真的需要将数据复制到clientDataset来编辑它们吗?

    最后,我选择了这个(简单…)解决方案,手动复制每个单元格值,以便使用Delphi的修剪功能:

    。。一些代码如上所述,但现在“数据”是一个问题:

     data.First;
        for RowIndex := 0 to Data.RecordCount - 1 do begin
          for ColumnIndex := 0 to data.Fields.Count - 1 do begin
            ovWS.Cells[RowIndex+1, ColumnIndex+1].Value := trim(data.Fields[columnIndex].AsString);
    
            next ;
          end;
        data.Next;
        next;
    

    (…但仍然想知道是否有一种更简单和“更干净”的方法…除了在Foxpro中填充很可怕之外!)

    当数据从DBase传输到Excel时,为什么不在Delphi代码中修剪()呢?谢谢你的回答,Jan。但是使用CopyFromRecordset方法,我只有一个_Recordset对象。。如何访问字段值?。。尝试使用“AfterOpen”方法并执行一些aodquery.edit,然后执行字段[0]。asString:=trim(字段[0].asString..adoquery.post…但没有帮助,无法将值写回查询..-\n是否可以在读取数据之前对VFP进行更新以清除数据?@Hugh-这是怎么做到的?我从这里下载了最新的Foxpro客户端-有没有办法禁用填充?另一方面:我只是在寻找一种操作方法本地数据集中的数据(不写回…所有找到的信息都使用update语句写回值..我只需要能够修剪字符串..arrrghhh…)或者在Excel中…另一种可能是为每个需要操作的字段创建一个计算字段-将trim语句放入
    oncalfields()
    方法中。这意味着数据集将有两个数据的“版本”