vc使用wps表格
使用VC6.0实现自动生成Word表格

使用VC6.0实现自动生成Word表格使用VC 6.0实现自动生成Word表格2010-10-16 11:25最近在VC6.0 环境下开发一个管理系统,界面开发花了不少功夫却感觉华而不实,自动生成word表格的功能实现了,倒觉得蛮实用的(1)首先,向你的项目中添加word 2003类型库:方法是在MFC ClassWizard中点击按钮Add Class,选择From a type library,在弹出的浏览对话框中,浏览找到office 2003安装路径下的msword.olb文件,例如:"C:\Program Files\Microsoft Office\OFFICE11\MSWORD.OLB",然后选择所需要的类(参考第(3)步),确定(2)在使用到这些类型的类的头文件或者cpp文件的开头,包含以下头文件:#include "msword.h"(3)定义对象_Application oWordApp;Documents oDocs;_Document oDoc;Range range;Paragraph paragraph;Paragraphs paragraphs;Cell cell;Cells cells;Table table;Tables tables;Border border;Borders borders;_Font font;PageSetup pagesetup;(4)创建或者连接word对象:初始化连接,判断当前系统是否有word进程,然后然后创建或连接对象。
LPDISPATCH pDisp; LPUNKNOWN pUnk; CL SID clsid;CoInitialize(NULL);CLSIDFromProgID(L"Word.Application",&clsid);if(GetActiveObject(clsid,NULL,&pUnk)==S_OK){pUnk-> QueryInterface(IID_IDispatch,(void **)&pDisp);oWordApp.AttachDispatch(pDisp);}else{if(!oWordApp.CreateDispatch("Word.Application")){AfxMessageBox("创建Word服务失败!");return FALSE;}}(5)初始化文档,生成WORD表格oDocs.ReleaseDispatch();oWordApp.m_bAutoRelease=true;BeginWaitCursor();oDocs=oWordApp.GetDocuments();COleVariant vOpt(DISP_E_PARAMNOTFOUND, VT_ERROR);oDoc=oDocs.Add(vOpt,vOpt,vOpt,vOpt);//加新文档pagesetup=oDoc.GetPageSetup();pagesetup.SetOrientation(1);//横向paragraphs=oDoc.GetParagraphs(); //生成第一个表paragraph=paragraphs.GetLast();//以当前段落最后一行为表起始位置range=paragraph.GetRange();//添加制作新表格tables=oDoc.GetTables();table=tables.Add(range,5+nBhCount,6,vOpt,vOpt);borders=table.GetBorders();borders.SetEnable(1);//显示表框range=table.GetRange();cells=range.GetCells();cells.SetVerticalAlignment(1);//文字居中cells.SetWidth(DOC_TABLE1_WIDTH);cell=table.Cell(1,1);//合并第一行的三列cell.Merge(table.Cell(1,6));range=cell.GetRange();range.SetBold(1);range.SetText(" 病害统计信息");//居中cell=table.Cell(2,1);cell.Merge(table.Cell(2,2));range=cell.GetRange();range.SetBold(1);range.SetText("组成材料");cell=table.Cell(2,2);cell.Merge(table.Cell(2,4));range=cell.GetRange();range.SetBold(1);range.SetText("病害种类");cell=table.Cell(2,3);range=cell.GetRange();range.SetBold(1);range.SetText("病害总数");for(int iBh=0;iBh<nBhCount;iBh++){cell=table.Cell(2+iBh+1,1);cell.Merge(table.Cell(2+iBh+1,2));range=cell.GetRange();range.SetBold(0);range.SetText(psDataArray.GetAt(iBh*3));cell=table.Cell(2+iBh+1,2);cell.Merge(table.Cell(2+iBh+1,4));range=cell.GetRange();range.SetBold(0);range.SetText(psDataArray.GetAt(iBh*3+1));cell=table.Cell(2+iBh+1,3);range=cell.GetRange();range.SetBold(0);range.SetText(psDataArray.GetAt(iBh*3+2));}cell=table.Cell(3+nBhCount,1);//合并7列cell.Merge(table.Cell(3+nBhCount,6));range=cell.GetRange();range.SetBold(1);range.SetText(" 等级统计信息"); for(int iCol=1;iCol<=6;iCol++){cell=table.Cell(3+nBhCount+1,iCol);range=cell.GetRange();range.SetBold(1);range.SetText(strDjColArray[iCol-1]);cell=table.Cell(3+nBhCount+2,iCol);range=cell.GetRange();range.SetBold(0);range.SetText(strDjArray[iCol-1]);}(6)保存,清理CString strSave=m_strFilePath+"\\"+m_strFileName;COleVariant vTrue((short)TRUE), vFalse((short)FALSE);_Document oActiveDoc;oActiveDoc = oWordApp.GetActiveDocument();oActiveDoc.SaveAs(COleVariant(strSave),COleVariant((short) 0), vFalse,COleVariant(""), vTrue,COleVariant(""),vFalse,vFalse, vFalse, vFalse, vFalse,vOpt,vOpt,vOpt,vOpt,vOpt);oWordApp.SetVisible(true);oDocs.ReleaseDispatch(); //断开关联;oWordApp.ReleaseDispatch(); //退出WORDEndWaitCursor();(7)以上代码实现的word表格效果如下实现了单元格的合并,等操作(8)实现单元格的拆分CComVariant con1(3),con2(2);cell=table.Cell(A,B)cell.Split(&con1,&con2);(9)总体来讲:代码的效率还是比较高的!。
vc使用wps表格

vc使用wps表格竭诚为您提供优质文档/双击可除vc使用wps表格篇一:常用wps表格功能(1)1.打开表格。
双击桌面图标,然后点击或者在左上角wps表格的下拉菜单中依次做如下选择新建一个表格如下:2.文字居中功能。
在格子中各行各列输入需要的内容,比如输入以下内容:输入完成后,首先选中文字,然后点击下面图片中红圈圈里的图标。
对应的,居中的旁边图标分别是左对齐和右对齐。
3.表格加框功能。
接下来是将文字内容加框,比较美观,同样也是选中文字,在一下红圈圈图标里选择下拉菜单,选择你想要的框线型,这里的例子是都加框。
居中和加框完成后的样子如下图:4.表格的行高列宽设置功能。
表格可以选择改变行列的高度和宽度,选中一行或者要改变行高的所有行,然后方法一:鼠标右键选择行高在这个窗口里直接输入行高行高。
就会改变、方法二:也是先选中行,然后点击界面右上角图标行和列,如下图然后输入想要的行高和列宽即可。
5.求和功能。
我们可以对表格里每一行每一列的数字进行求和;选中要求和的整行或者整列,然后选择自动求和。
不但可以求和,还可以求平均数等等。
求和后的样子:然后可以在求和后加框,加框可以参考第4点。
6.保存功能。
完成后如果要保存就点击左上方图标,或者选择左上角wps表格的下拉三角号,选择文件,继续选择保存,然后在弹出的窗口进行命名并且选择你要存放的位置即可。
篇二:wps表格常用函数应用教程(经典版)wps表格常用函数应用教程一、函数应用基础(一)函数和公式1.什么是函数wps表格函数即是预先定义,执行计算、分析等处理数据任务的特殊公式。
以常用的求和函数sum为例,它的语法是“sum(数值1,数值2,......)”。
其中“sum”称为函数名称,一个函数只有唯一的一个名称,它决定了函数的功能和用途。
函数名称后紧跟左括号,接着是用逗号分隔的称为参数的内容,最后用一个右括号表示函数结束。
参数是函数中最复杂的组成部分,它规定了函数的运算对象、顺序或结构等。
VC++中操作EXCEL总结(转)

VC++中操作EXCEL总结(转)第一篇:VC++ 中操作EXCEL总结(转)VC++ 中操作EXCEL总结(转)1、MSDN 上的代码,很好的例子#include “excel8.h”// OLE Variant for Optional.COleVariant VOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);_Application objApp;_Workbook objBook;Workbooks objBooks;Worksheets objSheets;_Worksheet objSheet;Range objRange;VARIANT ret;// Instantiate Excel and open an existing workbook.objApp.CreateDispatch(“Excel.Application”);objBoo ks = objApp.GetWorkbooks();objBook = objBooks.Open(“C:Test.xls”, VOptional, VOptional, VOptional, VOptional, VOptional, VOptional, VOptional, VOptional, VOptional, VOptional, VOptional, VOptional);objSheets = objBook.GetWorksheets();objSheet = objSheets.GetItem(COleVariant((short)1));//Get the range object for which you wish to retrieve the //data and then retrieve the data(as a variant array, ret).objRange = objSheet.GetRange(COleVariant(“A1”), COleVariant(“C8”));ret = objRange.GetValue();//Create the SAFEARRAY from the VARIANT ret.COleSafeArray sa(ret);//Determine the array's dimensions.long lNumRows;long lNumCols;sa.GetUBound(1, &lNumRows);sa.GetUBound(2, &lNumCols);//Display the elements in the SAFEARRAY.longindex[2];VARIANT val;int r, c;TRACE(“Contents of SafeArra yn”);TRACE(“=====================nt”);for (c=1;c<=lNumCols;c++){TRACE(“ttCol %d”, c);}TRACE(“n”);for(r=1;r<=lNumRows;r++){TRACE(“Row %d”, r);for(c=1;c<=lNumCols;c++){index[0]=r;index[1]=c;sa.GetElement(index, &val);switch(val.vt){case VT_R8: {TRACE(“tt%1.2f”, val.dblVal);break;}case VT_BSTR: {TRACE(“tt%s”,(CString)val.bstrVal);break;}case VT_EMPTY: {TRACE(“tt”);break;} } }TRACE(“n”);}//Close the workbook without saving changes //and quit Microsoft Excel.objBook.Close(COleVariant((short)FALSE), VOptional, VOptional);objApp.Quit();2、不错的一篇文章在VC中彻底玩转Excel作者:龚敏来源:子玉山庄更新:10/8/2004如今Excel是越来越重要了,在我们自己开发的程序中不免要和Excel打交道了。
VC++操作EXCEL表格,附带两个小例子

C++读取Excel的XLS文件的方法有很多,但是也许就是因为方法太多,大家在选择的时候会很疑惑。
由于前两天要做导表工具,比较了常用的方法,总结一下写个短文,1.OLE的方式这个大约是最常用的方式,这个方式其实启动了一个EXCEL的进程在背后读写EXCEL 文件,这个方式的最大好处是什么事情都能做。
包括设置EXCEL的格式,增加删除Sheet,读写单元格,等等。
功能几乎是最全的,而且使用起来也不是特别的难。
其基本方法都是使用导出的.h文件进行OLE操作,但是由于OLE的接口说明文档不多,想非常完美的使用她们也不是太容易,好在例子也很多。
网上普遍认为OLE速度慢,EXCEL的OLE读写方式也基本一样。
但是读取速度可以改进,如果在读取的加载整个Sheet的Range的全部数据,而不是一个个单元格读取,那么速度还是相对不错。
想想原理也很简单,整体读取减少了OLE的交互次数。
OLE的写入方式一般只能几个进行比较方便,所以速度可能要快很多。
我自己的亲身体会是,一个EXCEL文件,100多列的字段,如果采用一个个单元格的读取方式,1s大约3条左右的记录,如果整体读取,速度可以提高几十倍。
OLE读写EXCEL方式功能很强大,读取速度还可以,但写入速度不高,当然这个方式不可能移植的,而且你必须安装了EXCEL。
2.Basic EXCEL 方式这是CodeProject上的一个推荐开源工程了,/KB/office/BasicExcel.aspx作者是基于EXCEL的文件格式进行的处理。
但是为什么叫Basic EXCEL呢。
他不支持很多东西,公式,文件格式,表格合并等(有人说中文支持也不好),所以可以认为他只支持最基本的EXCEL表格,我自己的尝试是如果这个EXCEL文件有其他元素(公式,格式等),使用Basic EXCEL读取会失败。
OLE读写EXCEL方式功能比较弱,由于是直接根据文件格式操作,读写速度都不错,你也不需要按照EXCEL,另外这个方式是可以移植的,但是有一些成本,其代码比较晦涩难懂,而且没有注释,另外即使在Windows平台上,告警也很多。
如何用VC读取Excel表格中的数据详细介绍

如何用VC读取Excel表格中的数据详细介绍如何用VC读取Excel表格中的数据详细介绍2007-03-29 17:44首先,我们要明白的是,VC是通过ODBC来访问Excel表格的,也就是说,VC将Excel表格,当作数据库来处理。
当然了,也可以通过读以tab键隔开的文件来处理这样的文件,但是,我还是更加愿意用读取数据库的方式来访问Excel表格。
第二,既然是数据库,那么,就需要建立一个与该库对应的dsn,这个,而且,在建立dsn之前,首先要确定,已经安装了Excel的驱动。
第三,要访问数据库中的表格,就要先打开该表格,如此,就需要一个与之对应的RecordSet。
如此,有如下代码:void CRWExcel::ReadFromExcel(){CDatabase database;CString sSql;CString sItem1, sItem2;CString sDriver;CString sDsn;CString sFile = "Demo.xls";// 将被读取的Excel文件名// 检索是否安装有Excel驱动 "Microsoft Excel Driver (*.xls)"sDriver = GetExcelDriver();if (sDriver.IsEmpty()){// 没有发现Excel驱动AfxMessageBox("没有安装Excel驱动!");return;}// 创建进行存取的字符串sDsn.Format("ODBC;DRIVER={%s};DSN='''';DBQ=%s", sDriver, sFile);TRY{// 打开数据库,建立与这个Excel对应的Databasedatabase.Open(NULL, false, false, sDsn);CRecordset recset(&database);// 设置读取的查询语句.demo.xls并非文件名,需要在excel中进行//设置,具体文章最后有讲sSql = "SELECT Age, Name FROM DEMO.XLS";// 执行查询语句,打开表格recset.Open(CRecordset::forwardOnly, sSql, CRecordset::readOnly);// 获取查询结果while (!recset.IsEOF()){//读取Excel内部数值recset.GetFieldValue("Name ", sItem1);recset.GetFieldValue("Age", sItem2);// 移到下一行recset.MoveNext();}// 关闭数据库database.Close();}CATCH(CDBException, e){// 数据库操作产生异常时...AfxMessageBox("数据库错误: " + e->m_strError);}END_CATCH;}需要注意的是,我们对我们的Excel表格需要进行一些处理,需要先选定我们要读取的数据,之后,选择插入>>名字>>之后,在输入框中输入我们在select语句中用到的表名。
vc-操作Excel模板步骤

最近刚完成一个例子,受益不菲,和大家分享一下。
VC的Excel编程操作,总结:(结合网络资源)利用VC操作Excel的方法至少有两种1 .利用ODBC把Excel文件当成数据库文件,来进行读、写、修改等操作,网上有人编写了CSpreadSheet类,提供支持。
(不太能理解CSpreadSheet)2. 利用Automation(OLD Automation)方法。
将Excel当成组件服务器,利用VBA。
又分为基于MFC的和SDK两种。
(制作报表适用)主要研究了一下第二种基于MFC的OLE编程方法。
一、Excel的对象模型Application:代表应用程序本身。
即Excel应用程序Workbooks:是Workbook 的集合,代表了工作薄。
Worksheets:是Worksheet的集合,是Workbook的子对象。
Range:是Worksheet的子对象,可以理解为Sheet中一定范围的单元格。
Shapes:是Worksheet的子对象,用于存储图片等信息的单元格。
二、VC操作Excel的初始化过程1、导入Excel库文件。
使用VC6.0的同志们可进行一下操作获取Excel库文件:1.启动VC 6.0,打开新建对话框,新建一个MFC AppWizard(exe)工程,这里工程明设置为TestExcel。
2.进入MFC 应用程序向导,选择基本对话框,直接点击完成,工程文件结构如下图:3.打开MFC ClassWizard窗口(查看—>建立类向导),选择Automation,单击Add Class按钮,选择From a type library...,弹出文件选择对话框,之后定位到Microsoft Office 的安装目录(通常为C:\Program Files\Microsoft Office\Office),选择(excel.exe适用于Excel2003;EXCEL9.OLB适用于Excel2000),确定后,弹出Confirm Classes 窗口,(在不知道会使用到哪些类的情况下,)选择列表中的所有类,单击OK按钮。
如何用VC在Word中添加、操作表格

,VC在WORD中加入文本数据;进行word写的VBA宏代码VC++会自动地在WordAutomation.cpp中的CWordAutomationApp::InitInstance()中生成如下的代码,使得COM的服务能有效。
if (!AfxOleInit()){AfxMessageBox(IDP_OLE_INIT_FAILED);return FALSE;}// TODO: Add your command handler code hereCOleVariant vTrue((short)TRUE),vFalse((short)FALSE),vTmp,vOpt((long)DISP_E_PARAMNOTFOUND, VT_ERROR);//创建Word实例_Application oWordApp;if (!oWordApp.CreateDispatch("Word.Application", NULL)){AfxMessageBox("创建失败!", MB_OK | MB_SETFOREGROUND);return;}Range Rng;Table Tbl;Tables Tbls;//创建一个新的word文档Documents oDocs;_Document oDoc;oDocs = oWordApp.GetDocuments();oDoc = oDocs.Add(vOpt, vOpt, vOpt, vOpt);//如果是word 98,则应该带两个参数,如oDocs.Add(vOpt, vOpt)//把文本添加到word文档Selection oSel;oSel = oWordApp.GetSelection();oSel.TypeText("one");oSel.TypeParagraph();oSel.TypeText("two");oSel.TypeParagraph();oSel.TypeText("three");//保存word文档_Document oActiveDoc;oActiveDoc = oWordApp.GetActiveDocument();oActiveDoc.SaveAs(COleVariant("c:\\doc1.doc"),COleVariant((short)0),vFalse, COleVariant(""), vTrue, COleVariant(""),vFalse, vFalse, vFalse, vFalse, vFalse,vFalse,vFalse,vFalse,vFalse,vFalse);//退出word应用程序//oWordApp.Quit(vOpt, vOpt, vOpt);二,用VC在WORD中加入表格;COleVariant vTrue((short)TRUE),vFalse((short)FALSE),vTmp,vOpt((long)DISP_E_PARAMNOTFOUND, VT_ERROR);//创建Word实例_Application WrdApp;if (!WrdApp.CreateDispatch("Word.Application", NULL)){AfxMessageBox("创建失败!", MB_OK | MB_SETFOREGROUND);return;}Documents Docs;_Document Doc;Range Rng;Table Tbl;Tables Tbls;//创建新文档Docs = WrdApp.GetDocuments();Doc = Docs.Add(vOpt, vOpt, vOpt, vOpt);Rng=Doc.GetContent();//{{Tbls=Doc.GetTables(); 必须给这个变量初始化//}}Tbls.Add(Rng,5,5,vOpt,vOpt);/。
VC对Excel的操作

VC2010对Excel的操作1.创建新的C++工程创建基于对话框的MFC程序2.添加库、添加Excel类库在工程名上右键,选择“添加”—“类”(或者点击菜单栏的“项目”->“添加类”),选择“TypeLib中的MFC类”(MFC Class From TypeLib)类来源选“注册表”,在可用的类型库中选择“Microsoft Excel 11.0 Object Library<1.5>”在接口列表框中选择需要的类,在此,我们选择_Application,_Workbook,Worksheet,Range,Workbooks,Worksheets这六个就可以了。
可以看到,六个类被添加了进来。
3.修改头文件分别将加进来的六个头文件上面的“#import"C:\\ProgramFiles\\Microsoft Office\\OFFICE11\\EXCEL.EXE"no_namespace”注释掉。
4.添加头文件在stdAfx.h头文件中添加加进来的这几个头文件#include"CApplication.h"#include"CRange.h"#include"CWorkbook.h"#include"CWorkbooks.h"#include"CWorksheet.h"#include"CWorksheets.h"5.修改错误编译,会出现两个错误:…\crange.h(335): warning C4003: “DialogBoxW”宏的实参不足…\crange.h(335): error C2059: 语法错误:“,”双击错误提示,定位在错误行,VARIANT DialogBox(){VARIANT result;InvokeHelper(0xf5, DISPATCH_METHOD, VT_VARIANT, (void*)&result, NULL);return result;}将该函数名“DialogBox()”前面加“_”下划线,即“_DialogBox()”,这样就可以编译成功了。
运用VC或Java对Office进行编程操作

ObtGuiGcomOfficePrinter::ObtGuiGcomOfficePrinter()
{
}
ObtGuiGcomOfficePrinter::~ObtGuiGcomOfficePrinter()
{
}
BOOL ObtGuiGcomOfficePrinter::PowerPointPrinterToJcf(LPCTSTR lpszFileName,LPCTSTR lpszActivePrinter)
{
AfxMessageBox("创建Excel服务失败!");
return FALSE;
}
m_excelApp.SetVisible(FALSE); //设置为隐藏
//利用模板文件建立新文档
m_excelBooks.AttachDispatch(m_excelApp.GetWorkbooks(),true);
{
_PptApplication m_powerpointApp;
Presentations m_powerpointPres;
_Presentation m_powerpointPre;
m_powerpointPres.ReleaseDispatch();
m_powerpointPre.ReleaseDispatch();
class AFX_EXT_CLASS ObtGuiGcomOfficePrinter
{
public:
ObtGuiGcomOfficePrinter();
virtual ~ObtGuiGcomOfficePrinter();
//Operator
轻轻松松搞定VC操作Excel之一

轻轻松松搞定VC操作Excel之⼀时常在论坛上看到有⼈问这个VC操作Word或者Excel有没有书系统地介绍如何去做,有这个必要吗?其实捅破这层窗户纸,你就会恍然⼤悟,原来是这么回事啊!在此我觉得有必要把我⼯作中操纵Excel的⼀点⼩体会拿出来和⼤家共享,也许对初学者能有所帮助,⾼⼿就不要看了。
操作Word请看⽜⼈yingkou的BLOG() .基本步骤如下:⼀、Excel的层次结构ApplicationWorkbooksWorkbook......WorksheetsWorksheet......RangeFontBorders.............⼆、插⼊类型库1、在⼀个已有的MFC⼯程按Ctrl + W 弹出ClassWizard对话框。
2、Add Class...\From a type Library... 在 Office ⽬录中,找到你想使⽤的Excel类型库(Offce2000下,此⽬录在C:\ProgramFiles\Microsoft Office\Office\EXCEL9.OLB)。
选择EXCEL9.OLB此类型⽂件。
3、在弹出的对话框中选择要添加的类,具体选那些类要根据实际情况⽽定。
当然你也可以全选。
三、基本操作当你要选⽤Excel⽣成报表时,表的结构可能有固定的部分,这时做⼀个模板,这样可以减少编码的负担。
加载Excel模板的代码如下。
_Application ExcelApp; // 定义Excel应⽤程序Workbooks wbsBooks;_Workbook wbBook;Worksheets wssSheets;_Worksheet wsSheet;Range rngXls;FontXls font; // 字体BordersXls border; // 边框// 初始化Comif (::CoInitialize( NULL ) == E_INVALIDARG){AfxMessageBox(_T("初始化Com失败!"));}// 创建Excel2000服务器(启动Excel)if ( !ExcelApp.CreateDispatch(_T("Excel.Application"), NULL)){AfxMessageBox(_T("创建Excel2000服务失败!"));::CoUninitialize();}ExcelApp.SetVisible(FALSE); // 隐藏CString strPath;strPath += "C:\\template.xlt"; // 模板的路径CFileFind filefind;if( !filefind.FindFile( strPath ) ){AfxMessageBox( "没有找到模版⽂档,请其查找" );CFileDialog dlg (TRUE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,"模版||*.xlt||",NULL );if (IDOK == dlg.DoModal()){strPath = dlg.GetPathName();}}COleVariant vOptional( (long)DISP_E_PARAMNOTFOUND, VT_ERROR );try{wbsBooks.AttachDispatch(ExcelApp.GetWorkbooks(), TRUE);wbBook.AttachDispatch(wbsBooks.Add(COleVariant(strPath)), TRUE );wssSheets = wbBook.GetWorksheets();wsSheet = wssSheets.GetItem(_variant_t("Sheet1")); // Get Sheet1wsSheet.SetName( "Your Sheet" ); // 改名// 得到全部Cells,此时,rngXls 是cells的集合rngXls = wsSheetAcc.GetCells();}catch (CException e){AfxMessageBox( "" )}我们知道在Excel中每个单元格可以⽤A1,A2,C3的形式来表⽰。
visual C++6.0 操作excel

使用MFC操作EXCEL文件环境是:win7+vc++6.0+excel2010一、加载1、在VC6.0里创建一个采访对话框的MFC工程,工程名为“TestExcel”,在对话框面板上创建一个OnButoon1按钮。
类视图文件视图2、打开MFCClassWizard窗口(查看—>建立类向导),选择Automation,单击AddClass 按钮,选择Froma type library...,弹出文件选择对话框,之后定位到C:\ProgramFiles\MicrosoftOffice(86)\OFFICE14\EXCEL.EXE,在生成类中添加所有的对象(其实添加需要的即可,为了简便,不出错保留了冗余),如下图。
2.选类视图中的CTestExcel类,双击OnButton1(),在编辑框出现void CTestExcelDlg::OnButton1()函数,在其中加入如下代码:void CTestExcelDlg::OnButton1(){//Workbooks->Workbook ->Worksheets->Worksheet ->Range_Application app; //Excel应用程序接口Workbooks books; //工作薄集合_Workbook book; //工作薄Worksheets sheets; //工作表集合_Worksheet sheet; //工作表Range range; //Excel中针对单元格的操作都应先获取其对应的Range对象Font font;Range cols;//COleVariant类为VARIANT数据类型的包装,在自动化程序中,通常都使用//VARIANT数据类型进行参数传递。
故下列程序中,函数参数都是通过COleVariant类来转换了的。
//covOptional 可选参数的VARIANT类型COleVariant covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);if( !app.CreateDispatch("Excel.Application") ){this->MessageBox("无法创建Excel应用!");return;}//获取工作薄集合books=app.GetWorkbooks();//添加一个工作薄book=books.Add(covOptional);//获取工作表集合sheets=book.GetSheets();//获取第一个工作表sheet=sheets.GetItem(COleVariant((short)1));//选择工作表中A1:A1单元格区域range=sheet.GetRange(COleVariant("A1"),COleVariant("A1"));//设置A1=HELLO EXCEL!"//range.SetValue(COleVariant("HELLO EXCEL!")); //编译有错,注释掉//调整格式,设置粗体font=range.GetFont();font.SetBold(COleVariant((short)TRUE));//选择A2单元格,插入一个公式"=RAND()*100000",并设置A2数字格式为货币形式range=sheet.GetRange(COleVariant("A2"),COleVariant("A2"));range.SetFormula(COleVariant("=RAND()*100000"));range.SetNumberFormat(COleVariant("$0.00"));//选择A:A列,设置宽度为自动适应cols=range.GetEntireColumn();cols.AutoFit();//显示Excel表格,并设置状态为用户可控制app.SetVisible(TRUE);app.SetUserControl(TRUE);}3.在TestExcelDlg.cpp文件的开始处,加一行#include <excel.h>4.按Button按钮,出现一个Excel工作簿,可以在其中输入内容5.当关闭文件时,弹出如下对话框6.选择保存。
VC++操作EXCEL表格,附带两个小例子

C++读取Excel的XLS文件的方法有很多,但是也许就是因为方法太多,大家在选择的时候会很疑惑。
由于前两天要做导表工具,比较了常用的方法,总结一下写个短文,1.OLE的方式这个大约是最常用的方式,这个方式其实启动了一个EXCEL的进程在背后读写EXCEL 文件,这个方式的最大好处是什么事情都能做。
包括设置EXCEL的格式,增加删除Sheet,读写单元格,等等。
功能几乎是最全的,而且使用起来也不是特别的难。
其基本方法都是使用导出的.h文件进行OLE操作,但是由于OLE的接口说明文档不多,想非常完美的使用她们也不是太容易,好在例子也很多。
网上普遍认为OLE速度慢,EXCEL的OLE读写方式也基本一样。
但是读取速度可以改进,如果在读取的加载整个Sheet的Range的全部数据,而不是一个个单元格读取,那么速度还是相对不错。
想想原理也很简单,整体读取减少了OLE的交互次数。
OLE的写入方式一般只能几个进行比较方便,所以速度可能要快很多。
我自己的亲身体会是,一个EXCEL文件,100多列的字段,如果采用一个个单元格的读取方式,1s大约3条左右的记录,如果整体读取,速度可以提高几十倍。
OLE读写EXCEL方式功能很强大,读取速度还可以,但写入速度不高,当然这个方式不可能移植的,而且你必须安装了EXCEL。
2.Basic EXCEL 方式这是CodeProject上的一个推荐开源工程了,/KB/office/BasicExcel.aspx作者是基于EXCEL的文件格式进行的处理。
但是为什么叫Basic EXCEL呢。
他不支持很多东西,公式,文件格式,表格合并等(有人说中文支持也不好),所以可以认为他只支持最基本的EXCEL表格,我自己的尝试是如果这个EXCEL文件有其他元素(公式,格式等),使用Basic EXCEL读取会失败。
OLE读写EXCEL方式功能比较弱,由于是直接根据文件格式操作,读写速度都不错,你也不需要按照EXCEL,另外这个方式是可以移植的,但是有一些成本,其代码比较晦涩难懂,而且没有注释,另外即使在Windows平台上,告警也很多。
c#操作wps中的excel

c#操作wps中的excel在c#中可以操作office的excel,这个是比较简单,直接引入类库操作。
操作wps中的excel比其比较麻烦。
第一步:首先将wps的相关COM组件添加至引用. 工程->添加引用->COM->Kingsoft ET 2.0 Object Library / Upgrade Kinsoft ET 3.0 Object Library第二步:Using KSO;Using ET;(导入Kingsoft ET 2.0 Object Library时引用)Using EXCEL;(导入Upgrade Kinsoft ET 3.0 Object Library时引用)第三步:将数据存储在c#内存中定义的数据表中。
static void Dataprocessing(String tagid,String actionid) {System.Data.DataTable dt = newSystem.Data.DataTable(); //定义数据表变量//数据库中执行查询的SQL语句string sql = string.Format("SELECT * from RSSIData where ActionId='"+actionid+"'");if (connection.State == ConnectionState.Closed) {connection.Open();}SqlCommand cmd = new SqlCommand(sql, connection);SqlDataReader reader = cmd.ExecuteReader();//生成表格的每列的标题(以我的程序为例)for (int i = 0; i < 7; i++){if (i == 0){dt.Columns.Add("读写器ID",typeof(string)); }else if(i==1) { dt.Columns.Add("标签ID",typeof(string)); }else if (i == 2) { dt.Columns.Add("标签负载", typeof(string)); }else if (i == 3) { dt.Columns.Add("A通道RSSI值", typeof(string)); }else if (i == 4) { dt.Columns.Add("B通道RSSI值", typeof(string)); }else if (i == 5) { dt.Columns.Add("测试时间", typeof(string)); }else if (i == 6) { dt.Columns.Add("数据标识ID", typeof(string)); }}//根据数据库查询的结果,一一将数据填写在对应的dt行中while(reader.Read()){DataRow dr = dt.NewRow();for (int j = 0; j <7; j++)//for循环一次,生成一行数据{if (j == 0){ dr[j] = reader["ReaderId"]; }else if(j==1){ dr[j] = reader["TagId"];}else if (j == 2) { dr[j] = reader["Payload"]; }else if (j == 3) { dr[j] = reader["RSSI"]; }else if (j == 4) { dr[j] = reader["RSSIB"]; }else if (j == 5) { dr[j] = reader["CollectTime"]; }else if (j == 6) { dr[j] = reader["ActionId"]; }}dt.Rows.Add(dr);}string s = OutputWPSExcel(dt, "第二组小方格测试的四个标签数据报表", "C:\\users\\acer\\Desktop\\导师的\\定位数据统计\\");Console.Write(s);}第四步:将dt中的数据存储在wps的excel中////// 将DataTable的数据导出显示为报表(使用WPS)////// 要导出的数据/// 导出报表的标题/// 保存文件的路径///static string OutputWPSExcel(System.Data.DataTable dt, string strTitle, string FilePath){DateTime beforeTime = DateTime.Now;object missing = Type.Missing;Excel.Range objRange = null;string filename = "";try{objApp = new Excel.Application();objWorkBook =objApp.Workbooks.Add(Type.Missing); objWorkSheet = objWorkBook.ActiveSheet;int rowIndex = 4;int colIndex = 1;//取得列标题foreach (DataColumn col in dt.Columns){colIndex++;excel.Cells[4, colIndex]objWorkSheet.Cells[4,colIndex] = col.ColumnName; //设置标题格式为居中对齐Range range =objWorkSheet.get_Range((object)objWorkSheet.Cells. get_Item(4, colIndex),(object)objWorkSheet.Cells.get_Item(4, colIndex));range.Font.Bold = true;range.HorizontalAlignment =Excel.XlHAlign.xlHAlignCenter;range.Select();}//取得表格中的数据foreach (DataRow row in dt.Rows){rowIndex++;colIndex = 1;foreach (DataColumn col in dt.Columns){colIndex++;if (col.DataType ==System.Type.GetType("System.DateTime")){objWorkSheet.Cells[rowIndex, colIndex] = (Convert.ToDateTime(row[col.ColumnName].ToString( ))).ToString("yyyy-MM-dd");objWorkSheet.get_Range((object)objWorkSheet.Cells. get_Item(rowIndex, colIndex));//设置日期型的字段格式为居中对齐elseif (col.DataType ==System.Type.GetType("System.String")){Range txtRange =(Range)objWorkSheet.Cells[rowIndex, colIndex]; txtRange.NumberFormatLocal = "@"; objWorkSheet.Cells[rowIndex, colIndex] =row[col.ColumnName].ToString(); objWorkSheet.get_Range((object)objWorkSheet.Cells. get_Item(rowIndex, colIndex),(object) objWorkSheet.Cells.get_Item(rowIndex, colIndex)).HorizontalAlignment =Excel.XlHAlign.xlHAlignCenter;//设置字符型的字段格式为居中对齐}else{objWorkSheet.Cells[rowIndex, colIndex] =row[col.ColumnName].ToString();}}}//加载一个合计行int rowSum = rowIndex + 1;int colSum = 2;objWorkSheet.Cells[rowSum, 2] = "合计"; objWorkSheet.get_Range((object)objWorkSheet.Cells. get_Item(rowSum, 2),(object)objWorkSheet.Cells.get_Item(rowSum, 2)).HorizontalAlignment =Excel.XlHAlign.xlHAlignCenter;//取得整个报表的标题objWorkSheet.Cells[2, 2] = strTitle;//设置整个报表的标题格式objWorkSheet.get_Range((object)objWorkSheet.Cells. get_Item(2, 2), (object)objWorkSheet.Cells.get_Item(2, 2)).Font.Bold = true;objWorkSheet.get_Range((object)objWorkSheet.Cells. get_Item(2, 2), (object)objWorkSheet.Cells.get_Item(2, 2)).Font.Size = 22;//设置报表表格为最适应宽度objWorkSheet.get_Range((object)objWorkSheet.Cells. get_Item(4, 2),(object)objWorkSheet.Cells.get_Item(rowSum, colIndex)).Select();objWorkSheet.get_Range((object)objWorkSheet.Cells. get_Item(4, 2),(object)objWorkSheet.Cells.get_Item(rowSum, colIndex)).Columns.AutoFit();//设置整个报表的标题为跨列居中objWorkSheet.get_Range((object)objWorkSheet.Cells. get_Item(2, 2), (object)objWorkSheet.Cells.get_Item(2, colIndex)).Select();objWorkSheet.get_Range((object)objWorkSheet.Cells. get_Item(2, 2), (object)objWorkSheet.Cells.get_Item(2, colIndex)).HorizontalAlignment =Excel.XlHAlign.xlHAlignCenterAcrossSelection;DateTime afterTime = DateTime.Now;filename =FilePath+ strTitle + "_" +DateTime.Now.ToString("yyyyMMddHHmmssff") + ".xls";//保存文件objWorkBook.SaveAs(filename, missing, missing, missing, missing, missing,Excel.XlSaveAsAccessMode.xlNoChange, missing, missing, missing, missing);objWorkBook.Close(missing, missing, missing);}finally{ReleaseComObject(objRange); ReleaseComObject(objWorkSheet); ReleaseComObject(objWorkBook);}return filename;}static void ReleaseComObject(object obj){if (obj != null){System.Runtime.InteropServices.Marshal.ReleaseCom Object(obj);obj = null;}}。
VC控制EXCEL的基本操作

range.AttachDispatch(sheet.GetRange(COleVariant(_T("A1")),COleVariant(_T("D1"))));
//////////////设置底色/////////////////
Interior it;
it.AttachDispatch(range.GetInterior());
5 选择已使用的单元格
range.AttachDispatch(sheet.GetUsedRange());//加载已使用的单元格
6 获取单元格的值
1)
range=sheet.GetRange(COleVariant("A1"),COleVariant("A1"));
COleVariantrValue;
11对选取的区域进行排序definexlascendinglongdefinexldescendinglongdefinevoptcolevariantlongdispeparamnotfoundvterrordefinexlheaderlong选取的区域有标题definexlnoheaderlong选取的区域无标题一定要正确确定是否有标题否则排序可能不成功definexlmatchcasecolevariantlongdefinexlignorecasecolevariantlongdefinexltoptobottomlong垂直方向进行排序definexllefttorightlong水平方向进行排序definexlpinyinlong按字符的中文拼音进行排序definexlstrokelong按每个字符中的笔画数进行排序variantkey1
如何使用C++开发WPS Office插件

插件配置文件中至少要包含 id、version、type、name 四项数据。 a. id 插件 id 是插件 COM 组件的 CLSID,WPS Office 插件平台将根据 id 加载插件,获取 _IDTExtensibility2 接口。 b. verion 插件版本号使用 Windows 风格的命名方式,即[主版本号][子版本号][修正版本号][构建],如 “1.1.0.29”。插件版本号会显示在插件平台对话框中。 c. type type 必须为 comaddin,说明插件 DLL 是一个 COM 组件。 d. name 在插件平台对话框中看到的插件名称。
1.2. _IDTExtensibility2.OnStartupComplete 插件平台加载插件过程中,会先后调用 OnConnection 和 OnStartupComplete。如果插件需要 在 插 件 启 动 以 后 ( OnConnection 执 行 完 之 后 ) 做 一 些 事 情 , 可 以 将 这 些 工 作 放 到 OnStartupComplete 中执行。大多数情况下,插件可以实现一个空的 OnStartupComplete,返
virtual HRESULT __stdcall OnStartupComplete ( /*[in]*/ SAFEARRAY * * custom ) = 0;
virtual HRESULT __stdcall OnBeginShutdown ( /*[in]*/ SAFEARRAY * * custom ) = 0; }; 插件安装时,WPS Office 会将插件 DLL 注册(DllRegisterServer)到系统中。WPS Office 启 动时,将通过插件平台(管理插件的模块)加载插件。插件平台通过 COM 方_IDTExtensibility2.OnBeginShutdown WPS Office 关闭过程中,插件平台会调用 OnBeginShutdown,通知插件做清理工作,如保存 配置、终止未完成的工作、释放系统资源等。OnBeginShutdown 在 OnDisconnection 之前被 调用。 1.4. _IDTExtensibility2.OnDisconnection OnDisconnection 和 OnConnection 相对应,插件在 OnConnection 中添加菜单或工具栏命令、 注册事件通知,OnDisconnection 则注销事件通知。 virtual HRESULT __stdcall OnDisconnection ( /*[in]*/ enum ext_DisconnectMode RemoveMode, /*[in]*/ SAFEARRAY * * custom) ; OnDisconnection 带 RemoveMode 和 custom 两个参数。其中 custom 参数目前没有用到,插 件忽略这个参数即可;第一个参数 RemoveMode 是 ext_DisconnectMode 类型的枚举值,如 下所示: enum ext_DisconnectMode { ext_dm_HostShutdown = 0, ext_dm_UserClosed = 1 }; 目 前 只 用 到 了 ext_dm_HostShutdown 。 WPS Office 关 闭 时 , 插 件 平 台 会 调 用 插 件 的 _IDTExtensibility2.OnDisconnection(ext_dm_HostShutdown, custum) 方法。前面推荐插件使用 “临时”的菜单和工具栏按钮。使用“临时”菜单和按钮时,插件在处理 ext_dm_HostShutdown 过程中不需要删除菜单、按钮等项目。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
竭诚为您提供优质文档/双击可除vc使用wps表格篇一:常用wps表格功能(1)1.打开表格。
双击桌面图标,然后点击或者在左上角wps表格的下拉菜单中依次做如下选择新建一个表格如下:2.文字居中功能。
在格子中各行各列输入需要的内容,比如输入以下内容:输入完成后,首先选中文字,然后点击下面图片中红圈圈里的图标。
对应的,居中的旁边图标分别是左对齐和右对齐。
3.表格加框功能。
接下来是将文字内容加框,比较美观,同样也是选中文字,在一下红圈圈图标里选择下拉菜单,选择你想要的框线型,这里的例子是都加框。
居中和加框完成后的样子如下图:4.表格的行高列宽设置功能。
表格可以选择改变行列的高度和宽度,选中一行或者要改变行高的所有行,然后方法一:鼠标右键选择行高在这个窗口里直接输入行高行高。
就会改变、方法二:也是先选中行,然后点击界面右上角图标行和列,如下图然后输入想要的行高和列宽即可。
5.求和功能。
我们可以对表格里每一行每一列的数字进行求和;选中要求和的整行或者整列,然后选择自动求和。
不但可以求和,还可以求平均数等等。
求和后的样子:然后可以在求和后加框,加框可以参考第4点。
6.保存功能。
完成后如果要保存就点击左上方图标,或者选择左上角wps表格的下拉三角号,选择文件,继续选择保存,然后在弹出的窗口进行命名并且选择你要存放的位置即可。
篇二:wps表格常用函数应用教程(经典版)wps表格常用函数应用教程一、函数应用基础(一)函数和公式1.什么是函数wps表格函数即是预先定义,执行计算、分析等处理数据任务的特殊公式。
以常用的求和函数sum为例,它的语法是“sum(数值1,数值2,......)”。
其中“sum”称为函数名称,一个函数只有唯一的一个名称,它决定了函数的功能和用途。
函数名称后紧跟左括号,接着是用逗号分隔的称为参数的内容,最后用一个右括号表示函数结束。
参数是函数中最复杂的组成部分,它规定了函数的运算对象、顺序或结构等。
使得用户可以对某个单元格或区域进行处理,如确定成绩名次、计算三角函数值等。
2.什么是公式函数与公式既有区别又互相联系。
如果说前者是wps表格预先定义好的特殊公式,后者就是由用户自行设计对工作表进行计算和处理的公式。
以公式“=sum(e1:h1)*a1+26”为例,它要以等号“=”开始,其内部可以包括函数、引用、运算符和常量。
上式中的“sum(e1:h1)”是函数,“a1”则是对单元格a1的引用(使用其中存储的数据),“26”则是常量,“*”和-1-“+”则是算术运算符(另外还有比较运算符、文本运算符和引用运算符)。
如果函数要以公式的形式出现,它必须有两个组成部分,一个是函数名称前面的等号,另一个则是函数本身。
(二)函数的参数函数右边括号中的部分称为参数,假如一个函数可以使用多个参数,那么参数与参数之间使用半角逗号进行分隔。
参数可以是常量(数字和文本)、逻辑值(例如真值或假值)、数组、错误值(例如#n/a)或单元格引用(例如e1:h1),甚至可以是另一个或几个函数等。
参数的类型和位置必须满足函数语法的要求,否则将返回错误信息。
1.常量常量是直接输入到单元格或公式中的数字或文本,或由名称所代表的数字或文本值,例如数字“2890.56”、日期“20xx-8-19”和文本“黎明”都是常量。
但是公式或由公式计算出的结果都不是常量,因为只要公式的参数发生了变化,它自身或计算出来的结果就会发生变化。
2.逻辑值逻辑值是比较特殊的一类参数,它只有真或假两种类型。
例如在公式“=iF(a3=0,"",a2/a3)”中,“a3=0”就是一个可以返回真或假两种结果的参数。
当“a3=0”为真时在公式所在单元格中填入“0”,否则在单元格中填入“a2/a3”的计算结果。
-2-3.数组数组用于可产生多个结果,或可以对存放在行和列中的一组参数进行计算的公式。
wps表格中有常量和区域两类数组。
前者放在“{}”(按下ctrl+shift+enter组合键自动生成)内部,而且内部各列的数值要用逗号“,”隔开,各行的数值要用分号“;”隔开。
假如你要表示第1行中的56、78、89和第2行中的90、76、80,就应该建立一个2行3列的常量数组“{56,78,89;90,76,80}。
区域数组是一个矩形的单元格区域,该区域中的单元格共用一个公式。
例如公式“=tRend(b1:b3,a1:a3)”作为数组公式使用时,它所引用的矩形单元格区域“b1:b3,a1:a3”就是一个区域数组。
4.错误值使用错误值作为参数的主要是信息函数,例如“eRRoR.type”函数就是以错误值作为参数。
它的语法为“eRRoR.type(错误码)”,如果其中的参数是#num!,则返回数值“6”。
5.单元格引用单元格引用是函数中最常见的参数,引用的目的在于标识工作表单元格或单元格区域,并指明公式或函数所使用的-3-数据的位置,便于它们使用工作表各处的数据,或者在多个函数中使用同一个单元格的数据。
还可以引用同一工作簿不同工作表的单元格,甚至引用其他工作簿中的数据。
根据公式所在单元格的位置发生变化时,单元格引用的变化情况,我们可以引用分为相对引用、绝对引用和混合引用三种类型。
以存放在F2单元格中的公式“=sum(a2:e2)”为例,当公式由F2单元格复制到F3单元格以后,公式中的引用也会变化为“=sum(a3:e3)”。
若公式自F列向下继续复制,“行标”每增加1行,公式中的行标也自动加1。
如果上述公式改为“=sum($a$3:e$3)”,则无论公式复制到何处,其引用的位置始终是“a3:e3”区域。
混合引用有“绝对列和相对行”,或是“绝对行和相对列”两种形式。
前者如“=sum($a3:e3)”,后者如“=sum(a$3:e$3)”。
上面的几个实例引用的都是同一工作表中的数据,如果要分析同一工作簿中多张工作表上的数据,就要使用三维引用。
假如公式放在工作表sheet1的c6单元格,要引用工作表sheet2的“a1:a6”和sheet3的“b2:b9”区域进行求和运算,则公式中的引用形式为“=sum(sheet2!a1:a6,sheet3!b2:b9)”。
也就是说三维引用中不仅包含单元格或区域引用,还要在前面加上带“!”的工作表名称。
假如你要引用的数据来自另一个工作簿,如工作簿book1中的sum函数要绝对引用工作簿book2中的数据,-4-其公式为“=sum([book2]sheet1!sas1:sas8,[book2]sheet2!sbs1:sbs9)”,也就是在原来单元格引用的前面加上“[book2]sheet1!”。
放在中括号里面的是工作簿名称,带“!”的则是其中的工作表名称。
即是跨工作簿引用单元格或区域时,引用对象的前面必须用“!”作为工作表分隔符,再用中括号作为工作簿分隔符。
不过三维引用的要受到较多的限制,例如不能使用数组公式等。
提示:上面介绍的是wps表格默认的引用方式,称为“a1引用样式”。
如果你要计算处在“宏”内的行和列,必须使用“R1c1引用样式”。
在这种引用样式中,wps表格使用“R”加“行标”和“c”加“列标”的方法指示单元格位置。
启用或关闭R1c1引用样式必须单击“工具→选项”菜单命令,打开对话框的“常规”选项卡,选中或清除“设置”下的“R1c1引用样式”选项。
由于这种引用样式很少使用,限于篇幅本文不做进一步介绍。
6.嵌套函数除了上面介绍的情况外,函数也可以是嵌套的,即一个函数是另一个函数的参数,如“=iF(oR(Rightb(e2,1)="1",Rightb(e2,1)="3",Rightb(e2,1)="5",Rightb(e2,1)="7",Rightb(e2,1)="9"),"男","女")”。
其中公式中的iF函数使用了嵌套的Rightb函数,并将后者返回的结果作为iF的逻辑判断依据。
-5-篇三:wps表格技巧100例(超全!excel同样适用)让你薪酬翻倍的wps表格技巧100例入门到精通100例wps表格实战技巧,深入浅出助你成为表格达人。
新浪微博@wps玩转officewps社区新浪微刊《wps表格(excel)实用技巧》目录一、基本方法................................................. ..............71.快速获取帮助,学习实用教程..............................................72.快速选中全部工作表................................................. .....73.给单元格重新命名................................................. .......74.在wps表格中选择整个单元格范围.........................................85.快速移动/复制单元格................................................. ....86.快速修改单元格式次。