在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)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)