急急急:请教DELPHI怎么另存EXCEL里的工作簿??

时间:2022-04-03 17:34:07
请教:
    我用DELPHI控制EXCEL文件,在这个EXCEL文件中,我建了一个工作簿(是模板),当新建工作簿时,先将模板文件另存成一个工作簿,请问如何解决??

7 个解决方案

#1


你可以去www.google.com或www.baidu.com搜索一下
  
  用Delphi程序控制Excel的操作

 

    使用VBA可以随心所欲地操作Excel。同样,使用Delphi也能完全控制Excel的所有功能。下面,我们以一个例子来入手吧。

    在窗口Form1上面加入组件5个Button和1个CheckBox组件,在Users中加入ComObj单元,在Private加入下面的私有变量:

    Private

        {Private declarations}

        v :Variant;

        Sheet:Variant;

    在单击事件中加入如下代码:

procedure TForm1.Button1Click(Sender:TObject);

begin//打开Excel新建文件

  try 

    v := CreateOleObject('Excel.Application');

    v.Visible:=CheckBox1.Checked;//是否显示Excel

    v.WorkBooks.Add;//新建Excel文件

    v.WorkBooks[1].WorkSheets[1].Name:='操作Excel';//第一页标题

    v.WorkBooks[1].WorkSheets[2].Name:='编程乐园';

    v.WorkBooks[1].WorkSheets[3].Name:='都来看呀';

//    v.WorkBooks[1].WorkSheets['Delphi演示'];'等效下面的语句

    Sheet:=v.WorkBooks[1].WorkBooks[1];

    Sheet.Cells[1,1]:='好看';//单元格内容

    Sheet.Cells[1,2]:='确实';

    Sheet.Cells[1,2]:='我喜欢';

  except//错误处理

    ShowMessage('初始化Excel失败,可能没有装Excel或者其他错误,请重起再试');

    v.DisplayAlerts:=false;//是否提示存盘

    v.Quit;//退出Excel

    exit;

  end;

  Application.Restore;

  Application.BringToFront;

end;    

    其中,ComObj中包含了用来检索OLE的对象和向它传发命令的例程,第一行代码启动Excel,但这时是不可见的,只有在后台运行,所以第二行代码根据CheckBox1.Checked来确定是否显示Excel运行界面。如果需要打开本身存在的Excel文件,则用v.WorkBooks.Open(OpenDialog1.FileName);代替v.WorkBooks.Add;就可以了。

    Sheet对象是很多页面的集合,其他的WorkBooks是工作簿的集合,WorkBooks对象是工作表的集合,Charts对象是图表的集合。

    //Excel文档格式设置

procedrue TForm1.Button5Click(Sender:TObject);

var

  Range:Variant;

begin

  if OpenDialog1.Execute then

  begin

    try

      v:=CreateOleObject('Excel.Application');

      v.Visible:=CheckBox1.Checked;

      v.WorkBooks.OpenDialog1.FileName);

      Range :=v.WorkBooks[1].WorkBooks[1].Range['A2:G2'];//单元格从A2到G2

      Range.Merge;//合并单元格

      Range.Rows.RowHeight :=50;//设置行高;

      Range.Borders.LineStyle:=1;//加边框

      Range.Columns[2].ColumnWidth:=12;//设置列宽

      Range.FormulaR1C1:='合并区';

      Range.HorizontalAlignment:=3;//xlCenter(水平对齐方式)

      Range.VerticalAlignment:=2;//xlCenter(垂直对齐方式)

      Range.Characters.Font.Name:='宋体';//字体

      Range.Characters.Font.Size:=15;

      Range.Characters.Font.OutlineFont:=False;//是否有下划线

      Range.Characters.Font.ColorIndex:=0;//xlAutomatic;颜色

    except//错误处理

    ShowMessage('初始化Excel失败,可能没有装Excel或者其他错误,请重起再试');

    v.DisplayAlerts:=false;//是否提示存盘

    v.Quit;//退出Excel

  end;

end;      

//EXCEL打印页面设置及打印预览

procedure TForm1.Button4Click(Sender:TObject);

begin

  if OpenDialog1.Execute then

  begin

    try

      v:=CreateOleObject('Excel.Application');

      v.Visible:=CheckBox1.Checked;

      v.WorkBooks.OpenDialog1.FileName);

      Sheet:=v.WorkBooks[1].WorkBooks[1];

      Sheet.PageSetup.PrintTitleRows:='$1:$3';//页眉

      Sheet.PageSetup.PrintTitleColumns:='';

      Sheet.PageSetup.LeftFooter:='注:页脚'+'总共&N页'+'——第&P页';//页脚

      Sheet.PageSetup.LeftMargin:=30;//设置边距

      Sheet.PageSetup.RightMargin:=30;

      Sheet.PageSetup.TopMargin:=30;

      Sheet.PageSetup.BottomMargin:=50;

//      Sheet.PageSetup.PrintQuality:= 400;//分辨率(根据打印机确定)   

      Sheet.PageSetup.CenterHorizontally:=true;//是否水平居中

      Sheet.PageSetup.CenterVertical:=true;//是否垂直居中

      Sheet.PageSetup.Orientation:=2;//横向打印

      Sheet.PageSetup.Draft:=false;//非草稿模式

//      Sheet.PageSetup.FirstPageNumber:=xlAutomatic;

      Sheet.PageSetup.BlackAndWhite:=true;//黑白稿

      Sheet.PageSetup..Zoom:=100;//缩放

      Sheet.PrintPreView;//打印预览

    except//错误处理

      ShowMessage('初始化Excel失败,可能没有装Excel或者其他错误,请重起再试');

      v.DisplayAlerts:=false;//是否提示存盘

      v.Quit;//退出Excel

    end;

  end;

end;

    最后就是要关闭Excel了。在创建了Excel Application对象后,调用它的Quit方法完成关闭事件。

//关闭EXCEL并退出

procedure TForm1.Button3Click(Sender:TObject);

begin

  try

    if not varIsEmpty(v) then

    begin//如果需要在关闭前确定是否存盘,加入:

//      v.DiaplayAlert:=true;//确定存盘

//      v.DialayAlert:=False;//不存盘,直接退出

      v.WorkBooks[1].Close(True,'C:\untitled.xls');// 取文件名退出

      v.Quit;

    end;

  finally

    Close;

  end

end;

#2


这位老兄真有意思,题目也不看清楚,随便在网上搜下,就复制粘贴过来,不过,还是谢谢你。
请看题目好吗????

:((

#3


楼上老兄简直在害我,别人都以为解决了

#4


其实他是真的解决拉,只要看好最后的就行啦
v.WorkBooks[1].Close(True,'C:\untitled.xls');// 取文件名退出

#5


hehe

#6


如果使用OLE这个问题就很好办

#7


uses comobj;
var e:variant;
begin
  e:=createoleobject('excel.application');
  e.workbooks.open('c:\test.xls');  //打开你的excel文件
  e.workbooks[1].saveas('c:\test2.xls',CreateBackup:=False); //将当前工作簿另存
  e.WorkBooks[1].saved:=true;
  e.workbooks[1].close;
  e.workbooks.add;   //新建工作簿
  e.visible:=true;
end;

#1


你可以去www.google.com或www.baidu.com搜索一下
  
  用Delphi程序控制Excel的操作

 

    使用VBA可以随心所欲地操作Excel。同样,使用Delphi也能完全控制Excel的所有功能。下面,我们以一个例子来入手吧。

    在窗口Form1上面加入组件5个Button和1个CheckBox组件,在Users中加入ComObj单元,在Private加入下面的私有变量:

    Private

        {Private declarations}

        v :Variant;

        Sheet:Variant;

    在单击事件中加入如下代码:

procedure TForm1.Button1Click(Sender:TObject);

begin//打开Excel新建文件

  try 

    v := CreateOleObject('Excel.Application');

    v.Visible:=CheckBox1.Checked;//是否显示Excel

    v.WorkBooks.Add;//新建Excel文件

    v.WorkBooks[1].WorkSheets[1].Name:='操作Excel';//第一页标题

    v.WorkBooks[1].WorkSheets[2].Name:='编程乐园';

    v.WorkBooks[1].WorkSheets[3].Name:='都来看呀';

//    v.WorkBooks[1].WorkSheets['Delphi演示'];'等效下面的语句

    Sheet:=v.WorkBooks[1].WorkBooks[1];

    Sheet.Cells[1,1]:='好看';//单元格内容

    Sheet.Cells[1,2]:='确实';

    Sheet.Cells[1,2]:='我喜欢';

  except//错误处理

    ShowMessage('初始化Excel失败,可能没有装Excel或者其他错误,请重起再试');

    v.DisplayAlerts:=false;//是否提示存盘

    v.Quit;//退出Excel

    exit;

  end;

  Application.Restore;

  Application.BringToFront;

end;    

    其中,ComObj中包含了用来检索OLE的对象和向它传发命令的例程,第一行代码启动Excel,但这时是不可见的,只有在后台运行,所以第二行代码根据CheckBox1.Checked来确定是否显示Excel运行界面。如果需要打开本身存在的Excel文件,则用v.WorkBooks.Open(OpenDialog1.FileName);代替v.WorkBooks.Add;就可以了。

    Sheet对象是很多页面的集合,其他的WorkBooks是工作簿的集合,WorkBooks对象是工作表的集合,Charts对象是图表的集合。

    //Excel文档格式设置

procedrue TForm1.Button5Click(Sender:TObject);

var

  Range:Variant;

begin

  if OpenDialog1.Execute then

  begin

    try

      v:=CreateOleObject('Excel.Application');

      v.Visible:=CheckBox1.Checked;

      v.WorkBooks.OpenDialog1.FileName);

      Range :=v.WorkBooks[1].WorkBooks[1].Range['A2:G2'];//单元格从A2到G2

      Range.Merge;//合并单元格

      Range.Rows.RowHeight :=50;//设置行高;

      Range.Borders.LineStyle:=1;//加边框

      Range.Columns[2].ColumnWidth:=12;//设置列宽

      Range.FormulaR1C1:='合并区';

      Range.HorizontalAlignment:=3;//xlCenter(水平对齐方式)

      Range.VerticalAlignment:=2;//xlCenter(垂直对齐方式)

      Range.Characters.Font.Name:='宋体';//字体

      Range.Characters.Font.Size:=15;

      Range.Characters.Font.OutlineFont:=False;//是否有下划线

      Range.Characters.Font.ColorIndex:=0;//xlAutomatic;颜色

    except//错误处理

    ShowMessage('初始化Excel失败,可能没有装Excel或者其他错误,请重起再试');

    v.DisplayAlerts:=false;//是否提示存盘

    v.Quit;//退出Excel

  end;

end;      

//EXCEL打印页面设置及打印预览

procedure TForm1.Button4Click(Sender:TObject);

begin

  if OpenDialog1.Execute then

  begin

    try

      v:=CreateOleObject('Excel.Application');

      v.Visible:=CheckBox1.Checked;

      v.WorkBooks.OpenDialog1.FileName);

      Sheet:=v.WorkBooks[1].WorkBooks[1];

      Sheet.PageSetup.PrintTitleRows:='$1:$3';//页眉

      Sheet.PageSetup.PrintTitleColumns:='';

      Sheet.PageSetup.LeftFooter:='注:页脚'+'总共&N页'+'——第&P页';//页脚

      Sheet.PageSetup.LeftMargin:=30;//设置边距

      Sheet.PageSetup.RightMargin:=30;

      Sheet.PageSetup.TopMargin:=30;

      Sheet.PageSetup.BottomMargin:=50;

//      Sheet.PageSetup.PrintQuality:= 400;//分辨率(根据打印机确定)   

      Sheet.PageSetup.CenterHorizontally:=true;//是否水平居中

      Sheet.PageSetup.CenterVertical:=true;//是否垂直居中

      Sheet.PageSetup.Orientation:=2;//横向打印

      Sheet.PageSetup.Draft:=false;//非草稿模式

//      Sheet.PageSetup.FirstPageNumber:=xlAutomatic;

      Sheet.PageSetup.BlackAndWhite:=true;//黑白稿

      Sheet.PageSetup..Zoom:=100;//缩放

      Sheet.PrintPreView;//打印预览

    except//错误处理

      ShowMessage('初始化Excel失败,可能没有装Excel或者其他错误,请重起再试');

      v.DisplayAlerts:=false;//是否提示存盘

      v.Quit;//退出Excel

    end;

  end;

end;

    最后就是要关闭Excel了。在创建了Excel Application对象后,调用它的Quit方法完成关闭事件。

//关闭EXCEL并退出

procedure TForm1.Button3Click(Sender:TObject);

begin

  try

    if not varIsEmpty(v) then

    begin//如果需要在关闭前确定是否存盘,加入:

//      v.DiaplayAlert:=true;//确定存盘

//      v.DialayAlert:=False;//不存盘,直接退出

      v.WorkBooks[1].Close(True,'C:\untitled.xls');// 取文件名退出

      v.Quit;

    end;

  finally

    Close;

  end

end;

#2


这位老兄真有意思,题目也不看清楚,随便在网上搜下,就复制粘贴过来,不过,还是谢谢你。
请看题目好吗????

:((

#3


楼上老兄简直在害我,别人都以为解决了

#4


其实他是真的解决拉,只要看好最后的就行啦
v.WorkBooks[1].Close(True,'C:\untitled.xls');// 取文件名退出

#5


hehe

#6


如果使用OLE这个问题就很好办

#7


uses comobj;
var e:variant;
begin
  e:=createoleobject('excel.application');
  e.workbooks.open('c:\test.xls');  //打开你的excel文件
  e.workbooks[1].saveas('c:\test2.xls',CreateBackup:=False); //将当前工作簿另存
  e.WorkBooks[1].saved:=true;
  e.workbooks[1].close;
  e.workbooks.add;   //新建工作簿
  e.visible:=true;
end;