VC读取写入EXCEL2003文件

合集下载

VC读写excel

VC读写excel

// 获得使用的行数 long lgUsedRowNum = 0; m_oCurrRange.AttachDispatch( m_oCurrRange.GetRows(), TRUE ); lgUsedRowNum = m_oCurrRange.GetCount(); // 获得使用的列数 long lgUsedColumnNum = 0; m_oCurrRange.AttachDispatch( m_oCurrRange.GetColumns(), TRUE ); lgUsedColumnNum = m_oCurrRange.GetCount();
{
//
AfxMessageBox( _T( "是合并的单元格!" ) );
}
else if ( varMerge.boolVal == 0 )
{
//
AfxMessageBox( _T( "不是合并的单元格!" ) );
}
arrayStr[i].Add( strItemName ); j++; } i++; }
CString strItemName;
strItemName = varItemName.bstrVal;
//
AfxMessageBox( strItemName );
// 判断是否是合并的单元格
VARIANT varMerge = oCurCell.GetMergeCells();
if ( varMerge.boolVal == -1 )
// Excel 应用对象
_Application m_oExcelApp;
// Excel 程序
_Worksheet

Visual Baisc 6.0操作Excel2003-最全使用说明

Visual Baisc 6.0操作Excel2003-最全使用说明

预备知识和操作在VB中要想调用Excel,需要打开VB编程环境“工程”菜单中的“引用”项目,并选取项目中的“Microsoft Excel 11.0 object library”项。

由于你的Excel版本不同,所以这个选项的版本号也是不同的。

因为EXCEL是以层次结构组织对象的,其对象模型中含有许多不同的对象元素。

第一层:Application对象,即Excel本身;第二层:workbooks对象集,指Excel的工作簿文件第三层:worksheets对象集,表示的是Excel的一个工作表;第四层:Cells和Range对象,指向Excel工作表中的单元格。

1从"工程"菜单中选择"引用"栏;选择Microsoft Excel 11.0 Object Library(EXCEL2003),然后选择" 确定"。

2关键代码Dim newxls As Excel.ApplicationDim newbook As Excel.WorkbookDim newsheet As Excel.WorksheetSet newxls=CreatObject("Excel.Application")Set newbook=newxls.Worksbooks.AddSet newsheet=newbook.Worksheets(1)newxls.Visible = True '这一句很关键,编程语言中show和visible应该还起初始化的作用。

newxls.Workbooks.Open FileName:=App.Path & "备件库存查询" + mydate + ".xls"3 newxls.Visible := True '显示当前窗口4 newxls.Caption := "应用程序调用Microsoft Excel" '更改Excel 标题栏5 newxls.Workbooks.Add '添加新工作簿6 newxls.Workbooks.Open("C:\Excel\Demo.xls") '打开已存在的工作簿newxls.Workbooks.Open FileName:=App.Path & "备件库存查询" + mydate + ".xls"7 newxls.WorkSheets[2].Activate '设置第2个工作表为活动工作表newxls.WorkSheets["Sheet2"].Activate8 newxls.Cells[1,4].Value := "第一行第四列" '给单元格赋值newsheet.Cells(1, 4) = "备件名称"9 newxls.ActiveSheet.Columns[1].ColumnsWidth := 5'设置指定列的宽度单位:字符个数以第一列为例10 newxls.ActiveSheet.Rows[2].RowHeight := 1/0.035; // 1厘米设置指定行的高度,单位为磅,1磅=0.035厘米,以第二行为例11 在第8行之前插入分页符newxls.WorkSheets[1].Rows[8].PageBreak := 1在第4列之前删除分页符newxls.ActiveSheet.Columns[4].PageBreak := 012 关键代码Visual Basic6.0在excel中的range方法Sub Random()Dim myRange As RangeSet myRange = Worksheets("Sheet1").Range("A1:D5") '注意区域Range为二四象限对角线区域myRange.Formula = "=RAND()"myRange.Font.Bold = TrueEnd Sub13 关键代码Row = ActiveSheet.Range("A1:A679").Find("1-101").Row如果找不到1-101会崩溃Dim c As RangeSet c=ActiveSheet.Range("A1:A679").Find("1-101")If Not c Is Nothing Then '找到Set Row=c.RowElse '找不到'加入自已要处理的语句End If14 newxls.ActiveSheet.Range["B3:D4"].Borders[2].Weight := 3 '指定边框线宽度1-左2-右3-顶4-底5-斜( \ ) 6-斜( / )15 newxls.ActiveSheet.Cells[1,4].ClearContents '清除第一行第四列单元格公式16 newxls.ActiveSheet.Rows[1] := '隶书' '设置第一行字体属性:newxls.ActiveSheet.Rows[1].Font.Color := clBluenewxls.ActiveSheet.Rows[1].Font.Bold := Truenewxls.ActiveSheet.Rows[1].Font.UnderLine := True17 进行页面设置a.页眉newxls.ActiveSheet.PageSetup.CenterHeader := "报表演示"b.页脚newxls.ActiveSheet.PageSetup.CenterFooter := "第&P页"c.页眉到顶端边距2cm:newxls.ActiveSheet.PageSetup.HeaderMargin := 2/0.035d.页脚到底端边距3cm:newxls.ActiveSheet.PageSetup.HeaderMargin := 3/0.035e.顶边距2cm:newxls.ActiveSheet.PageSetup.TopMargin := 2/0.035f.底边距2cm:newxls.ActiveSheet.PageSetup.BottomMargin := 2/0.035g.左边距2cm:newxls.ActiveSheet.PageSetup.LeftMargin := 2/0.035h.右边距2cm:newxls.ActiveSheet.PageSetup.RightMargin := 2/0.035i.页面水平居中:newxls.ActiveSheet.PageSetup.CenterHorizontally := 2/0.035j.页面垂直居中:newxls.ActiveSheet.PageSetup.CenterV ertically := 2/0.035k.打印单元格网线:newxls.ActiveSheet.PageSetup.PrintGridLines := True '这一条要注意使用18 拷贝操作a.拷贝整个工作表:ed.Range.Copyb.拷贝指定区域:newxls.ActiveSheet.Range["A1:E2"].Copyc.从A1位置开始粘贴:newxls.ActiveSheet.Range.["A1"].PasteSpeciald.从文件尾部开始粘贴:newxls.ActiveSheet.Range.PasteSpecial19 插入一行或一列a. newxls.ActiveSheet.Rows[2].Insertb. newxls.ActiveSheet.Columns[1].Insert20 删除一行或一列a. newxls.ActiveSheet.Rows[2].Deleteb. newxls.ActiveSheet.Columns[1].Delete21 打印预览工作表newxls.ActiveSheet.PrintPreview '这一条要注意使用22 打印输出工作表newxls.ActiveSheet.PrintOut '这一条要注意使用23 工作表保存If not newxls.ActiveWorkBook.Saved thennewxls.ActiveSheet.PrintPreviewEnd if24 工作表另存为newxls.SaveAs("C:\Excel\Demo1.xls")25 存盘ExcelID.ActiveWorkBook.Saved := True26 关闭工作簿ExcelID.WorkBooks.Close27 退出ExcelExcelID.Quit28 设置工作表密码ExcelID.ActiveSheet.Protect "123", DrawingObjects:=True, Contents:=True, Scenarios:=True29 EXCEL的显示方式为最大化ExcelID.Application.WindowState = xlMaximized30 工作薄显示方式为最大化ExcelID.ActiveWindow.WindowState = xlMaximized31 设置打开默认工作薄数量ExcelID.SheetsInNewWorkbook = 332 关闭时是否提示保存(true 保存;false 不保存)ExcelID.DisplayAlerts = False33 设置拆分窗口,及固定行位置ExcelID.ActiveWindow.SplitRow = 1ExcelID.ActiveWindow.FreezePanes = True34 设置打印时固定打印内容ExcelID.ActiveSheet.PageSetup.PrintTitleRows = "$1:$1"35 设置打印标题ExcelID.ActiveSheet.PageSetup.PrintTitleColumns = ""36 设置显示方式(分页方式显示)ExcelID.ActiveWindow.View = xlPageBreakPreview37 设置显示比例ExcelID.ActiveWindow.Zoom = 10038 让Excel 响应DDE 请求Ex.Application.IgnoreRemoteRequests = False编程例子用VB操作EXCELPrivate Sub Command3_Click()On Error GoTo err1Dim i As LongDim j As LongDim objExl As Excel.Application '声明对象变量Me.MousePointer = 11 '改变鼠标样式Set objExl = New Excel.Application '初始化对象变量objExl.SheetsInNewWorkbook = 1 '将新建的工作薄数量设为1objExl.Workbooks.Add '增加一个工作薄objExl.Sheets(1).Name = "book2" '修改工作薄名称objExl.Sheets("book2").Select '选中工作薄<book2>For i = 1 To 50 '循环写入数据For j = 1 To 5If i = 1 ThenobjExl.Selection.NumberFormatLocal = "@" '设置格式为文本objExl.Cells(i, j) = " E " & i & jElseobjExl.Cells(i, j) = i & jEnd IfNextNextobjExl.Rows("1:1").Select '选中第一行objExl.Selection.Font.Bold = True '设为粗体objExl.Selection.Font.Size = 24 '设置字体大小objExl.Cells.EntireColumn.AutoFit '自动调整列宽objExl.ActiveWindow.SplitRow = 1 '拆分第一行objExl.ActiveWindow.SplitColumn = 7 '拆分前七列objExl.ActiveWindow.FreezePanes = True '固定拆分objExl.ActiveSheet.PageSetup.PrintTitleRows = "$1:$1" '设置打印固定行objExl.ActiveSheet.PageSetup.PrintTitleColumns = "" '打印标题objExl.ActiveSheet.PageSetup.RightFooter = "打印时间: " & _Format(Now, "yyyy年mm月dd日hh:MM:ss")objExl.ActiveWindow.View = xlPageBreakPreview '设置显示方式objExl.ActiveWindow.Zoom = 100 '设置显示大小objExl.ActiveSheet.Protect "123", DrawingObjects:=True, _Contents:=True, Scenarios:=TrueobjExl.Application.IgnoreRemoteRequests = FalseobjExl.Visible = True '使EXCEL可见objExl.Application.WindowState = xlMaximized 'EXCEL的显示方式为最大化objExl.ActiveWindow.WindowState = xlMaximized '工作薄显示方式为最大化objExl.SheetsInNewWorkbook = 3 '将默认新工作薄数量改回3个Set objExl = Nothing '清除对象Me.MousePointer = 0 '修改鼠标Exit Suberr1:objExl.SheetsInNewWorkbook = 3objExl.DisplayAlerts = False '关闭时不提示保存objExl.Quit '关闭EXCELobjExl.DisplayAlerts = True '关闭时提示保存Set objExl = NothingMe.MousePointer = 0End Sub。

c读取excel文件的几种方法

c读取excel文件的几种方法

c读取e x c e l文件的几种方法Revised by Petrel at 2021C# 读取EXCEL文件的几种经典方法例子引入(读取时excel要打开)namespace读取excel测试{public partial class Form1 : Form{public Form1(){InitializeComponent();}lsx|电子表格|*.xls|所有文件|*.*";" + "Data Source=" + path + ";" + "Extended Properties=Excel ;";OleDbConnection conn = new OleDbConnection(strConn);();string strExcel = "";OleDbDataAdapter myCommand = null;DataSet ds = null;strExcel = "select * from [sheet1$]"; myCommand = newOleDbDataAdapter(strExcel, strConn);ds = new DataSet();(ds, "table1");return ds;Data Source=" + path + ";Extended Properties='Excel ;HDR=NO;IMEX=1'";ables, null);oString();法一:采用OleDB读取EXCEL文件:把EXCEL文件当做一个数据源来进行数据的读取操作,实例如下:public DataSet ExcelToDS(string Path){string strConn = ".;" +"Data Source="+ Path +";"+"Extended Properties=Excel ;";OleDbConnection conn = new OleDbConnection(strConn);();string strExcel = "";OleDbDataAdapter myCommand = null;DataSet ds = null;strExcel="select * from [sheet1$]";myCommand = new OleDbDataAdapter(strExcel, strConn);ds = new DataSet();(ds,"table1");return ds;}对于EXCEL中的表即sheet([sheet1$])如果不是固定的可以使用下面的方法得到string strConn = ".;" +"Data Source="+ Path +";"+"Extended Properties=Excel ;";OleDbConnection conn = new OleDbConnection(strConn);DataTable schemaTable = (.Tables,null);string tableName=[0][2].ToString().Trim();另外:也可进行写入EXCEL文件,实例如下:public void DSToExcel(string Path,DataSet oldds){; Data Source ="+path1+";Extended Properties=Excel " ;OleDbConnection myConn = new OleDbConnection(strCon) ;string strCom="select * from [Sheet1$]";( ) ;OleDbDataAdapter myCommand = new OleDbDataAdapter ( strCom, myConn ) ;.OleDbCommandBuilder builder=newOleDbCommandBuilder(myCommand);i++){ewRow();for(int j=0;j<[0].;j++){nrow[j]=[0].Rows[i][j];}["Table1"].(nrow);}(newds,"Table1");();}2.方法二:引用的com组件:读取EXCEL文件首先是的获取,将Office安装目录下的文件Copy到DotNet的bin目录下,cmd到该目录下,运行 TlbImp 得到Dll文件。

利用VC操作Excel生成图文报表

利用VC操作Excel生成图文报表

VC中利用Excel2003生成图文报表(内部资料请勿外传)编写:邵江日期:2011-2-21检查:日期:审核:日期:批准:日期:武汉东健科技有限公司版权所有不得复制文档变更记录参考资料1.1VC利用EXCEL模板实现报表打印的九大步骤#include "excel9.h" //使用EXCEL类需要包含的头文件#include "comdef.h" //使用EXCEL类需要包含的头文件(注:需要"excel9.h"和"excel9.cpp",是通过类向导添加新类中的from a type library 到office安装目录下加载olb 文件注意excel加载exe文件)第二步:创建对象_Application ExcelApp;Workbooks wbsMyBooks;_Workbook wbMyBook;Worksheets wssMysheets;_Worksheet wsMysheet;Range rgMyRge;第三步:创建EXCEL服务器/*创建EXCEL服务器*/if (!ExcelApp.CreateDispatch("Excel.Application", NULL)){AfxMessageBox("创建EXCEL服务器失败!");return;}第四步:利用EXCEL模板创建EXCEL文档//strPath为模板的全路径名wbsMyBooks.AttachDispatch(ExcelApp.GetWorkbooks(), true);try{wbMyBook.AttachDispatch(wbsMyBooks.Add(_variant_t(strPath)));}catch(...){AfxMessageBox("EXCEL模板打开失败,请检查文件是否存在!", MB_OK | MB_ICONSTOP);ExcelApp.Quit();return;}第五步:关联对象/*得到Worksheets*/wssMysheets.AttachDispatch(wbMyBook.GetWorksheets(), true);/*得到Worksheet1*/wsMysheet.AttachDispatch(wssMysheets.GetItem(_variant_t("sheet1")), true);/*得到全部Cells,此时,rgMyRge是cells的集合*/rgMyRge.AttachDispatch(wsMysheet.GetCells(),true);第六步:设置单元格的值rgMyRge.SetItem(_variant_t((long)1),_variant_t((long)1),_variant_t("姓名")); //1*1rgMyRge.SetItem(_variant_t((long)1),_variant_t((long)2),_variant_t("QQ号")); //1*2rgMyRge.SetItem(_variant_t((long)2),_variant_t((long)1),_variant_t("风云在线")); rgMyRge.SetItem(_variant_t((long)2),_variant_t((long)2),_variant_t("278800 584"));第七步:打印预览ExcelApp.SetVisible(true);wbMyBook.PrintPreview(_variant_t(false));第八步:退出EXCEL应用程序/*设置保存标志为已保存,则不会弹出保存模板对话框,实际上并未保存,只是认为的标志保存了,因为这里不需要保存*/wbMyBook.SetSaved(true);/*退出EXCEL应用程序*/ExcelApp.Quit();第九步:释放对象/*释放对象*/rgMyRge.ReleaseDispatch();wsMysheet.ReleaseDispatch();wssMysheets.ReleaseDispatch();wbMyBook.ReleaseDispatch();wbsMyBooks.ReleaseDispatch();ExcelApp.ReleaseDispatch();1.2VC操作EXCELExcel为发人员提供了强大的外部接口,方便开发人员进行二次开发。

VC读取EXCEL文件

VC读取EXCEL文件

VC读取EXCEL文件[ 2005-9-16 11:16:00 | By: 阿木]在Visual C++ 中调用Excel 2000程蓬在开发软件时,经常要将数据输出到Excel 2000中,在Excel 2000中对该数据进行进一步地格式化处理或进行计算处理。

在Visual Basic中处理起来较简单,Excel 2000的VB编程帮助中有较为详细的介绍。

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

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

例如:Worksheet.GetCount(), Worksheet.SetName(“Sheet1”)。

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

例如:Worksheets.GetItem(ColeVariant((long)1))或Worksheets.GetItem(ColeVaria nt(“Sheet1”))取得第一个工作表。

在COM接口中,时常用到Variant,BSTR,SafeArray数据类型。

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

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

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

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

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

vc++-newer-读写excel

vc++-newer-读写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上的一个推荐开源工程了,bbb://aaacodeprojectaaa/KB/office/BasicExcel.aspx整理是基于EXCEL的文件格式进行的处理。

但是为什么叫Basic EXCEL呢。

他不支持很多东西,公式,文件格式,表格合并等(有人说中文支持也不好),所以可以认为他只支持最基本的EXCEL表格,我自己的尝试是如果这个EXCEL文件有其他元素(公式,格式等),使用Basic EXCEL读取会失败。

OLE读写EXCEL方式功能比较弱,由于是直接根据文件格式操作,读写速度都不错,你也不需要按照EXCEL,另外这个方式是可以移植的,但是有一些成本,其代码比较晦涩难懂,而且没有注释,另外即使在Windows平台上,告警也很多。

vc读写Excel文件的方法

vc读写Excel文件的方法

vc读写Excel⽂件的⽅法void ReadExcel(){CDatabase database;CString sSql;CString sItem1, sItem2 , sItem3;CString sDriver;CString sDsn;CString sFile,sPath;//获取主程序所在路径,存在sPath中GetModuleFileName(NULL,sPath.GetBufferSetLength(MAX_PATH+1),MAX_PATH);sPath.ReleaseBuffer();int nPos;nPos=sPath.ReverseFind ('\\');sPath=sPath.Left (nPos);sFile = sPath + "\\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⽂件)database.Open(NULL, false, false, sDsn);CRecordset recset(&database);// 设置读取的查询语句.注意此处表名的写法,excel⾥的表默认为系统表所以访问表时表名应为[表名$] sSql = "SELECT 考⽣编号,考⽣姓名,来源 ""FROM [student2$] ""ORDER BY 考⽣编号 ";// 执⾏查询语句recset.Open(CRecordset::forwardOnly, sSql, CRecordset::readOnly);// 获取查询结果while (!recset.IsEOF()){//读取Excel内部数值recset.GetFieldValue("考⽣编号", sItem1);recset.GetFieldValue("考⽣姓名", sItem2);recset.GetFieldValue("来源", sItem3);//显⽰记取的内容m_ExcelList.AddString( sItem1 + " --> "+sItem2 );// 移到下⼀⾏recset.MoveNext();}// 关闭数据库database.Close();}CATCH(CDBException, e){// 数据库操作产⽣异常时...AfxMessageBox("数据库错误: " + e->m_strError);}END_CATCH;}下⾯是第⼆种⽅法,这⾥涉及的原理要复杂⼀些了,传说中的OLE(对象链接与嵌⼊)技术在这⾥⽤上了,EXCEL.EXE作为⼀个组件服务器,应⽤程序作为客户端......,还是直接写过程吧,头晕晕的,只能平铺直述了.A,从classwizard中add class处from type library,去office的安装⽬录下引⼊excel.exe(这是office 2003的选择,其他版本都是⽤olb⽂件),服务器就算引⼊了,这时会弹出对话框,要求加⼊⼀些类,这些类都是⼀些接⼝,⾥⾯有⼤量的⽅法,类的对象表征着excel ⽂件的⼀个个部分,常⽤的有这⼏个_application,workbooks,_workbook,worksheets,_worksheet,Range,它们分别代表不同的意义._application代表了EXCEL服务器,workbooks表⽰整个Excel服务器(表现为⼀个.xls⽂件)⾥所有的表,(可以通过"新建"得到多个表,即MDI程序⾥的⼀个视窗⼀样,所有的视窗就是workbooks), _workbook就是⼀个表,相当于MDI中的⼀个视窗, worksheets表⽰所有的表单,每个表都可能有很多表单(建⽴⼀个Excel⽂件之后,打开,可以看到有sheet1,sheet2等,所有这些sheetn就组成了worksheets), _worksheet就表⽰⼀个表单, range表⽰元素的集合. 搞清楚上⾯这⼏个名词的意思⾮常重要. B,在dlg.h中声明下⾯⼏个变量:_Application exlapp; //组件服务器的各个classes_Workbook wbk;Workbooks wbks;_Worksheet wht;Worksheets whts;LPDISPATCH lpDisp;并在app.cpp的InitInstance⽅法中加⼊下⾯两句AfxInitOle(); AfxEnableControlContainer();C,这⾥我没有像上⾯⼀样完全⽤程序来⽣成⼀个Excel⽂件,⽽是在开始时就在当前⽬录下⽣成了⼀个Excel⽂件,在对话框上我设置了两个按钮,下⾯是"显⽰"按钮的代码://创建Excel服务器if(!exlapp.CreateDispatch("Excel.Application")){AfxMessageBox("⽆法启动Excel服务器!");return;}COleVariant avar((long)DISP_E_PARAMNOTFOUND,VT_ERROR);exlapp.SetVisible(TRUE);//使Excel可见exlapp.SetUserControl(TRUE);//允许其它⽤户控制Excel,否则Excel将⼀闪即逝.//Open an excel filechar path[MAX_PATH];GetCurrentDirectory(MAX_PATH,path);CString strPath = path;strPath += "\\VCOpExcel";wbks.AttachDispatch(exlapp.GetWorkbooks());lpDisp=wbks.Open(strPath,avar,avar,avar,avar,avar,avar,avar,avar,avar,avar,avar,avar,avar,avar);wbks.ReleaseDispatch();exlapp.ReleaseDispatch();D,与上⾯第⼀种⽅法⼀样,可以插⼊记录:UpdateData(); //读⼊数据if (""==m_name) //判断名字输⼊有效{MessageBox("Please input a right name");return;}if (0>=m_age||100<=m_age) //判断年龄输⼊有效{MessageBox("Please input a right age");return;}char *p=strupr(_strdup(m_gener));if (strcmp(p,"FEMALE")&&strcmp(p,"MALE")) //判断性别输⼊有效{MessageBox("Please input a right gener");return;}Range range;Range usedRange;COleVariant avar((long)DISP_E_PARAMNOTFOUND,VT_ERROR);if(!exlapp.CreateDispatch("Excel.Application")) //启动服务器{AfxMessageBox("⽆法启动Excel服务器!");return;}char path[MAX_PATH];GetCurrentDirectory(MAX_PATH,path);CString strPath = path;strPath += "\\VCOpExcel";wbks.AttachDispatch(exlapp.GetWorkbooks());lpDisp=wbks.Open(strPath, //初始化.avar,avar,avar,avar,avar,avar,avar,avar,avar,avar,avar,avar,avar,avar);wbk.AttachDispatch(lpDisp);whts.AttachDispatch(wbk.GetWorksheets());lpDisp=wbk.GetActiveSheet();wht.AttachDispatch(lpDisp);usedRange.AttachDispatch(wht.GetUsedRange());range.AttachDispatch(usedRange.GetRows());long iRowNum=range.GetCount();//已经使⽤的⾏数range.AttachDispatch(wht.GetCells());range.SetItem(COleVariant(long(iRowNum+1)),COleVariant(long(1)),COleVariant(m_name)); range.SetItem(COleVariant(long(iRowNum+1)),COleVariant(long(2)),COleVariant(m_age)); range.SetItem(COleVariant(long(iRowNum+1)),COleVariant(long(3)),COleVariant(m_gener)); wbk.Save();wbk.Close(avar,COleVariant(strPath),avar);wbks.Close();exlapp.Quit();第⼆种⽅法完。

c读取excel文件内容

c读取excel文件内容

c读取excel文件内容在C语言编程中,有时候我们需要读取Excel文件的内容,进行一些数据处理或者分析。

本文将介绍如何在C语言中读取Excel文件的内容,以及如何处理这些数据。

首先,我们需要使用C语言中的一些库来实现对Excel文件的读取。

在C语言中,我们可以使用libxls这个库来读取Excel文件。

这个库提供了一些函数,可以帮助我们打开Excel文件,并逐行读取其中的内容。

接下来,我们需要打开Excel文件,并创建一个workbook对象来表示这个文件。

然后,我们可以使用libxls提供的函数来逐行读取Excel文件中的内容。

通过这些函数,我们可以获取Excel文件中的每一行数据,然后进行处理。

在读取Excel文件的内容之后,我们可能需要对这些数据进行一些处理。

例如,我们可以将这些数据存储到一个数组中,或者进行一些计算操作。

在C语言中,我们可以使用数组来存储这些数据,然后通过循环来对这些数据进行处理。

除了使用libxls这个库之外,我们还可以考虑使用其他一些库来实现对Excel文件的读取。

例如,我们可以使用libxlsxwriter这个库来创建和写入Excel文件,同时也可以使用它来读取Excel文件的内容。

这个库提供了一些函数,可以帮助我们读取Excel文件中的内容,并进行一些处理操作。

总的来说,在C语言中读取Excel文件的内容并不是一件很困难的事情。

通过使用一些库,我们可以很容易地实现对Excel文件的读取,并对其中的内容进行处理。

通过本文的介绍,相信大家对在C语言中读取Excel文件的内容有了更深入的了解。

希望本文能对大家有所帮助。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

利用automation具体如下:1。

你要在新建的工程中导入excel的类库。

以新建基础对话框工工程test为例。

建好后通过类向导(ctrl+w)addclass选from a type libray...,excel2003的是excel.exe文件,在c:/program files/microsoft office/office11/文件夹下。

选excel.exe,把所有的类都导入,注意使用Shift按键选择。

2。

在testApp::InitInstance()中初始化,AfxOleInit();//加在initinstance方法里最前就好。

3. 在对话框中加一个按钮,双击按钮对应的处理函数如下:别望了在加头文件:在#include "stdafx.h"后面加#include "excel.h"3.1//打开Excel文件,使用Excel程序显示,不读数据,也不写入数据,手工使用鼠标关闭Excel文件。

//声明操作excel文件类的对象_Application objApp;// _application代表了EXCEL服务器Workbooks objBooks; //workbooks表示整个Excel服务器(表现为一个.xls文件)里所有的表,(可以通过"新建"得到多个表,即MDI程序里的一个视窗一样,所有的视窗就是workbooks),COleVariant VOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);//检测电脑上是否安装了Excel程序。

if(!objApp.CreateDispatch("Excel.Application")){ AfxMessageBox("无法启动Excel程序,请正确安装!");return;}objApp.m_bAutoRelease = TRUE; //??什么意思?objApp.SetVisible(TRUE); //打开Excel程序,没有显示任何数据。

objApp.SetUserControl(TRUE);//允许其它用户控制Excel,否则Excel将一闪即逝//下面两句的功能和objBooks = objApp.GetWorkbooks(); 一样。

LPDISPATCH pWkBooks = objApp.GetWorkbooks(); //GetWorkbooks什么功能?objBooks.AttachDispatch(pWkBooks,TRUE); //将一个IDispatch连接附着于COleDispatchDriver对象//获得当前程序所在的路径,excel文件在此路径下。

char CurrentProgramPath[MAX_PATH];GetCurrentDirectory(MAX_PATH,CurrentProgramPath);CString ExcelFilePathName = CurrentProgramPath;//ExcelFilePathName表示excel文件的路径和文件名ExcelFilePathName += "\\Data.xls";//打开Excel文件,如果前面设置了objApp.SetVisible(TRUE),所以下句命令执行后,显示这个excel文件的数据。

//如果前面没有设置objAppApp.SetVisible(TRUE),下句命令执行后,不会显示这个Excel文件的数据。

//采用只读方式打开excel文件,_variant_t(true), true必须为小写,大写编译出错。

objBooks.Open(ExcelFilePathName,VOptional, _variant_t(true), VOptional, VOptional, VOptional, VOptional, VOptional,VOptional, VOptional, VOptional, VOptional,VOptional,VOptional,VOptional);3.2//打开Excel文件,读出其中的数据,供后面设置Mschart控件使用。

//Excel文件使用三列,第一列表示序号,第二列表示第一组份的数据,第二列表示第二组份的数据。

//声明操作excel文件类的对象_Application objApp; //_application代表了EXCEL服务器Workbooks objBooks;//workbooks表示整个Excel服务器(表现为一个.xls文件)里所有的表,(可以通过"新建"得到多个表,即MDI程序里的一个视窗一样,所有的视窗就是workbooks),_Workbook objBook;//_workbook就是一个表,相当于MDI中的一个视窗,Worksheets objSheets; // worksheets表示所有的表单,每个表都可能有很多表单(建立一个Excel文件之后,打开,可以看到有sheet1,sheet2等,所有这些sheetn就组成了worksheets)_Worksheet objSheet;//_worksheet就表示一个表单,Range objRange,usedRange;//Range 表示元素的集合COleVariant VOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);VARIANT ret;CString cstr="";//检测电脑上是否安装了Excel程序。

if(!objApp.CreateDispatch("Excel.Application")){ AfxMessageBox("无法启动Excel服务器!");return;}// objApp.SetVisible(TRUE); //打开Excel程序,没有显示任何数据。

// objApp.SetUserControl(FALSE);//允许其它用户控制Excel,否则Excel将一闪即逝// objApp.m_bAutoRelease = TRUE; //??什么意思?objBooks = objApp.GetWorkbooks();//获得当前程序所在的路径,excel文件在此路径下。

char CurrentProgramPath[MAX_PATH];GetCurrentDirectory(MAX_PATH,CurrentProgramPath);CString ExcelFilePathName = CurrentProgramPath;//ExcelFilePathName表示excel文件的路径和文件名ExcelFilePathName += "\\Data.xls";//打开Excel文件,如果前面设置了objApp.SetVisible(TRUE),所以下句命令执行后,显示这个excel文件的数据。

//如果前面没有设置objAppApp.SetVisible(TRUE),下句命令执行后,不会显示这个Excel文件的数据。

//采用只读方式打开excel文件,_variant_t(true), true必须为小写,大写编译出错。

objBook = objBooks.Open(ExcelFilePathName,VOptional, _variant_t(true), VOptional, VOptional, VOptional,VOptional, VOptional, VOptional, VOptional, VOptional, VOptional, VOptional, VOptional, VOptional);objSheets = objBook.GetWorksheets();//设定当前的工作表sheet是excel文件的第几个工作表sheet COleVariant((short)1)表示第一个COleVariant((short)2)表示第二个objSheet = objSheets.GetItem(COleVariant((short)1));//获得已经使用的行数和列数。

usedRange.AttachDispatch(objSheet.GetUsedRange());objRange.AttachDispatch(usedRange.GetRows());long iRowNum=objRange.GetCount();//已经使用的行数objRange.AttachDispatch(usedRange.GetColumns());long iColumnNum=objRange.GetCount();//已经使用的列数//设定读取的行列范围//objRange = objSheet.GetRange(COleVariant("A1"), COleVariant("C1000"));ret = objRange.GetValue(VOptional);COleSafeArray sa(ret);//读出内容。

long lNumRows; long lNumCols;sa.GetUBound(1, &lNumRows); sa.GetUBound(2, &lNumCols);long index[2];VARIANT val;int row, column;for(row=1;row<=iRowNum;row++)//row表示行数{ for(column=1;column<=iColumnNum;column++)//c表示列数{ index[0]=row;index[1]=column;sa.GetElement(index, &val);//val类对象中包含取的row行、column列的内容switch(val.vt){ case VT_R8: //数字{ //TRACE("\t\t%1.2f", val.dblVal);CString cstr2=""; cstr2.Format("%1.1f",val.dblVal); cstr+=cstr2+"\n";break;}case VT_BSTR: //文字{//TRACE("\t\t%s",(CString)val.bstrVal);cstr+=(CString)val.bstrVal+"\n";break;}case VT_EMPTY://表示此row行、column列的内容为空。

相关文档
最新文档