起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 563|回复: 23

Excel导出数据问题???**

[复制链接]
发表于 2009-5-18 14:06:10 | 显示全部楼层 |阅读模式
DataTreeList数据导入Excel,代码如下。
如何实现当前已经存在的Excel 不重新创建,而是在已在Excel表格中覆盖sheet1或者sheet2 这页?
var
  lDstSheet: TSheet;
  lExcelExp: TExcelExporter;
begin
  lDstSheet := TSheet.Create(nil);
  lDstSheet.Title := 'sheet1';
  lExcelExp := TExcelExporter.Create(lDstSheet);
  try
//--导入Excel格式处理
    DataTreeListToSheet(ADataTreeList, lDstSheet,Flag);

    if Business.System.StringUtils.PosIgnoreCase('.xls', AFileName) > 0 then
      lExcelExp.ExportToFile(AFileName);
  finally
    lExcelExp.Free;
    lDstSheet.Free;
  end;
回复

使用道具 举报

发表于 2009-5-18 14:24:20 | 显示全部楼层
您现在时什么情况,如果ExportToFile是一个已经存在的excel文件?
回复 支持 反对

使用道具 举报

发表于 2009-5-18 14:44:01 | 显示全部楼层
楼主,你可以这样子来实现:
DataTreeList数据导出到Excel是没有问题的,然后你自己再做一下处理,把导出的这个sheet拷贝到你的那个文件的相应的sheet中,具体的平台代码请参考下面帖子的11楼
http://bbs.justep.com/forum.php?mod=viewthread&tid=23896
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-5-18 14:44:39 | 显示全部楼层
向已经存在的Excel里  导入数据,可以选择性 覆盖某个sheet
回复 支持 反对

使用道具 举报

发表于 2009-5-18 14:45:16 | 显示全部楼层
请楼主按3楼的方法做一下。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-5-18 15:38:51 | 显示全部楼层
按下面这方式:
function TExcel_Demo.AddWorksheet(AName: String; AWorkSheets: DispatchHelper): DispatchHelper;
begin
  Result := DispatchHelper.Create(AWorkSheets.InvokeMethod('Add', []));
  Result.PropertyPut('Name', [AName]);
end;

如何删除某个sheet, 给个代码
回复 支持 反对

使用道具 举报

发表于 2009-5-18 15:41:38 | 显示全部楼层
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-5-18 16:43:46 | 显示全部楼层
当前代码如下: 帮忙看下,如何能把提示框 隐藏掉?
procedure TKBBD1.copyArea(ASource, ATarget: DispatchHelper);
var
  sUsed, tUsed, sRange, tRange: DispatchHelper;
begin
  sRange := DispatchHelper.Create(ASource.PropertyGet('Range', ['A1', 'Z999']));
  sRange.InvokeMethod('Copy', []);

  tRange := DispatchHelper.Create(ATarget.PropertyGet('Range', ['A1']));
  tRange.InvokeMethod('PasteSpecial', []);
end;

function TKBBD1.AddWorksheet(AName: String; AWorkSheets: DispatchHelper): DispatchHelper;
begin
  Result := DispatchHelper.Create(AWorkSheets.InvokeMethod('Add', []));
  Result.PropertyPut('Name', [AName]);
end;

procedure TKBBD1.Button2Click(Sender: TObject);
var
  lFileName, lSource: String;
  oExcel, oWorksheet: object;
  app, workbooks, sourceworkbook, sourceworksheets, sourceworksheet,
  workbook, worksheets, worksheet: DispatchHelper;
begin
  lfilename:='c:\a.xls';
  lSource := 'c:\b.xls';
  try
  oExcel:= ComObj.CreateOleObject('Excel.Application');
  app := DispatchHelper.Create(oExcel);
  app.PropertyPut('Visible', [False]);
  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]));

  workbook := DispatchHelper.Create(workbooks.InvokeMethod('Open',[lFileName]));//打开文件
  worksheets := System.DispatchHelper.Create(workbook.PropertyGet('Sheets',[]));

//  worksheet := AddWorksheet('newSheet', worksheets);
  worksheet := System.DispatchHelper.Create(worksheets.PropertyGet('Item',[1]));
  copyArea(sourceworksheet, worksheet);
  finally
  workbooks.InvokeMethod('Close', []);
  oExcel := nil;
  app := nil;
  end;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-5-18 16:48:07 | 显示全部楼层
worksheet := System.DispatchHelper.Create(worksheets.PropertyGet('Item',[1]));
有没其它方法 ,可以如上方式取到 某个Sheet , 知道sheet名称。
如何写。  
顺便说下: 通过宏   用DispatchHelper 来转化的用法 , 有点难度。。。 参数都不知道如何对应。
回复 支持 反对

使用道具 举报

发表于 2009-5-18 16:51:06 | 显示全部楼层
http://www.softwelt.com/Know/KnowDetail-2640278.html


excel.Application.DisplayAlerts = False
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-20 23:00 , Processed in 0.052046 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表