通过VFP程序将Excel文件中的图Copy到Word文档中

koolgi 2006-05-19 10:10:38
大家好,本人由于工作需要,需要在VFP中生成一个简报,简报的形式最终生成一个Word文档,文档里面有文字、数字、表格和图片。我首先做了个Word的模板,在用Word编辑模板里把需要插入数字和图片的地方,插入一个标签,然后VFP程序里就可以把VFP表中的数据插入到Word标签的指定位置。当插图的想法是,通过VFP控制Excel创建一个Excel文件并生成一个直方图,然后执行一个copy命令(是在VFP中通过wordbasic实现),然后继续在VFP里开打Word模板将剪切板里的图片,粘贴到模板中。最后我打开Word文件发现本应该是直方图,却成了一个小m,m上还有一个数字2,类似一个m的平方。具体的 请看我的附件里的dot模板文件。

上述实现代码是在微软网站上找到,人家是VB版的,我改成VFP的了,文章题目是:How To Create a Report in Word w/Excel Chart via OLE Automation。
代码下如:
1、生成excel文件,并在文件加入一个直方图
SELECT 1
USE datas\t2_1_3.dbf
eole=CreateObject("excel.application")
eole.Workbooks.Add
xlSheet=eole.Sheets(1)
eole.Caption="VFP应用程序调用Microsoft Excel"
xlSheet.Cells(1,1).value="一车间"
xlSheet.Cells(1,2).value=y1
xlSheet.Cells(2,1).value="二车间"
xlSheet.Cells(2,2).value=200
xlSheet.Cells(3,1).value="三车间"
xlSheet.Cells(3,2).value=150
xlSheet.Cells(4,1).value="四车间"
xlSheet.Cells(4,2).value=223
xlSheet.Cells(5,1).value="五车间"
xlSheet.Cells(5,2).value=152
fanwei="A1:B5"
XlSheet.Range(fanwei).select
objChart1 = xlSheet.ChartObjects.Add(161.25, 1.5, 524.25, 330)
objChart1.Chart.ChartWizard(xlSheet.Range(fanwei), ;
3, 1, 2, 1, 1, .T., "Companies by Max Order Amount", ;
"Company Name", "Max Order Amount", "")

WITH objChart1.Chart.Axes(1).TickLabels.Font
.Name = "Arial"
.FontStyle = "Regular"
.Size = 4
.Strikethrough = .F.
.Superscript = .F.
.Subscript = .F.
.OutlineFont = .F.
.Shadow = .F.
.Underline = 1
.ColorIndex = 1
.Background = 1
ENDWITH
eole.DisplayAlerts=.F.
fname="E\abc.xls"
eole.ActiveWorkbook.Saveas(fname)
objChart1.Copy
rele eole,XlSheet
CLOSE DATABASES
MESSAGEBOX("OK")
RETURN

特别注意:objChart1.Copy是把图copy到剪切板

2、将剪切板里的图copy到word中:
PROCEDURE ProduceJB
oWordObj=CREATEOBJECT("Word.Basic")
oWordObj.FileOpen("\Template\jianbao.dot")
oWordObj.ww7_EditGoto("BM1")
oWordObj.Insert(STR(YEAR(DATE()),4,0))
oWordObj.ww7_EditGoTo("BM2")
oWordObj.Insert(STR(YEAR(DATE()) + 1,4,0))
oWordObj.ww7_EditGoTo("BM3")
oWordObj.Insert("广州")
oWordObj.ww7_EditGoTo("CHART1")
oWordObj.EditPaste
oWordObj.PasteAndFormat
oWordObj.FileSaveAs("\简报.doc")
oWordObj.AppClose("Microsoft Word")
RELEASE oWordObj
CLOSE DATABASES
 MESSAGEBOX("OK")
RETURN
ENDPROC

特别是oWordObj.EditPaste,这句,实现将剪切板里的图copy到Word中,不过无法实现,是一个m平方的图标

请大家帮忙解决!

谢谢大家!
...全文
325 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
十豆三 2006-05-22
  • 打赏
  • 举报
回复
这个我测试通过了:

eole=CREATEOBJECT("excel.application")
eole.Workbooks.ADD
xlSheet=eole.Sheets(1)
eole.CAPTION="VFP应用程序调用Microsoft Excel"
xlSheet.Cells(1,1).VALUE="一车间"
xlSheet.Cells(1,2).VALUE=100
xlSheet.Cells(2,1).VALUE="二车间"
xlSheet.Cells(2,2).VALUE=200
xlSheet.Cells(3,1).VALUE="三车间"
xlSheet.Cells(3,2).VALUE=150
xlSheet.Cells(4,1).VALUE="四车间"
xlSheet.Cells(4,2).VALUE=223
xlSheet.Cells(5,1).VALUE="五车间"
xlSheet.Cells(5,2).VALUE=152
fanwei="A1:B5"
XlSheet.RANGE(fanwei).SELECT
objChart1 = xlSheet.ChartObjects.ADD(161.25, 1.5, 524.25, 330)
objChart1.Chart.ChartWizard(xlSheet.RANGE(fanwei), ;
3, 1, 2, 1, 1, .T., "Companies by Max Order Amount", ;
"Company Name", "Max Order Amount", "")

WITH objChart1.Chart.Axes(1).TickLabels.FONT
.NAME = "Arial"
.FontStyle = "Regular"
.SIZE = 4
.Strikethrough = .F.
.Superscript = .F.
.Subscript = .F.
.OutlineFont = .F.
.SHADOW = .F.
.Underline = 1
.ColorIndex = 1
.Background = 1
ENDWITH
eole.DisplayAlerts=.F.
fname="D:\TEST\abc.xls"
eole.ActiveWorkbook.SAVEAS(fname)
objChart1.COPY
CLOSE DATABASES

MESSAGEBOX("OK1")

ProduceJB()
eole.Workbooks.CLOSE
eole.QUIT
RELE eole,XlSheet


RETURN
PROCEDURE ProduceJB
oWordObj=CREATEOBJECT("Word.application")
oWordObj.VISIBLE=.T.
oWordObj.Documents.OPEN("D:\TEST\EFG.DOC")
oWordObj.Selection.Range.Paste
oWordObj.ActiveDocument.Saved=.t.
MESSAGEBOX("OK2")
oWordObj.QUIT
RELEASE oWordObj
RETURN
ENDPROC
koolgi 2006-05-22
  • 打赏
  • 举报
回复
to :apple_8180(十豆三)
我调试了你的代码,运行时在oWordObj.Selection.Range.Paste中出现错误,说成员selection不是一个对象。

另外,我在别的帖子上看到你整理了VFP对word的控制,如方便请发给我一份,谢谢!
cuicolate@hotmail.com
koolgi 2006-05-22
  • 打赏
  • 举报
回复
to woxiangfang:因为我想让用户一点按钮直接生成一个有图文并茂的word简报,如果按您说的意思用户就要打开Excel文件,copy,再打开word文件,再paste,这不是多了许多步骤吗?

多交流,有没有更好的方法呢?
koolgi 2006-05-22
  • 打赏
  • 举报
回复
是十豆三哟,我打错喽,不好意思!
koolgi 2006-05-22
  • 打赏
  • 举报
回复
另外,谢谢豆十三,我收到你的邮件了,谢谢!如果你有msn请加我!
koolgi 2006-05-22
  • 打赏
  • 举报
回复
你的ProduceJB代码是用得是:
oWordObj=CREATEOBJECT("Word.application")

而我用的是:oWordObj=CREATEOBJECT("Word.Basic")

由于我下面的代码是根据word模板中的标签来向word文件中插入文字或图的,如果用你的oWordObj=CREATEOBJECT("Word.application")代码,那么后面的oWordObj.ww7_EditGoto("BM1")等代码都不能用了。

另外,oWordObj=CREATEOBJECT("Word.application")和oWordObj=CREATEOBJECT("Word.Basic")有什么不同呢,我知道后者用到了wordbasic命令。
淡蓝冰 2006-05-19
  • 打赏
  • 举报
回复
想不通為什麼不直接将Excel文件中的图Copy到Word文档中,而非要通過VFP,有意義嗎?
十豆三 2006-05-19
  • 打赏
  • 举报
回复

RELE eole,XlSheet

放在将剪切板里的图copy到word中之后,即先释放WORD,最后释放EXCEL


同时把
oWordObj.EditPaste
改为
oWordObj.Selection.Range.Paste

2,718

社区成员

发帖
与我相关
我的任务
社区描述
VFP,是Microsoft公司推出的数据库开发软件,用它来开发数据库,既简单又方便。
社区管理员
  • VFP社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧