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