起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 985|回复: 12

【结】[重要]修改EXCEL的SHEET名字

[复制链接]
发表于 2010-9-16 09:21:59 | 显示全部楼层 |阅读模式
static Procedure TZLZYJ.UpdSheetName(SXlsName , SSheetName: String);
var
  oExcel : Variant;
  AppExcel , workbooks , worksheets , workbook , worksheet , sactivesheets : System.DispatchHelper;
  oworkbooks , sactivebooks : object;
begin
  oExcel := ComObj.CreateOleObject('Excel.Application');
  if AppExcel= nil then
    AppExcel := System.DispatchHelper.Create(oExcel);
  if workbooks = nil then
    oworkbooks := AppExcel.PropertyGet('WorkBooks',[]);
  try
    workbooks := System.DispatchHelper.Create(oWorkbooks);
    workbook := System.DispatchHelper.Create(workbooks.InvokeMethod('Open',[SXlsName]));
    worksheets := System.DispatchHelper.Create(workbook.PropertyGet('Sheets',[]));
    worksheet := System.DispatchHelper.Create(worksheets.PropertyGet('Item',[1]));
    worksheet.PropertyPut('Name',[SSheetName]);
    workbook.InvokeMethod('SAVEAS',[SXlsName]);
  finally
    //workbook.InvokeMethod('close',[]);
    (oExcel as System.IDisposable).Dispose;
  end;
end;

上述代码执行时不报错,执行是这样的,我是先调用了CopySheetToExcel函数保存EXCEL,然后有上述代码打开这个EXCEL文件,修改其SHEET的名字,运行时会提示文件已存在是否覆盖,另外,进程中的EXCEL还存在。请问怎么修改这段代码呀,在线等,谢谢。
回复

使用道具 举报

 楼主| 发表于 2010-9-16 09:53:19 | 显示全部楼层
怎么没有人回复
回复 支持 反对

使用道具 举报

发表于 2010-9-16 11:26:02 | 显示全部楼层
提示文件已存在是因为您的电脑中在当前要保存的位置已经有同名文件存在,所以windows会提示您是否覆盖。
另外,excel进程还存在的问题请参考这个帖子六楼的内容。
http://bbs.justep.com/forum.php?mod=viewthread&tid=27065
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-9-16 12:42:23 | 显示全部楼层
那我怎么才能够不另存,而是直接保存呢?
回复 支持 反对

使用道具 举报

发表于 2010-9-16 13:35:25 | 显示全部楼层
workbook.InvokeMethod('SAVEAS',['e:\SXlsName.xls']);            
这句是另存为。。。
workbook.InvokeMethod('SAVE',[]);            
这句是保存到当前打开的excel
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-9-16 13:46:32 | 显示全部楼层
---------------------------
X3 Studio
---------------------------
运行系统初始化的时候发生异常:不能将System.DispatchHelper转换成为System.IDisposable

类型:Exception。
---------------------------
确定   
---------------------------

系统执行到FINALLY时就报这个错误了,怎么解决?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-9-16 13:56:03 | 显示全部楼层
将变量声明为OBJECT就报错了,帮忙试试,呵呵。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-9-16 13:57:20 | 显示全部楼层
static Procedure TZLZYJ.UpdSheetName(SXlsName , SSheetName: String);
var
  oExcel : Variant;
  AppExcel , workbooks , worksheets , workbook , worksheet , sactivesheets : System.DispatchHelper;
  oworkbooks , sactivebooks : object;
begin
  oExcel := ComObj.CreateOleObject('Excel.Application');
  if AppExcel= nil then
    AppExcel := System.DispatchHelper.Create(oExcel);
  if workbooks = nil then
    oworkbooks := AppExcel.PropertyGet('WorkBooks',[]);
  try
    workbooks := System.DispatchHelper.Create(oWorkbooks);
    workbook := System.DispatchHelper.Create(workbooks.InvokeMethod('Open',[SXlsName]));
    worksheets := System.DispatchHelper.Create(workbook.PropertyGet('Sheets',[]));
    worksheet := System.DispatchHelper.Create(worksheets.PropertyGet('Item',[1]));
    worksheet.PropertyPut('Name',[SSheetName]);
    workbook.InvokeMethod('SAVE',[]);
  finally
    (worksheet as System.IDisposable).Dispose;
    (worksheets as System.IDisposable).Dispose;
    (workbook as System.IDisposable).Dispose;
    (workbooks as System.IDisposable).Dispose;
    (oworkbooks as System.IDisposable).Dispose;
    (AppExcel as System.IDisposable).Dispose;
    (oExcel as System.IDisposable).Dispose;
  end;
end;

这段代码执行到FINALLY就报6楼的错误信息了。
回复 支持 反对

使用道具 举报

发表于 2010-9-16 14:13:50 | 显示全部楼层
看到了,稍等
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-9-16 14:24:08 | 显示全部楼层
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-6 17:53 , Processed in 0.039470 second(s), 15 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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