使用OLE操作Excel文件能自动保存,不提示保存对话框-在线等 ( 积分: 88 )

  • 主题发起人 主题发起人 jzg007
  • 开始时间 开始时间
J

jzg007

Unregistered / Unconfirmed
GUEST, unregistred user!
我最近在编写一个程序时,利用OLE对象操作Excel文件时,遇到一个问题,就是如何时新建的Excel文件自动保存?我大概的代码如下:
ExcelApp: Variant;
...
try
ExcelApp:=CreateOleObject( 'Excel.Application' );
except
on Exception do raise exception.Create('无法创建Xls文件,请确认是否安装EXCEL!')
end;
Excelapp.DisplayAlerts := False ;
ExcelApp.WorkBooks.Add;
ExcelApp.WorkSheets[1].Activate;
ExcelApp.WorkSheets[1].Name := '1班';
ExcelApp.WorkSheets[1].Cells[1,1].Value := '1班成绩;
ExcelApp.WorkSheets[2].Activate;
ExcelApp.WorkSheets[2].Name := '2班' ;
ExcelApp.WorkSheets[3].Activate;
ExcelApp.WorkSheets[3].Name := '3班' ;
ExcelApp.Save( 'd:/demo.xls' );
程序在运行过程中,没有按的想法将修改后的Excel文件自动保存demo.xls,现请问各位高手如何实现?
 
恳请各位同仁帮忙。
 
procedure FormatXLS(__FileName:String);
var
__Excel,__WorkBook,__Worksheet : OleVariant;
__Col,__Row : integer;
__Range1,__Range2: String;
begin

try
__Excel := CreateOleObject('Excel.Application');
except
ShowMessage('Excel Ole not found');
exit;
end;

__WorkBook := __Excel.WorkBooks.open(__Filename+'.xls');
__WorkSheet:= __WorkBook.activeSheet;

__WorkSheet.UsedRange.Select;
__Row := __Worksheet.UsedRange.Rows.count;
__Col := __WorkSheet.UsedRange.Columns.count ;

//主标题下就是子标题,只对子标题进行设置底色 for example (A2:G2);
__Range1 := chr(ord('A'))+inttostr(2)+':';
__Range1 := __Range1 + chr(Ord('A')-1+__Col)+inttostr(2);

//主标题区域选定
__Range2 := chr(ord('A'))+IntTostr(1)+':';
__Range2 := __Range2 + chr(Ord('A')-1+__Col)+inttostr(1);

try
//先将第一行合并单元格
__worksheet.Range[__Range2].Merge(true);
//设置字体
__Worksheet.usedrange.font.size := 10;
//将表格加边框
__WorkSheet.UsedRange.Borders.LineStyle := 1; //xlContinuous
//设置标题背景色
__Worksheet.Range[__Range1].Interior.ColorIndex := 33;
//冻结窗口
__WorkSheet.Range['A3:Z3'].Select;
__Excel.ActiveWindow.FreezePanes := True ;
//将各列调整为适当的列宽
__workSheet.columns.AutoFit;
//如果有与新文件同名的文件,先删除.生成新的格式化文件
if FileExists(__FileName+formatdatetime('YYYY_MM_DD',now())+'.xls') then
begin
try
if MessageBox(0,'存在与保存文件同名的文件,是否先删除','提示',MB_OKCANCEL+MB_ICONQUESTION) = ID_OK then
DeleteFile(Pchar(__FileName+formatdatetime('YYYY_MM_DD',now())+'.xls'))
else
exit;
except
end;
end;
__Worksheet.SaveAS(__FileName+formatdatetime('YYYY_MM_DD',now())+'.xls',-4143);

//删除原文件
deletefile(Pchar(__FileName+'.xls'));
finally
__Workbook.Close;
__Excel.Quit;
__Excel := UnAssigned;
end;
 
我只是想通过程序自动创建一个文件,并修改内容后,自动保存。无须人干预。
 
最主要的一句: __Worksheet.SaveAS(__FileName+formatdatetime('YYYY_MM_DD',now())+'.xls',-4143);
 
to:starluck 您好:
我将你给我的方法相应修改了一下程序,程序在执行到下面这句时
ExcelApp.SaveAS('d:/jzg.xls',-4143);
提示错误:Method 'SaveAs' not supported by automation object.
我不知道出错原因,难道是我的OLE对象不支持此过程。那我的OLE对象使用不当。
 
平时用的 excel.ActiveSheet.cell行,列].value:=
excel.ActiveSheet.savesa()
 
用ole的savedocumentas 方法(具体方法名记不清了)
 
把你改后的代码贴出来我看一下,我贴的代码是一个已经使用的程序的代码,应该是不会有问题的。
 
ExcelApp.ActiveSheet.SaveAs('d:/jzg.xls', False);
 
ExcelApp.ActiveWorkbook.SaveAs(FileName);
写错了不好意思
应用于 Workbook 对象的 SaveAs 方法。

保存对不同文件中的工作表的更改。

expression.SaveAs(FileName, FileFormat, Password, WriteResPassword, ReadOnlyRecommended, CreateBackup, AccessMode, ConflictResolution, AddToMru, TextCodepage, TextVisualLayout, Local)
expression 必需。该表达式返回上述对象中一个对象。

Filename Variant 类型,可选。该字符串表示要保存的文件名。可包含完整路径。如果不指定路径,Microsoft Excel 将文件保存到当前文件夹中。

FileFormat Variant 类型,可选。保存文件时使用的文件格式。要得到有效选项的列表,请参阅 FileFormat 属性。对于已有文件,其默认格式是上次指定的文件格式;对于新文件,默认格式为当前使用的 Excel 版本格式。

Password Variant 类型,可选。它是一个区分大小写的字符串(最长不超过 15 个字符),用于指定文件的保护密码。

WriteResPassword Variant 类型,可选。 该字符串表示文件的写保护密码。如果文件保存时带有密码,但打开文件时不输入密码,则该文件以只读方式打开。

ReadOnlyRecommended Variant 类型,可选。如果该值为 True,则在打开文件时显示一条信息,提示该文件以只读方式打开。

CreateBackup Variant 类型,可选。如果该值为 True,则创建备份文件。

AccessMode XlSaveAsAccessMode 类型,可选。

XlSaveAsAccessMode 可为以下 XlSaveAsAccessMode 常量之一。
xlExclusive (不含方式)
xlNoChange default (不更改访问方式)
xlShared (共享列表)
如果省略此参数,则不会更改访问方式。如果在没有改变文件名的情况下保存共享列表,则可以忽略参数。若要改变访问方式,请使用 ExclusiveAccess 方法。


ConflictResolution XlSaveConflictResolution 类型,可选。

XlSaveConflictResolution 可为以下 XlSaveConflictResolution 常量之一。
xlUserResolution (显示冲突解决方案对话框)
xlLocalSessionChanges (自动接受本地用户的修改)
xlOtherSessionChanges (接受除本地用户之外的其他用户的更改)
如果忽略本参数,则显示冲突处理对话框。


AddToMru Variant 类型,可选。如果该值为 True ,则将该工作簿添加到最近使用的文件列表中。默认值为 False。

TextCodePage Variant 类型,可选。不在美国英语版的 Microsoft Excel 中使用。

TextVisualLayout Variant 类型,可选。不在美国英语版的 Microsoft Excel 中使用。

Local Variant 类型,可选。如果该值为 True,则以 Microsoft Excel(包括控制面板设置)的语言保存文件。如果该值为 False(默认值),则以 Visual Basic for Applications (VBA) 的语言保存文件,其中 Visual Basic for Applications (VBA) 为典型安装的美国英语版本,除非 VBA 项目中的 Workbooks.Open 来自旧的国际化的 XL5/95 VBA 项目。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部