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