|
发表于 2008-6-16 18:41:18
|
显示全部楼层
换了一个copy方法,不过要楼主自己明确拷贝的范围(不是整页拷贝的)
procedure TExcel_Demo.butCreateSheetClick(Sender: TObject);
var
lFileName, lSource: String;
oExcel, oWorksheet: object;
app, workbooks, sourceworkbook, sourceworksheets, sourceworksheet,
workbook, worksheets, worksheet: DispatchHelper;
begin
lfilename:='c:\demo.xls';
lSource := 'c:\source.xls';
oExcel:= ComObj.CreateOleObject('Excel.Application');
app := DispatchHelper.Create(oExcel);
app.PropertyPut('Visible', [True]);
workbooks := DispatchHelper.Create(app.PropertyGet('Workbooks',[]));
sourceworkbook := DispatchHelper.Create(workbooks.InvokeMethod('Open',[lSource]));//打开文件
sourceworksheets := System.DispatchHelper.Create(sourceworkbook.PropertyGet('Sheets',[]));
sourceworksheet := System.DispatchHelper.Create(sourceworksheets.PropertyGet('Item',[1]));
//worksheet.PropertyPut('Name', ['wxw']);
workbook := DispatchHelper.Create(workbooks.InvokeMethod('Open',[lFileName]));//打开文件
worksheets := System.DispatchHelper.Create(workbook.PropertyGet('Sheets',[]));
//oWorksheet := worksheets.PropertyGet('Item',[1]);
//worksheet := System.DispatchHelper.Create(oWorksheet);
//此方法无法调用 sourceworksheet.InvokeMethod('Copy', [true, false], [oWorksheet]);
worksheet := AddWorksheet('newSheet', worksheets);
copyArea(sourceworksheet, worksheet);
//(oExcel as IDisposable).Dispose;
end;
procedure TExcel_Demo.copyArea(ASource, ATarget: DispatchHelper);
var
sUsed, tUsed, sRange, tRange: DispatchHelper;
begin
sRange := DispatchHelper.Create(ASource.PropertyGet('Range', ['A1', 'C8']));
sRange.InvokeMethod('Copy', []);
tRange := DispatchHelper.Create(ATarget.PropertyGet('Range', ['A1']));
tRange.InvokeMethod('PasteSpecial', []);
end;
function TExcel_Demo.AddWorksheet(AName: String; AWorkSheets: DispatchHelper): DispatchHelper;
begin
Result := DispatchHelper.Create(AWorkSheets.InvokeMethod('Add', []));
Result.PropertyPut('Name', [AName]);
end; |
|