如何用VC创建一个excel文档?

如何用VC创建一个excel文档?,第1张

下面介绍的方法可以参考:

在Visual C中如何进行处理了利用Excel 2000的ActiveX Automate功能处理起来同VB中类似。

但要注意以下几点 对于对象的属性值的读取或赋值需要用GetProperty或SetPropertyNewValue函数不能象VB中直接通过属性名称取值或赋值。

例如Worksheet.GetCount Worksheet.SetName“Sheet1”。

对集合对象中的成员对象的引用必须使用集合对象的GetItem函数。

例如Worksheets.GetItemColeVariantlong1或Worksheets.GetItemColeVariant“Sheet1”取得第一个工作表。

在COM接口中时常用到VariantBSTRSafeArray数据类型

Variant数据类型是一个联合可表示几乎所有的类型的数据具体用法见MSDN中的相关介绍类_variant_t是对VARIANT数据类型的封装。

在Excel 2000的VB编程帮助中如果提到某函数或属性需要一个值该值的数据类型通常是Variant在封装Excel 2000对象的类定义中说明了具体需要的数据类型。

BSTR是一个包括了字符串和字符串长度的数据结构类_bstr_t是对BSTR数据类型的封装。

在Excel 2000的VB编程帮助中提到的字符串通常指BSTR。

具体函数参数或属性的数据类型见封装该对象的类的定义。

SafeArray是一个包括数组和数组边界的结构数组边界外的内容不允许访问。

在Excel 2000的VB编程帮助中提到的数组是指SafeArray。

关于SafeArray的处理请见MSDN的相关帮助。

对于缺省参数和缺省值。

在VB中函数的参数可以空缺在VC中不允许必须将所有的参数填写完全。

如果你希望指定某个参数为缺省值根据参数数据类型的不同可指定不同的缺省值。

当参数数据类型为字符串时可以用长度为0的字符串。

如果参数是Variant类型可用常量vtMissing该常量在comdef.h中定义。

也可用_variant_tDISP_E_PARAMNOTFOUND VT_ERROR产生一个Variant对象。

Excel对象中的集合对象有时包括的子对象是不一定的例如Range对象可以表示Cell的集合也可以表示Column的集合或Row的集合Range.GetItem1可以返回Cell或Column或Row对象。

对对象的引用或传递对象使用IDispatch类对象有时利用Variant对IDispatch进行包装。

以下是一段源程序演示如何启动Excel 2000利用一个模板文件产生一个新文档在该文档的”Sheet1”工作表的第一个单元中填写一段文字设置第一列的列宽然后调用一个模板中的宏执行一段程序最后打印预览该Excel文档。

模板文件名称MyTemplate.xlt。

程序在Visual C 6.0 sp4Windows 2000 Professional sp-1下调试通过。

首先利用Visual C 6.0建立一个MFC基于对话框的工程项目共享DLLWin32平台。

工程名称ExcelTest。

在主对话框中加入一个按钮 ID IDC_EXCELTEST Caption Test Excel 双击该按钮增加成员函数void CExcelTestDlg::OnExceltest。

在BOOL CExcelTestApp::InitInstance中dlg.DoModal之前增加代码 if

CoInitializeNULL0 AfxMessageBox初始化COM支持库失败 exit1 在return FALSE 语句前加入

CoUninitialize 选择Menu-View-ClassWizade打开ClassWizade窗口选择Add Class-From a

type library选择D:Program FilesMicrosoft OfficeofficeExcel9.OLBD:Program

FilesMicrosoft Office是本机上Microsoft Office 2000的安装目录可根据个人机器上的实际安装目录修改。

择_Application、Workbooks、_Workbook、Worksheets、_Worksheet、Range加入新类分别为

_Application、Workbooks、_Workbook、Worksheets、_Worksheet、Range头文件Excel9.h源

文件Excel9.cpp。

在ExcelTestDlg.cpp文件的头部include

ExcelTestDlg.h语句之下增加 include comdef.h include Excel9.h 在void

CExcelTestDlg::OnExceltest 函数中增加如下代码 void CExcelTestDlg::OnExceltest

_Application ExcelApp Workbooks wbsMyBooks _Workbook wbMyBook Worksheets

wssMysheets _Worksheet wsMysheet Range rgMyRge //创建Excel 2000服务器启动Excel

if ExcelApp.CreateDispatchExcel.ApplicationNULL

AfxMessageBox创建Excel服务失败 exit1 //利用模板文件建立新文档

wbsMyBooks.AttachDispatchExcelApp.GetWorkbookstrue

wbMyBook.AttachDispatchwbsMyBooks.Add_variant_tg:exceltestMyTemplate.xlt

//得到Worksheets wssMysheets.AttachDispatchwbMyBook.GetWorksheetstrue //得到sheet1

wsMysheet.AttachDispatchwssMysheets.GetItem_variant_tsheet1true

//得到全部Cells此时rgMyRge是cells的集合

rgMyRge.AttachDispatchwsMysheet.GetCellstrue //设置1行1列的单元的值

rgMyRge.SetItem_variant_tlong1_variant_tlong1_variant_tThis Is A Excel

Test Program //得到所有的列 rgMyRge.AttachDispatchwsMysheet.GetColumnstrue

//得到第一列

rgMyRge.AttachDispatchrgMyRge.GetItem_variant_tlong1vtMissing.pdispValtrue

//设置列宽 rgMyRge.SetColumnWidth_variant_tlong200 //调用模板中预先存放的宏

ExcelApp.Run_variant_tCopyRow_variant_tlong10vtMissingvtMissing

vtMissingvtMissingvtMissingvtMissingvtMissingvtMissingvtMissing

vtMissingvtMissingvtMissingvtMissingvtMissingvtMissingvtMissing

vtMissingvtMissingvtMissingvtMissingvtMissingvtMissingvtMissing

vtMissingvtMissingvtMissingvtMissingvtMissingvtMissing //打印预览

wbMyBook.SetSavedtrue ExcelApp.SetVisibletrue

wbMyBook.PrintPreview_variant_tfalse //释放对象 rgMyRge.ReleaseDispatch

wsMysheet.ReleaseDispatch wssMysheets.ReleaseDispatch

wbMyBook.ReleaseDispatch wbsMyBooks.ReleaseDispatch

ExcelApp.ReleaseDispatch 添加完以上程序后可运行看结果。

1、首先,打开媒介工具“记事本”,将word文件里需要导入的数据,复制粘贴到记事本当中,然后保存成为txt文件,本例中将txt文件取名为“数据源.txt”。

2、打开excel表格,点击“数据”选项卡,找到“自文本”。

3、点击“自文本”,d出下一窗口,选择刚才保存的名为“数据源”的txt类型文件,点击“导入”。因“自文本”方式数据导入默认的只有三种文件类型txt、csv、prn,所以需要事先将word转变为txt。

在对话框上放一个ListView控件,把风格设为report,绑定一个变量m_listctrl,在OnInitDialog函数中加入下列代码:

m_listctrl.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_GRIDLINES) //全行选择,显示横线

m_listctrl.InsertColumn(0,"行号",LVCFMT_LEFT,40)

m_listctrl.InsertColumn(1,"品名规格",LVCFMT_LEFT,200)

m_listctrl.InsertColumn(2,"单位",LVCFMT_LEFT,40)

m_listctrl.InsertColumn(3,"数量",LVCFMT_LEFT,100)

m_listctrl.InsertColumn(4,"单价",LVCFMT_LEFT,100)

m_listctrl.InsertColumn(5,"金额",LVCFMT_LEFT,100)

m_listctrl.InsertColumn(6,"备注",LVCFMT_LEFT,100)

int nItem = m_listctrl.InsertItem(0xFFFF,"1")

m_listctrl.SetItem(nItem,1,1,"汽车",NULL,0,0,0)

m_listctrl.SetItem(nItem,2,1,"台",NULL,0,0,0)

m_listctrl.SetItem(nItem,3,1,"10",NULL,0,0,0)


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/bake/11569165.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-17
下一篇 2023-05-17

发表评论

登录后才能评论

评论列表(0条)

保存