| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2593 人关注过本帖
标题:vfp ActiveWorkbook.SaveAs 保存excel,怎么才能不自动打开。
只看楼主 加入收藏
fwy12
Rank: 1
等 级:新手上路
帖 子:59
专家分:0
注 册:2020-2-16
结帖率:94.44%
收藏
已结贴  问题点数:2 回复次数:3 
vfp ActiveWorkbook.SaveAs 保存excel,怎么才能不自动打开。
vfp ActiveWorkbook.SaveAs 保存excel,怎么才能不自动打开。

我有2个sheet要写入,是总表和分表,数据不同。我打算先用vfp打开模板,在名为“总表”的sheet写入数据后保存在C盘,然后再次打开C盘刚保存的文件,在名为“分表”的sheet中写入文件,然后在保存。这样同一个excel的2个sheet都写入数据。

数据可以写人,excel可以保存。现在的问题是,第一个保存在c盘的文件会被自动打开。如何让这个文件不开,在第二个excel保存后,这个文件自动删除。

程序代码:
mc=ALLTRIM(thisform.text1.Value)+"配电柜估价表"
LOCAL lsWJM,OleApp,YXGZS,H
m.lsWJM=PUTFILE("文件名:","&mc.XLS","XLS")
IF EMPTY(m.lsWJM)
   RETURN 
ENDIF
IF !FILE("模板文件.XLS")
   =MessageBox("请先创建Excel模板文件!",64,"系统提示")
   RETURN 
ENDIF
sele cundao
COPY TO SYS(2023)+"\TMPR.DBF" FIELDS 配电柜序号,产品名称,规格型号,单位,数量,单价,合计,品牌  FOR  alltrim(项目名称)=ALLTRIM(thisform.text1.Value) FOX2X &&选择所需要的字段
count for 项目名称=ALLTRIM(thisform.text1.Value) to n &&统计符合条件的条数,用于下面画边框
OleApp=CREATEOBJECT("Excel.Application")
WITH OleApp
     .DisplayAlerts=.F.&&屏蔽要保存excel的提示。
     .Application.WorkBooks.Open(SYS(2023)+"\TMPR.DBF")
     .ActiveSheet.UsedRange.Select
     .Selection.Copy
     .Application.WorkBooks.Open(SYS(5)+SYS(2003)+"\模板文件.XLS") && 模板文件需要路径
    
     
     OleApp.WORKSHEETS("分表").ACTIVATE &&修改后代码,选excel下面的sheet
     OleApp.ActiveSheet.Cells(12,1).value="工程名称:"+ALLTRIM(thisform.text1.Value)
     OleApp.ActiveSheet.Cells(10,7).value="日期:"+DTOC(thisform.text63.Value)
     
     
      .Range("A1").Select
     m.YXGZS=.Cells.Find("开始记录",.ActiveCell,-4123)
     IF VARTYPE(m.YXGZS)="O"
       m.YXGZS.Activate
       Release YXGZS  
       m.H=.ActiveCell.Row  
       .Selection.PasteSpecial(-4163,-4142,.F.,.F.)  &&仅粘贴数值
       .Rows(m.H).Select
       .Selection.Delete
     ELSE
       .Selection.PasteSpecial()
       .Selection.Columns.AutoFit
     ENDIF     
     .Range("A1").Select
     _CLIPTEXT=""
*---------------------以下用来画边框------------------------          
k=17
FW='H16:H'+alltr(str(k+n))   &&H1可调为HX  X=总表头行减2
OleApp.ActiveSheet.Range("&fw.").BorderS(2).LineStyle=1
OleApp.ActiveSheet.Range("&fw.").BorderS(2).Weight=3
FW='A'+alltr(str(k+n))+':H'+alltr(str(k+n))
OleApp.ActiveSheet.Range("&fw.").BorderS(4).LineStyle=1
OleApp.ActiveSheet.Range("&fw.").BorderS(4).Weight=3
FW='A16:A'+alltr(str(k+n))   &&H1可调为HX  X=总表头行减2
OleApp.ActiveSheet.Range("&fw.").BorderS(1).LineStyle=1
OleApp.ActiveSheet.Range("&fw.").BorderS(1).Weight=3

FW='A16:H'+alltr(str(k+n))   &&画内边框
OleApp.ActiveSheet.Range("&fw.").BorderS(1).LineStyle=1
OleApp.ActiveSheet.Range("&fw.").BorderS(4).LineStyle=1
&&OleApp.ActiveSheet.Range("&fw.").BorderS(3).LineStyle=9   
*---------------------以上用来画边框------------------------         
      OleApp.ActiveWindow.DisplayZeros=.F. &&当前屏不显示零值
     .Application.Windows("TMPR.DBF").Activate
     .ActiveWindow.Close
     DELETE FILE SYS(2023)+"\TMPR.*"
     .ActiveWorkbook.SaveAs("C:\配电柜.XLS")
     .Application.Visible=.T. 
     .DisplayAlerts=.T.
     *-----------------导出后的提示------------
     * messagebox("导出完成!",16,"提示!")
      thisform.container4.Visible= .F.
      Thisform.container4.Timer2.Enabled = .F.
  *-----------------导出后的提示------------
ENDWITH
RELEASE OleApp
OleApp = Null


sele cundao
COPY TO SYS(2023)+"\TMPR.DBF" FIELDS 配电柜序号,配电柜编号,规格型号,电箱单位,电箱数量,电箱单价,合计,品牌  FOR  alltrim(项目名称)=ALLTRIM(thisform.text1.Value) AND alltrim(产品名称)=thisform.label7.caption FOX2X &&选择所需要的字段
count for 项目名称=ALLTRIM(thisform.text1.Value) to n &&统计符合条件的条数,用于下面画边框
OleApp=CREATEOBJECT("Excel.Application")
WITH OleApp
     .DisplayAlerts=.F.
     .Application.WorkBooks.Open(SYS(2023)+"\TMPR.DBF")
     .ActiveSheet.UsedRange.Select
     .Selection.Copy
     .Application.WorkBooks.Open("C:\配电柜.XLS") && 模板文件需要路径
     
     OleApp.WORKSHEETS("总表").ACTIVATE &&修改后代码,选excel下面的sheet
     OleApp.ActiveSheet.Cells(12,1).value="工程名称:"+ALLTRIM(thisform.text1.Value)
     OleApp.ActiveSheet.Cells(10,7).value="日期:"+DTOC(thisform.text63.Value)
     
      .Range("A1").Select
     m.YXGZS=.Cells.Find("开始记录",.ActiveCell,-4123)
     IF VARTYPE(m.YXGZS)="O"
       m.YXGZS.Activate
       Release YXGZS  
       m.H=.ActiveCell.Row  
       .Selection.PasteSpecial(-4163,-4142,.F.,.F.)  &&仅粘贴数值
       .Rows(m.H).Select
       .Selection.Delete
     ELSE
       .Selection.PasteSpecial()
       .Selection.Columns.AutoFit
     ENDIF     
     .Range("A1").Select
     _CLIPTEXT=""
*---------------------以下用来画边框------------------------          
k=17
FW='H16:H'+alltr(str(k+n))   &&H1可调为HX  X=总表头行减2
OleApp.ActiveSheet.Range("&fw.").BorderS(2).LineStyle=1
OleApp.ActiveSheet.Range("&fw.").BorderS(2).Weight=3
FW='A'+alltr(str(k+n))+':H'+alltr(str(k+n))
OleApp.ActiveSheet.Range("&fw.").BorderS(4).LineStyle=1
OleApp.ActiveSheet.Range("&fw.").BorderS(4).Weight=3
FW='A16:A'+alltr(str(k+n))   &&H1可调为HX  X=总表头行减2
OleApp.ActiveSheet.Range("&fw.").BorderS(1).LineStyle=1
OleApp.ActiveSheet.Range("&fw.").BorderS(1).Weight=3

FW='A16:H'+alltr(str(k+n))   &&画内边框
OleApp.ActiveSheet.Range("&fw.").BorderS(1).LineStyle=1
OleApp.ActiveSheet.Range("&fw.").BorderS(4).LineStyle=1
&&OleApp.ActiveSheet.Range("&fw.").BorderS(3).LineStyle=9   
*---------------------以上用来画边框------------------------         
     
     .Application.Windows("TMPR.DBF").Activate
     .ActiveWindow.Close
      DELETE FILE SYS(2023)+"\TMPR.*"
     .ActiveWorkbook.SaveAs(m.lsWJM)
     .Application.Visible=.T. 
     .DisplayAlerts=.T.
ENDWITH
RELEASE OleApp
OleApp = Null


[此贴子已经被作者于2020-3-6 21:59编辑过]

搜索更多相关主题的帖子: str Value excel 文件 thisform 
2020-03-06 21:07
xuminxz
Rank: 11Rank: 11Rank: 11Rank: 11
等 级:贵宾
威 望:41
帖 子:766
专家分:2517
注 册:2011-5-8
收藏
得分:1 
创建2个对象,分别操作

dBase有人接盘了。
2020-03-06 21:29
瓜瓜1990
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:18
帖 子:125
专家分:699
注 册:2020-2-25
收藏
得分:1 
一个工作簿有两个表对吗,可以用worksheets()切换sheet表,不用分两次次吧?然后关闭工作簿,释放Excel对象。

piu~piu~
2020-03-06 21:37
fwy12
Rank: 1
等 级:新手上路
帖 子:59
专家分:0
注 册:2020-2-16
收藏
得分:0 
回复 3楼 瓜瓜1990
可以进行切换,但是这两个表的字段不一样的。

这是我目前的代码

程序代码:
mc=ALLTRIM(thisform.text1.Value)+"配电柜估价表"
LOCAL lsWJM,OleApp,YXGZS,H
m.lsWJM=PUTFILE("文件名:","&mc.XLS","XLS")
IF EMPTY(m.lsWJM)
   RETURN 
ENDIF
IF !FILE("模板文件.XLS")
   =MessageBox("请先创建Excel模板文件!",64,"系统提示")
   RETURN 
ENDIF
sele cundao
COPY TO SYS(2023)+"\TMPR.DBF" FIELDS 配电柜序号,产品名称,规格型号,单位,数量,单价,合计,品牌  FOR  alltrim(项目名称)=ALLTRIM(thisform.text1.Value) FOX2X &&选择所需要的字段
count for 项目名称=ALLTRIM(thisform.text1.Value) to n &&统计符合条件的条数,用于下面画边框
OleApp=CREATEOBJECT("Excel.Application")
WITH OleApp
     .DisplayAlerts=.F.&&屏蔽要保存excel的提示。
     .Application.WorkBooks.Open(SYS(2023)+"\TMPR.DBF")
     .ActiveSheet.UsedRange.Select
     .Selection.Copy
     .Application.WorkBooks.Open(SYS(5)+SYS(2003)+"\模板文件.XLS") && 模板文件需要路径
    
     
     OleApp.WORKSHEETS("分表").ACTIVATE &&修改后代码,选excel下面的sheet
     OleApp.ActiveSheet.Cells(12,1).value="工程名称:"+ALLTRIM(thisform.text1.Value)
     OleApp.ActiveSheet.Cells(10,7).value="日期:"+DTOC(thisform.text63.Value)
     
     
      .Range("A1").Select
     m.YXGZS=.Cells.Find("开始记录",.ActiveCell,-4123)
     IF VARTYPE(m.YXGZS)="O"
       m.YXGZS.Activate
       Release YXGZS  
       m.H=.ActiveCell.Row  
       .Selection.PasteSpecial(-4163,-4142,.F.,.F.)  &&仅粘贴数值
       .Rows(m.H).Select
       .Selection.Delete
     ELSE
       .Selection.PasteSpecial()
       .Selection.Columns.AutoFit
     ENDIF     
     .Range("A1").Select
     _CLIPTEXT=""
*---------------------以下用来画边框------------------------          
k=17
FW='H16:H'+alltr(str(k+n))   &&H1可调为HX  X=总表头行减2
OleApp.ActiveSheet.Range("&fw.").BorderS(2).LineStyle=1
OleApp.ActiveSheet.Range("&fw.").BorderS(2).Weight=3
FW='A'+alltr(str(k+n))+':H'+alltr(str(k+n))
OleApp.ActiveSheet.Range("&fw.").BorderS(4).LineStyle=1
OleApp.ActiveSheet.Range("&fw.").BorderS(4).Weight=3
FW='A16:A'+alltr(str(k+n))   &&H1可调为HX  X=总表头行减2
OleApp.ActiveSheet.Range("&fw.").BorderS(1).LineStyle=1
OleApp.ActiveSheet.Range("&fw.").BorderS(1).Weight=3

FW='A16:H'+alltr(str(k+n))   &&画内边框
OleApp.ActiveSheet.Range("&fw.").BorderS(1).LineStyle=1
OleApp.ActiveSheet.Range("&fw.").BorderS(4).LineStyle=1
&&OleApp.ActiveSheet.Range("&fw.").BorderS(3).LineStyle=9   
*---------------------以上用来画边框------------------------         
      OleApp.ActiveWindow.DisplayZeros=.F. &&当前屏不显示零值
     .Application.Windows("TMPR.DBF").Activate
     .ActiveWindow.Close
     DELETE FILE SYS(2023)+"\TMPR.*"
     .ActiveWorkbook.SaveAs("C:\配电柜.XLS")
     .Application.Visible=.T. 
     .DisplayAlerts=.T.
     *-----------------导出后的提示------------
     * messagebox("导出完成!",16,"提示!")
      thisform.container4.Visible= .F.
      Thisform.container4.Timer2.Enabled = .F.
  *-----------------导出后的提示------------
ENDWITH
RELEASE OleApp
OleApp = Null


sele cundao
COPY TO SYS(2023)+"\TMPR.DBF" FIELDS 配电柜序号,配电柜编号,规格型号,电箱单位,电箱数量,电箱单价,合计,品牌  FOR  alltrim(项目名称)=ALLTRIM(thisform.text1.Value) AND alltrim(产品名称)=thisform.label7.caption FOX2X &&选择所需要的字段
count for 项目名称=ALLTRIM(thisform.text1.Value) to n &&统计符合条件的条数,用于下面画边框
OleApp=CREATEOBJECT("Excel.Application")
WITH OleApp
     .DisplayAlerts=.F.
     .Application.WorkBooks.Open(SYS(2023)+"\TMPR.DBF")
     .ActiveSheet.UsedRange.Select
     .Selection.Copy
     .Application.WorkBooks.Open("C:\配电柜.XLS") && 模板文件需要路径
     
     OleApp.WORKSHEETS("总表").ACTIVATE &&修改后代码,选excel下面的sheet
     OleApp.ActiveSheet.Cells(12,1).value="工程名称:"+ALLTRIM(thisform.text1.Value)
     OleApp.ActiveSheet.Cells(10,7).value="日期:"+DTOC(thisform.text63.Value)
     
      .Range("A1").Select
     m.YXGZS=.Cells.Find("开始记录",.ActiveCell,-4123)
     IF VARTYPE(m.YXGZS)="O"
       m.YXGZS.Activate
       Release YXGZS  
       m.H=.ActiveCell.Row  
       .Selection.PasteSpecial(-4163,-4142,.F.,.F.)  &&仅粘贴数值
       .Rows(m.H).Select
       .Selection.Delete
     ELSE
       .Selection.PasteSpecial()
       .Selection.Columns.AutoFit
     ENDIF     
     .Range("A1").Select
     _CLIPTEXT=""
*---------------------以下用来画边框------------------------          
k=17
FW='H16:H'+alltr(str(k+n))   &&H1可调为HX  X=总表头行减2
OleApp.ActiveSheet.Range("&fw.").BorderS(2).LineStyle=1
OleApp.ActiveSheet.Range("&fw.").BorderS(2).Weight=3
FW='A'+alltr(str(k+n))+':H'+alltr(str(k+n))
OleApp.ActiveSheet.Range("&fw.").BorderS(4).LineStyle=1
OleApp.ActiveSheet.Range("&fw.").BorderS(4).Weight=3
FW='A16:A'+alltr(str(k+n))   &&H1可调为HX  X=总表头行减2
OleApp.ActiveSheet.Range("&fw.").BorderS(1).LineStyle=1
OleApp.ActiveSheet.Range("&fw.").BorderS(1).Weight=3

FW='A16:H'+alltr(str(k+n))   &&画内边框
OleApp.ActiveSheet.Range("&fw.").BorderS(1).LineStyle=1
OleApp.ActiveSheet.Range("&fw.").BorderS(4).LineStyle=1
&&OleApp.ActiveSheet.Range("&fw.").BorderS(3).LineStyle=9   
*---------------------以上用来画边框------------------------         
     
     .Application.Windows("TMPR.DBF").Activate
     .ActiveWindow.Close
      DELETE FILE SYS(2023)+"\TMPR.*"
     .ActiveWorkbook.SaveAs(m.lsWJM)
     .Application.Visible=.T. 
     .DisplayAlerts=.T.
ENDWITH
RELEASE OleApp
OleApp = Null
2020-03-06 21:58
快速回复:vfp ActiveWorkbook.SaveAs 保存excel,怎么才能不自动打开。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.021150 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved