Delphi:将列从一个excel工作表复制到另一个excel工作表

Delphi:将列从一个excel工作表复制到另一个excel工作表,delphi,excel,com,Delphi,Excel,Com,我需要找到第一个单元格具有指定值的列(在除ProfitSheet之外的每张工作表上)(它始终存在,并且每张工作表只有一个),然后将该列复制到另一张工作表。i、 e.诸如此类: for i := 2 to MsExcel.Sheets.Count do // sheets loop. Sheets[1] — ProfitSheet begin MsExcel.Sheets[i].Select; for j := 1 to 15 do // columns loop to find "Pr

我需要找到第一个单元格具有指定值的列(在除ProfitSheet之外的每张工作表上)(它始终存在,并且每张工作表只有一个),然后将该列复制到另一张工作表。i、 e.诸如此类:

for i := 2 to MsExcel.Sheets.Count do // sheets loop. Sheets[1] —  ProfitSheet
begin
  MsExcel.Sheets[i].Select;
  for j := 1 to 15 do // columns loop to find "Profit column"
    if MsExcel.Cells[1, j].Text = 'Profit' then
      // copy j column, usually I use something like 
      // VariantArr := MsExcel.Range[MsExcel.Cells[1, j], MsExcel.Cells[299, j]].Value
      // and then 
      // Range := MsExcel.Range[MsExcel.Cells[1,i], MsExcel.Cells[299, i]];
      // Range.Value := VariantArr;
      // but I don't know how to find last column's cell (where 299)
  MsExcel.Sheets['ProfitSheet'].Select;
  // copy col to the i column of ProfitSheet
end;

下面是一个可能有用的。它使用列(“a”)。。。我认为很难将大于26的数字转换为AA、AB等。有一个类似的例子:事实上,它不是。:)
函数ColRowToStringName(列,行:整数;ColIsAbs,行:布尔):字符串;贝京公司(世界其他地区);如果ColIsAbs,则从Col<26开始,结果:='$'+Char(Ord('A')+Col),否则结果:='$'+Char(Ord('A')+Col div 26)+Char(Ord('A')mod 26);如果列<26,则结束else开始,然后结果:=字符(Ord('A')+Col)否则结果:=字符(Ord('A')+Col div 26)+字符(Ord('A')+Col mod 26);终止如果行为,则结果:=Result+'$'+IntToStr(行),否则结果:=Result+IntToStr(行);结束但还有另一个问题-复制复制公式,而不是值。仅找到此解决方案(从剪贴板粘贴):
MsExcel.Sheets[i]。列[ColNumbToString(j)+':'+ColNumbToString(j)].Copy();MsExcel.Sheets['ProfitSheet'].Range[ColNumberToString(i-1)+'1'].PasteSpecial(xlPasteValues,xlPasteSpecialLoperationNone,true)