C++读写excel

合集下载

C++读写EXCEL文件方式比较

C++读写EXCEL文件方式比较

其基本方法都是使用导出的.h文件进行OLE操作,但是由于OLE的接口说明文档不多,想非常完美的使用她们也不是太容易,好在例子也很多。
网上普遍认为OLE速度慢,EXCEL的OLE读写方式也基本一样。但是读取速度可以改进,如果在读取的加载整个Sheet的Range的全部数据,而不是一个个单元格读取,那么速度还是相对不错。想想原理也很简单,整体读取减少了OLE的交互次数。OLE的写入方式一般只能几个进行比较方便,所以速度可能要快很多。
文章出处:飞诺网():/course/3_program/c++/cppjs/20090414/165019.html
/
按照他的说明,他可以不依赖EXCEL读取XLS文件。包括设置格式等。看例子操作应该很简单。但是是否可以移植到Linux平台,我估计难度也不小。呵呵。
由于要收费,没有法子测试了。
7.网上一些号称不用OLE读取EXCEL例子
初步看了一下,这个应该是网上探索EXCEL格式文档的例子。可以实际操作的方式不强。
/KB/database/cspreadsheet.aspx
5.ADO的方式
ADO的方式听说应该就是使用OLEDB的方式。和OLE的方式应该没有本质区别。我看了看例子也和OLE很像
6.LibXL
LibXL 是一个收费的EXCEL的库。
读取Excel的XLS文件的方法有很多,但是也许就是因为方法太多,大家在选择的时候会很疑惑。
由于前两天要做导表工具,比较了常用的方法,总结一下写个短文,
1.OLE的方式
这个大约是最常用的方式,这个方式其实启动了一个EXCEL的进程在背后读写EXCEL文件,这个方式的最大好处是什么事情都能做。包括设置EXCEL的格式,增加删除Sheet,读写单元格,等等。功能几乎是最全的,而上的几个EXCEL库。

c语言excel用法

c语言excel用法

在 C 语言中,要使用 Excel,一般可以通过 COM(Component Object Model)技术,调用 Excel 的 COM 接口来实现。

COM 是一种面向对象的编程模型,用于组件之
间的通信。

以下是一个简单的示例,演示了如何在 C 语言中通过 COM 接口与
Excel 进行交互。

注意:以下代码仅是一个简单的示例,实际应用中可能需要更多的错误处理和资
源释放操作。

这个示例演示了如何打开一个 Excel 文件,获取其中的某个单元格的内容。

请注意,这只是一个简单的示例,实际中可能需要更多的代码来处理错误、释放资源等情况。

在使用 COM 接口时,确保正确地处理错误和释放资源是很重要的。

c语言操作excel文件的系列代码

c语言操作excel文件的系列代码

为了深入探讨如何使用C语言操作excel文件的系列代码,首先我们需要了解一些基本概念和背景知识。

C语言作为一种高效、灵活的编程语言,能够通过各种库和函数来实现对excel文件的读写操作。

在本文中,我将从简单的读取excel文件开始,逐步深入到更复杂的数据处理和格式操作,帮助您更好地理解和掌握这一主题。

1. 读取excel文件在使用C语言操作excel文件时,我们首先需要使用相应的库来实现对excel文件的读取操作。

通过调用库中的函数,我们可以打开excel 文件、读取其中的数据,并进行必要的处理。

在这一部分,我将介绍如何使用C语言代码来打开excel文件,并读取其中的数据,以便您能够快速上手并理解基本的读取操作。

2. 写入excel文件除了读取操作,我们还需要了解如何使用C语言来向excel文件中写入数据。

通过调用库中相应的函数,我们可以打开excel文件、写入数据,并进行必要的格式化和处理。

在这一部分,我将介绍如何使用C语言代码来创建excel文件,并向其中写入数据,以便您能够深入理解和掌握写入操作的技巧和要点。

3. 数据处理和格式操作在实际应用中,我们常常需要对从excel文件中读取到的数据进行处理和格式操作。

这包括对数据进行计算、筛选、排序等操作,以及对数据进行格式化和样式设置等操作。

在这一部分,我将介绍如何使用C语言代码来对excel文件中的数据进行各种处理和格式操作,帮助您更好地应用这些技巧解决实际问题。

4. 个人观点和理解在学习和掌握C语言操作excel文件的系列代码时,我认为最重要的是理解其基本原理和核心思想。

只有深入理解了excel文件的读写操作、数据处理和格式操作等核心概念,我们才能更好地运用C语言代码来实现各种功能。

我建议在学习过程中注重对基本概念的理解,并多做实践和实战,以提升自己的技能和水平。

总结回顾通过本文的深入讨论和详细介绍,我相信您已经对使用C语言操作excel文件的系列代码有了全面、深刻的理解。

.netMVC使用NPOI读取Excel模板,再写入数据

.netMVC使用NPOI读取Excel模板,再写入数据

.netMVC使⽤NPOI读取Excel模板,再写⼊数据 NPOI其实已经介绍的差不多了,再贴⼀个⽅便以后复制粘贴。

亮点其实是 Server.MapPath 这个东西,可以找到MVC⼯程下的⽂件夹,找路径还是很⽅便的。

///<summary>///设备导出Excel表格///</summary>public FileResult ExportExcel(){string fileDir = Server.MapPath("~/ReportTemplate/我的模板.xls");FileStream Dir = new FileStream(fileDir, FileMode.Open, FileAccess.Read);HSSFWorkbook workbook = new HSSFWorkbook(Dir);ISheet sheet = workbook.GetSheet("sheet1");MemoryStream ms = new MemoryStream();DataTable table = EQEquipmentBLL.GetInstance().GetListForExport("");for (int i = 2; i < table.Rows.Count; i++){sheet.GetRow(i).GetCell(0).SetCellValue(table.Rows[i-2]["EqID"].ToString());sheet.GetRow(i).GetCell(1).SetCellValue(table.Rows[i-2]["EqName"].ToString());sheet.GetRow(i).GetCell(2).SetCellValue(table.Rows[i-2]["ProduceFactory"].ToString());sheet.GetRow(i).GetCell(3).SetCellValue(table.Rows[i-2]["Model"].ToString());}sheet.ForceFormulaRecalculation = true; //强制计算Excel中的公式workbook.Write(ms);ms.Flush();ms.Seek(0, SeekOrigin.Begin);return File(ms, "application/ms-excel", $"我的模板{DateTime.Now.ToString("D")}.xls");}。

C#操作Excel(创建、打开、读写、保存)几种方法的总结

C#操作Excel(创建、打开、读写、保存)几种方法的总结

C#操作Excel(创建、打开、读写、保存)⼏种⽅法的总结Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\MyExcel.xls;Extended Properties=""Excel 8.0;HDR=Yes;IMEX=1""注意,Extended Properties 所需的双引号必须还要加双引号。

使⽤打开、读取并关闭代码⽰例如下:using System.Data.OleDb;using System.Data;String sConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" +"Data Source=c:/test.xls;" +"Extended Properties=Excel 8.0;";OleDbConnection objConn = new OleDbConnection(sConnectionString);objConn.Open();OleDbCommand objCmdSelect =new OleDbCommand("SELECT * FROM [sheet1]", objConn);OleDbDataAdapter objAdapter1 = new OleDbDataAdapter();objAdapter1.SelectCommand = objCmdSelect;DataSet objDataset1 = new DataSet();//将Excel中数据填充到数据集objAdapter1.Fill(objDataset1, "XLData");objConn.Close();从上⾯可以看出,使⽤可将Excel当作普通数据库,使⽤SQL语句来操作。

C#操作Excel实用技巧三则

C#操作Excel实用技巧三则

C#操作Excel实用技巧三则在C#中操作Excel已经成为了我们日常工作中不可或缺的一部分。

无论是用Excel做报表还是分析数据都需要用到C#去操作数据,这里介绍三个在C#操作Excel时比较实用的技巧。

一、利用COM对象操作Excel在C#中操作Excel最常用的方法就是利用COM对象,这种方法可以使用Microsoft.Office.Interop.Excel 库中的 Workbook 和 Worksheet 类型。

```csharpusing Microsoft.Office.Interop.Excel;//连接ExcelApplication excelApp = new Application();Workbook excelWorkbook = excelApp.Workbooks.Open(@"C:\path\to\file.xls");Worksheet excelWorksheet = (Worksheet)excelWorkbook.Worksheets.Item[1];```我们可以对这两个对象中的内容进行访问和操作。

```csharp//读取数据Range range1 = excelWorksheet.get_Range("A1", "A5");object[,] values = range1.Value2;以上的代码演示了如何读取和写入Excel中的数据,这些操作可以帮助我们快速地生成批量的报表。

COM对象的方法使用起来非常简单,但是有一个缺点就是它需要安装Excel应用程序才能进行操作,这使得应用的移植性和可维护性都变得很麻烦。

所以我们需要寻找一个不需要安装Excel应用程序的方法来操作Excel。

OpenXML是一个官方的XML文件格式,可以用来读写Excel、Word、PowerPoint等Microsoft Office文件,并且不依赖于Microsoft Office的应用程序。

excel函数c语言

excel函数c语言

excel函数c语言(实用版)目录1.Excel 函数概述2.C 语言概述3.Excel 函数与 C 语言的异同4.如何在 C 语言中调用 Excel 函数5.实例:在 C 语言中使用 Excel 函数正文【1.Excel 函数概述】Excel 函数是指在 Microsoft Excel 中用于执行各种计算和操作的预先定义的函数。

它们可以在 Excel 工作表中使用,以简化和加速数据分析和处理任务。

Excel 函数包括诸如 SUM(求和)、AVERAGE(平均值)、COUNT(计数)等常用函数,以及更为复杂的统计和财务函数。

【2.C 语言概述】C 语言是一种通用的、过程式的计算机编程语言。

它被广泛应用于操作系统、嵌入式系统、硬件驱动等领域。

C 语言具有丰富的语法结构和强大的功能,支持多种数据类型、运算符、控制结构和函数。

C 语言的普及程度和实用性使其成为学习其他编程语言的基础。

【3.Excel 函数与 C 语言的异同】Excel 函数和 C 语言在功能和用途上有明显的差异,但它们在某些方面也有相似之处。

首先,它们都是用于处理数据的工具,只是适用的场景不同。

Excel 函数主要用于处理表格数据,而 C 语言则适用于更广泛的计算机编程任务。

其次,它们都使用类似于变量、函数、条件语句等编程概念。

然而,Excel 函数是预先定义的,而 C 语言需要程序员手动编写函数。

【4.如何在 C 语言中调用 Excel 函数】要在 C 语言中调用 Excel 函数,需要使用第三方库,例如Microsoft 提供的 Excel API 或开源的库如 libxls。

这些库提供了一系列函数来读取和操作 Excel 文件,以及调用 Excel 内置函数。

使用这些库,C 语言程序员可以在 C 代码中使用 Excel 函数,就像在 Excel 工作表中使用它们一样。

【5.实例:在 C 语言中使用 Excel 函数】以下是一个简单的示例,演示如何在 C 语言中使用 Excel 函数。

c-操作excel总结

c-操作excel总结

c-操作excel总结.docC语言操作Excel总结引言简要介绍C语言在数据处理领域的作用,以及如何通过C语言操作Excel文件。

Excel文件基础2.1 Excel文件格式2.1.1 .xls格式2.1.2 .xlsx格式2.2 Excel文件结构2.2.1 文件头2.2.2 工作表数据2.2.3 文件尾C语言操作Excel的库和工具3.1 第三方库介绍3.1.1 libxl3.1.2 OpenXLSX3.2 工具和环境配置3.2.1 安装和配置库3.2.2 开发环境搭建读取Excel文件4.1 打开Excel文件4.1.1 初始化库4.1.2 打开文件4.2 读取工作表4.2.1 获取工作表列表4.2.2 选择工作表4.3 读取单元格数据4.3.1 按行列索引读取4.3.2 按单元格地址读取写入Excel文件5.1 创建新的Excel文件5.1.1 初始化工作簿5.1.2 添加工作表5.2 写入单元格数据5.2.1 写入文本数据5.2.2 写入数值数据5.3 保存和关闭文件5.3.1 保存更改5.3.2 关闭工作簿操作工作表6.1 工作表的基本操作6.1.1 添加/删除工作表6.1.2 重命名工作表6.2 工作表的高级操作6.2.1 设置工作表属性6.2.2 隐藏/显示工作表格式化Excel数据7.1 单元格格式化7.1.1 字体和颜色7.1.2 对齐方式7.2 行列格式化7.2.1 设置行高/列宽7.2.2 隐藏/显示行列高级功能8.1 数据筛选和排序8.1.1 实现数据筛选8.1.2 实现数据排序8.2 图表和图形8.2.1 创建图表8.2.2 插入图形错误处理和调试9.1 常见错误类型9.1.1 文件打开失败9.1.2 数据写入错误9.2 调试技巧9.2.1 日志记录9.2.2 错误代码映射安全性和性能优化10.1 安全性考虑10.1.1 数据加密10.1.2 防止数据泄露10.2 性能优化10.2.1 内存管理10.2.2 读写效率实际应用案例分析11.1 案例一:财务报表生成11.1.1 需求分析11.1.2 实现步骤11.2 案例二:数据导入导出11.2.1 应用场景11.2.2 解决方案结论12.1 C语言操作Excel的优势12.2 未来发展方向参考文献附录A. 常用函数和方法速查表B. 代码示例C. 常见问题解答。

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文件的内容有了更深入的了解。

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

NX二次开发-基于MFC界面的NX对Excel读写操作(OLE方式(COM组件))

NX二次开发-基于MFC界面的NX对Excel读写操作(OLE方式(COM组件))

NX⼆次开发-基于MFC界⾯的NX对Excel读写操作(OLE⽅式(COM组件))EXCAL操作(⼀)打开写⼊新建⼀个MFC项⽬点击下⼀步选择基于对话框直接点完成,进来后如下图先点项⽬,右键属性,更改为多字节。

先什么都不动,编译⼀下代码。

默认看能不能通过。

然后点项⽬,右键类向导。

弹出窗⼝如下点击添加类-类型库中的MFC类弹出如下我们切换到⽂件,点击添加。

此处添加要找到的⽂件就是你电脑上装的EXCAL.exe这个程序⽂件。

如果你不知道怎么找到的话,有⼀个⽅法,先去开始菜单找到你的EXCAL快捷⽅式,然后在点右键,打开⽂件所在的位置。

这样就找到了。

下⾯在回到MFC项⽬⾥⾯,我们选中这个⽂件。

添加进来之后,如图所⽰。

左侧为EXCAL给出的接⼝,我们来选择⼀些需要的添加进来。

我们就先添加这七个,后续有其他需求在添加其他的。

(先在左侧接⼝⾥选中⼀个,点中间的>就能添加到右侧⾥⽣成的类⾥,不想要就在点中间的<撤退回去。

)然后我们点完成,点确定。

就看到头⽂件⾃动添加进来了。

我们点击新增进来的EXCAL每个头⽂件,都把第⼀⾏的那句注释掉。

都注释完之后,我们在#include "stdafx.h"⾥添加EXCAL头⽂件,然后编译代码,出现如下报错问题。

这时我们双击这个错误,跳到对应的代码那⾥。

有问题的位置如下我们需要在DialogBox前⾯加上⼀个 _ 下划线。

再去编译就通过了。

别问我为什么,我答不上来,你照着搞就是了,别⼈就是这么搞的。

好的,到这⾥我们这个项⽬环境就算搭建完成了。

下⾯可以写代码了。

点击MFC那个对话框界⾯,双击确定。

在⾥⾯写代码。

代码如下:打开EXCAL,写⼊内容。

1//1.创建基本对象2 CApplication App; //创建应⽤程序实例3 CWorkbooks Books; //⼯作簿,多个Excel⽂件4 CWorkbook Book; //单个⼯作簿5 CWorksheets sheets;//多个sheet页⾯6 CWorksheet sheet; //单个sheet页⾯7 CRange range; //操作单元格8//2.打开指定Excel⽂件,如果不存在就创建9char path[MAX_PATH];10 GetCurrentDirectory(MAX_PATH, (TCHAR*)path);//获取当前路径11 CString strExcelFile = (TCHAR*)path;12 CString strdevName = _T("\\Test.xlsx"); //xls也⾏13 strExcelFile += strdevName;14 COleVariant15 covTrue((short)TRUE),16 covFalse((short)FALSE),17 covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);1819 LPDISPATCH lpdisp = NULL;20//1.创建Excel实例21if (!App.CreateDispatch(_T("Excel.Application"), NULL))22 {23 AfxMessageBox(_T("创建Excel实例失败"));24 exit(-1);25 }26else27 {28 AfxMessageBox(_T("创建成功"));29 }30 App.put_Visible(TRUE); //打开Excel31 App.put_UserControl(FALSE);32//2. 得到workbooks容器33 Books.AttachDispatch(App.get_Workbooks());34 Book.AttachDispatch(Books.Add(covOptional));35 sheets.AttachDispatch(Book.get_Worksheets());36 sheet.AttachDispatch(sheets.get_Item(COleVariant((short)1))); //获取sheet137 sheet.put_Name(_T("TestName")); //设置sheet1名字3839//3. 加载要合并的单元格40 range.AttachDispatch(sheet.get_Range(COleVariant(_T("B2")), COleVariant(_T("E2"))), TRUE);41 range.Merge(COleVariant((long)0)); //合并单元格4243//4. 设置表格内容44 range.AttachDispatch(sheet.get_Cells(), TRUE); //加载所有单元格45 range.put_Item(COleVariant((long)2), COleVariant((long)2), COleVariant(_T("电⽓⼯程及其⾃动化课程统计")));46 range.put_Item(COleVariant((long)3), COleVariant((long)2), COleVariant(_T("课程名称")));47 range.put_Item(COleVariant((long)3), COleVariant((long)3), COleVariant(_T("课时")));48 range.put_Item(COleVariant((long)3), COleVariant((long)4), COleVariant(_T("难度")));49 range.put_Item(COleVariant((long)3), COleVariant((long)5), COleVariant(_T("教学⽅式")));5051 range.put_Item(COleVariant((long)4), COleVariant((long)2), COleVariant(_T("电磁场")));52 range.put_Item(COleVariant((long)4), COleVariant((long)3), COleVariant(_T("30")));53 range.put_Item(COleVariant((long)4), COleVariant((long)4), COleVariant(_T("变态难")));54 range.put_Item(COleVariant((long)4), COleVariant((long)5), COleVariant(_T("⽼师讲课")));5556 range.put_Item(COleVariant((long)5), COleVariant((long)2), COleVariant(_T("电机学")));57 range.put_Item(COleVariant((long)5), COleVariant((long)3), COleVariant(_T("40")));58 range.put_Item(COleVariant((long)5), COleVariant((long)4), COleVariant(_T("难")));59 range.put_Item(COleVariant((long)5), COleVariant((long)5), COleVariant(_T("⽼师讲课加实验")));6061 range.put_Item(COleVariant((long)6), COleVariant((long)2), COleVariant(_T("PLC")));62 range.put_Item(COleVariant((long)6), COleVariant((long)3), COleVariant(_T("20")));63 range.put_Item(COleVariant((long)6), COleVariant((long)4), COleVariant(_T("普通")));64 range.put_Item(COleVariant((long)6), COleVariant((long)5), COleVariant(_T("⽼师讲课加实验")));656667 range.put_Item(COleVariant((long)7), COleVariant((long)2), COleVariant(_T("电⼒系统")));68 range.put_Item(COleVariant((long)7), COleVariant((long)3), COleVariant(_T("50")));69 range.put_Item(COleVariant((long)7), COleVariant((long)4), COleVariant(_T("难")));70 range.put_Item(COleVariant((long)7), COleVariant((long)5), COleVariant(_T("⽼师讲课加实验")));7172 range.AttachDispatch(sheet.get_UsedRange());//加载已使⽤的单元格73 range.put_WrapText(COleVariant((long)1)); //设置⽂本⾃动换⾏7475//5.设置对齐⽅式76//⽔平对齐:默认 1 居中 -4108,左= -4131,右=-415277//垂直对齐:默认 2 居中 -4108,左= -4160,右=-410778 range.put_VerticalAlignment(COleVariant((long)-4108));79 range.put_HorizontalAlignment(COleVariant((long)-4108));80//6.设置字体颜⾊81 CFont0 ft;82 ft.AttachDispatch(range.get_Font());83 ft.put_Name(COleVariant(_T("楷体"))); //字体84 ft.put_ColorIndex(COleVariant((long)1));//颜⾊ //⿊⾊85 ft.put_Size(COleVariant((long)12)); //⼤⼩8687 range.AttachDispatch(sheet.get_Range(COleVariant(_T("B2")), COleVariant(_T("E2"))), TRUE);88 ft.AttachDispatch(range.get_Font());89 ft.put_Name(COleVariant(_T("华⽂⾏楷")));90 ft.put_Bold(COleVariant((long)1));91 ft.put_ColorIndex(COleVariant((long)5)); //颜⾊92 ft.put_Size(COleVariant((long)18)); //⼤⼩93 Book.SaveCopyAs(COleVariant(strExcelFile)); //保存9495 Book.put_Saved(TRUE);96//8.释放资源97 range.ReleaseDispatch();98 sheet.ReleaseDispatch();99 sheets.ReleaseDispatch();100 Book.ReleaseDispatch();101 Books.ReleaseDispatch();102 App.ReleaseDispatch();编译后,我们点调试-开始执⾏。

c语言判断excel单元格数据

c语言判断excel单元格数据

c语言判断excel单元格数据【原创版】目录1.介绍 C 语言和 Excel2.讲解如何在 C 语言中判断 Excel 单元格数据3.举例说明如何使用 C 语言读取和判断 Excel 单元格数据4.总结正文C 语言是一种广泛使用的编程语言,它具有功能丰富、执行速度快等特点,被广泛应用于操作系统、嵌入式系统等领域。

Excel 是 Microsoft Office 套件中的一款电子表格软件,它具有强大的数据处理和分析功能,被广泛应用于办公和数据分析领域。

在一些特定的场景下,我们需要在 C 语言程序中读取和判断 Excel 单元格数据。

为了实现这个功能,我们可以使用一些第三方库,如 libxls 和 openpyxl 等。

下面我们将以 libxls 库为例,介绍如何在 C 语言中判断 Excel 单元格数据。

首先,需要在 C 语言程序中引入 libxls 库。

在编译时,需要使用`-lxls`参数链接库文件。

接下来,我们可以使用 libxls 提供的 API 读取 Excel 文件,并获取单元格数据。

例如,我们可以使用以下代码读取 Excel 文件中的 A1 单元格数据:```c#include <stdio.h>#include <xls.h>int main() {XLS *workbook;XLS_SHEET *sheet;XLS_ROW *row;XLS_CELL *cell;workbook = xls_read_file("example.xls");sheet = workbook->sheet_list[0];row = sheet->row_list[0];cell = row->cell_list[0];printf("A1 单元格的数据是:%s", cell->ct_str);xls_free_workbook(workbook);return 0;}```在获取到单元格数据后,我们可以根据需要对其进行判断。

c++的读写excel

c++的读写excel

c++的读写excel在C++中,可以使用第三方库来读写Excel文件。

以下是两个常用的库:1. LibXL,LibXL是一个功能强大的C++库,用于读写Excel文件。

它支持读取和写入Excel文件的各种操作,如读取单元格数据、写入数据、设置样式等。

使用LibXL,你可以轻松地在C++中读取和写入Excel文件。

2. POCO,POCO是一个跨平台的C++类库,提供了许多实用的功能,包括读写Excel文件。

POCO库中的Poco::Data::Excel命名空间提供了读写Excel文件的功能。

你可以使用Poco::Data::Excel::Workbook类来打开Excel文件,使用Poco::Data::Excel::Worksheet类来读取和写入工作表数据。

无论你选择使用哪个库,下面是一个简单的示例,展示了如何使用LibXL来读取和写入Excel文件:cpp.#include <iostream>。

#include <libxl.h>。

int main() {。

libxl::Book book = xlCreateBook();if (book) {。

if (book->load("example.xls")) {。

libxl::Sheet sheet = book->getSheet(0); if (sheet) {。

int rowCount = sheet->lastRow();int colCount = sheet->lastCol();for (int row = 0; row <= rowCount; ++row) {。

for (int col = 0; col <= colCount; ++col) {。

libxl::CellType cellType = sheet->cellType(row, col);if (cellType ==libxl::CELLTYPE_NUMBER) {。

c语言excel用法 -回复

c语言excel用法 -回复

c语言excel用法-回复如何在C语言中使用Excel功能?在许多应用程序开发中,经常需要与Excel电子表格进行交互。

Excel是一种非常强大的办公软件,提供了丰富的功能,涵盖了各种数据处理和计算的需求。

C语言是一种高效且功能强大的编程语言,可以使用其灵活性和强大的算法来处理Excel数据。

本文将一步一步地介绍如何在C语言中使用Excel功能。

第一步:安装Excel库在C语言中使用Excel功能,我们需要安装一些Excel库。

目前,有许多可用的Excel库可以选择,如libxls、excelix、libxlsxwriter等。

这些库可以用于读取、写入和修改Excel电子表格。

在选择库的时候,我们需要考虑到库的稳定性、易用性和功能丰富性。

第二步:导入所需的头文件在使用Excel库之前,我们需要导入相关的头文件,以便在代码中使用Excel相关的函数和结构。

根据所选择的Excel库的不同,导入的头文件也会有所不同。

例如,如果选择了libxls库,我们需要导入libxls的头文件,如"#include <xls.h>"。

如果选择了libxlsxwriter库,我们需要导入libxlsxwriter的头文件,如"#include <xlsxwriter.h>"。

第三步:打开Excel电子表格一旦导入了所需的头文件,我们就可以开始使用Excel库。

首先,我们需要打开Excel电子表格。

在大多数Excel库中,可以使用如下的方法打开Excel电子表格:1. 准备要打开的Excel文件的路径和名称。

2. 创建一个与Excel电子表格关联的Excel对象或工作表对象。

3. 使用打开方法打开Excel电子表格。

例如,在libxls库中,我们可以使用xls_open()函数打开Excel电子表格。

其基本用法如下所示:xls_t *xls = xls_open("文件路径");第四步:读取和操作Excel数据一旦成功打开了Excel电子表格,我们可以开始读取和操作Excel数据。

用c#读取Excel的三种方法

用c#读取Excel的三种方法

C#读取Excel的三种方法及比较(1)OleDB方式优点:将Excel直接当做数据源处理,通过SQL直接读取内容,读取速度较快。

缺点:读取数据方式不够灵活,无法直接读取某一个单元格,只有将整个Sheet 页读取出来后(结果为Datatable)再在Datatable中根据行列数来获取指定的值。

当Excel数据量很大时。

会非常占用内存,当内存不够时会抛出内存溢出的异常。

读取代码如下:1:public DataTableGetExcelTableByOleDB(string strExcelPath, string tableName) 2: {3:try4:{5:DataTabledtExcel = new DataTable();6://数据表7:DataSet ds = new DataSet();8://获取文件扩展名9:string strExtension = System.IO.Path.GetExtension(strExcelPath);10:string strFileName = System.IO.Path.GetFileName(strExcelPath);11://Excel的连接12:OleDbConnectionobjConn = null;13:switch (strExtension)14:{15:case".xls":16:objConn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + strExcelPath + ";" + "Extended Properties=\"Excel8.0;HDR=NO;IMEX=1;\"");17:break;18:case".xlsx":19:objConn = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + strExcelPath + ";" + "Extended Properties=\"Excel12.0;HDR=NO;IMEX=1;\"");20:break;21:default:22:objConn = null;23:break;24:}25:if (objConn == null)26:{27:returnnull;28:}29:objConn.Open();30://获取Excel中所有Sheet表的信息31://System.Data.DataTableschemaTable =objConn.GetOleDbSchemaTable(System.Data.OleDb.OleDbSchemaGuid.Tables, null); 32://获取Excel的第一个Sheet表名33://string tableName = schemaTable.Rows[0][2].ToString().Trim();34:string strSql = "select * from [" + tableName + "]";35://获取Excel指定Sheet表中的信息36:OleDbCommandobjCmd = new OleDbCommand(strSql, objConn);37:OleDbDataAdaptermyData = new OleDbDataAdapter(strSql, objConn);38:myData.Fill(ds, tableName);//填充数据39:objConn.Close();40://dtExcel即为excel文件中指定表中存储的信息41:dtExcel = ds.Tables[tableName];42:return dtExcel;43:}44:catch45:{46:returnnull;47:}48: }下面说明一下连接字符串HDR=Yes,这代表第一行是标题,不做为数据使用(但是我在实际使用中,如果第一行存在复杂数值,那么读取得到的Datatable列标题会自动设置为F1、F2等方式命名,与实际应用不符,所以当时是通过HDR=No方式将所有内容读取到Datatable中,然后手动将第一行设置成标题的);IMEX ( IMportEXport mode )设置IMEX 有三种模式:0 is Export mode1 is Import mode2 is Linked mode (full update capabilities)我这里特别要说明的就是IMEX 参数了,因为不同的模式代表著不同的读写行为:当IMEX=0 时为“汇出模式”,这个模式开启的Excel 档案只能用来做“写入”用途。

windows平台下xlnt结合visualstudio2017用c++操作excel

windows平台下xlnt结合visualstudio2017用c++操作excel

windows平台下xlnt结合visualstudio2017⽤c++操作excel 安装cmakeWindows下载安装xlntCmake编译xlnt1.打开Cmake(Gui)2.点击左下⾓ config3.设置完成之后点击 Generate4. ⽣成之后点击openProject5.在VS中点击本地调试器()等项⽬⽣成完成visual studio2017 项⽬中引⼊xlnt配置xlnt 到你的项⽬以下是visual 2017 使⽤xlnt ⽣成excel的⽰例项⽬1.⽣成空的项⽬2.给项⽬配置xlnt3.在demo.cpp添加代码4. ⽣成 --> 编译或者直接点击本地调试器完成调试最后会⽣成解决xlnt读写中⽂写的问题参考安装cmakecmake官⽹下64位Windows下载安装xlntgit clone https:///tfussell/xlnt.gitcd xlntmkdir build# git clone刚才下载的xlnt源代码位置 F:\CODE\CPPCODE\xlnt# 如果下载的zip⽂件源代码位置 F:\CODE\CPPCODE\xlnt-master# cd xlnt-master# mkdir build# 我直接下载的zip⽂件所以我的xlnt源代码地址是 F:\CODE\CPPCODE\xlnt-masterCmake编译xlnt1.打开Cmake(Gui)在where is souce codedir 放xlnt源代码地址 ( F:\CODE\CPPCODE\xlnt-maste )在在where build the ... 放你新建的 build ⽂件夹地址(F:/CODE/CPPCODE/xlnt-master/build)2.点击左下⾓ config选中你的visual Studio 版本下拉选中电脑版本的vs (默认是32位的 64位visual Stdio需要⾃⼰选择)--> finish3.设置完成之后点击 Generate4. ⽣成之后点击openProject5.在VS中点击本地调试器()等项⽬⽣成完成PS: 项⽬在visual stdudio 本地调试器⽣成解决⽅案会弹窗跳出警告⽆法启动程序请⽆视在 xlnt-master\include中得到头⽂件⽂件夹在 xlnt-master\build\source\Debug中得到动态链接库动态链接库中有 xlntd.dll xlntd.lib 这是需要⽤到的东西如果没有xlntd.dll就是没编译好请重试visual studio2017 项⽬中引⼊xlnt配置xlnt 到你的项⽬项⽬右键点击它,然后选择最下⽅的属性按钮,打开配置的窗⼝1. 配置头⽂件路径的配置配置属性-VC++⽬录-引⽤⽬录填⼊ F:\CODE\CPPCODE\xlnt-master\include (根据你⾃⼰的源码位置做出相应改变) 2. 第三⽅库库⽂件路径配置属性-VC++⽬录-库⽬录填⼊ F:\CODE\CPPCODE\xlnt-master\build\source\Debug3. 引⽤库名称的配置配置属性-连接器-依赖-附加依赖项填⼊ xlntd.lib4. 配置完之后复制xlntd.dll放到你的项⽬⽂件夹中去(将xlnt-master\include下的 xlnt⽂件夹也复制到项⽬中去)以下是visual 2017 使⽤xlnt ⽣成excel的⽰例项⽬环境 win10 64位 VS2017 64位 cmake 3.12.2 64位1.⽣成空的项⽬vs2017 ⽂件->新建–>其他–>空项⽬–>ddxls(C:\Users\Administrator\source\repos\ddxls)添加demo.cpp⽂件项⽬–>右键–>添加新项 -->demo.cpp2.给项⽬配置xlnt- 项⽬右键点击,然后选择最下⽅的属性按钮,打开配置的窗⼝- 1. 配置头⽂件路径的配置配置属性-VC++⽬录-引⽤⽬录填⼊ xlnt-master\include- 2. 第三⽅库库⽂件路径配置属性-VC++⽬录-库⽬录填⼊ xlnt-master\build\source\Debug- 3. 引⽤库名称的配置配置属性-连接器-依赖-附加依赖项填⼊ xlntd.lib- 4.给项⽬添加动态链接库复制xlntd.dll放到你的项⽬⽂件夹中去(将xlnt-master\include下的 xlnt⽂件夹也复制到项⽬⽂件夹"C:\Users\Administrator\source\repos\ddxls\ddxls中去"3.在demo.cpp添加代码#include <iostream>#include "xlnt/xlnt.hpp"#include <string.h>#include <stdio.h>#define _CRT_SECURE_NO_WARNINGS#include <vector>#include <string>int main(){//Creating a 2 dimensional vector which we will write values tostd::vector< std::vector<std::string> > wholeWorksheet;//Looping through each row (100 rows as per the second argument in the for loop)for (int outer = 0; outer < 100; outer++){//Creating a fresh vector for a fresh rowstd::vector<std::string> singleRow;//Looping through each of the columns (100 as per the second argument in the for loop) in this particular rowfor (int inner = 0; inner < 100; inner++){//Adding a single value in each cell of the rowstd::string val = std::to_string(inner + 1);singleRow.push_back(val);}//Adding the single row to the 2 dimensional vectorwholeWorksheet.push_back(singleRow);std::clog << "Writing to row " << outer << " in the vector " << std::endl;}//Writing to the spread sheet//Creating the output workbookstd::clog << "Creating workbook" << std::endl;xlnt::workbook wbOut;//Setting the destination output file namestd::string dest_filename = "output.xlsx";//Creating the output worksheetxlnt::worksheet wsOut = wbOut.active_sheet();//Giving the output worksheet a title/namewsOut.title("data");//We will now be looping through the 2 dimensional vector which we created above//In this case we have two iterators one for the outer loop (row) and one for the inner loop (column)std::clog << "Looping through vector and writing to spread sheet" << std::endl;for (int fOut = 0; fOut < wholeWorksheet.size(); fOut++){std::clog << "Row" << fOut << std::endl;for (int fIn = 0; fIn < wholeWorksheet.at(fOut).size(); fIn++){//Take notice of the difference between accessing the vector and accessing the work sheet//As you may already know Excel spread sheets start at row 1 and column 1 (not row 0 and column 0 like you would expect from a C++ vector) //In short the xlnt cell reference starts at column 1 row 1 (hence the + 1s below) and the vector reference starts at row 0 and column 0wsOut.cell(xlnt::cell_reference(fIn + 1, fOut + 1)).value(wholeWorksheet.at(fOut).at(fIn));//Further clarification to avoid confusion//Cell reference arguments are (column number, row number); e.g. cell_reference(fIn + 1, fOut + 1)//Vector arguments are (row number, column number); e.g. wholeWorksheet.at(fOut).at(fIn)}}std::clog << "Finished writing spread sheet" << std::endl;wbOut.save(dest_filename);return 0;}4. ⽣成 --> 编译或者直接点击本地调试器完成调试最后会⽣成⼀个简单的例⼦ xlnt读写excel 但是⽆法解决中⽂字符输⼊的问题解决xlnt读写中⽂写的问题需要将Unicode 转 utf-8#demoReadAndWriteExcel.cpp#include <xlnt/xlnt.hpp>#include <iostream>void create() {xlnt::workbook wb;xlnt::worksheet ws = wb.active_sheet();ws.cell("A1").value(5);ws.cell("B2").value("string data");ws.cell("C3").formula("=RAND()");ws.merge_cells("C3:C4");ws.freeze_panes("B2");wb.save("sample.xlsx");}void read() {xlnt::workbook wb;wb.load("sample.xlsx");xlnt::worksheet ws = wb.active_sheet();std::cout << ws.cell("A1") << std::endl;std::cout << ws.cell("B2") << std::endl;std::cout << ws.cell("C3") << std::endl;}int main(){create();read();return 0;}解决xlnt读写中⽂写的问题需要将Unicode 转 utf-8xlnt读写中⽂写的问题C++操作Excel,xlnt库的使⽤参考CMake下载win10下安装cmakecmake和win10结合Visual Studio下C++第三⽅库的配置⽅法总结C++操作excel(利⽤github上的项⽬:xlnt)C++操作Excel,xlnt库的使⽤cmake简明教程-半⼩时从⼊门到精通c++ example xlnt。

excel函数c语言

excel函数c语言

excel函数c语言随着数据处理和办公自动化需求的不断增长,Excel和C语言这两种工具在各个领域的应用也愈发广泛。

Excel是一款功能强大的电子表格软件,适用于数据整理、计算和分析。

而C语言是一种具有高性能的编程语言,广泛应用于系统开发和算法实现。

那么,如何将这两者结合起来,实现数据处理的自动化呢?本文将为您详细介绍。

一、引言Excel和C语言各自具有独特的优势。

Excel中的丰富函数库可以方便地完成各种数据处理任务,例如求和、平均值、最大值等。

而C语言具有较高的执行效率,可以进行复杂的数据分析和算法实现。

将这两者结合起来,可以实现数据处理的自动化,提高工作效率。

二、Excel中的常用函数及其用途Excel提供了大量的内置函数,可以帮助我们完成各种数据处理任务。

以下是一些常用的函数:1.SUM:求和函数,用于计算一个单元格区域内的数值和。

2.AVERAGE:平均值函数,用于计算一个单元格区域内的平均值。

3.MAX:最大值函数,用于计算一个单元格区域内的最大值。

4.MIN:最小值函数,用于计算一个单元格区域内的最小值。

5.STDEV:标准偏差函数,用于计算一个单元格区域内的数据离散程度。

三、C语言的基本语法和数据结构C语言作为一种编程语言,具有以下基本语法和数据结构:1.变量声明:使用关键字`int`、`float`、`double`等声明变量。

2.运算符:加减乘除、关系运算符、逻辑运算符等。

3.控制结构:顺序结构、分支结构(if-else)、循环结构(for、while)等。

4.函数:自定义函数,包括输入输出、数据处理等功能。

四、如何将Excel数据导入C语言程序要将Excel数据导入C语言程序,可以使用第三方库,如Apache POI。

该库支持读取和写入Excel文件,可以方便地将Excel数据转换为C语言程序可以处理的数据结构。

五、如何使用C语言操作Excel文件使用C语言操作Excel文件的方法与操作其他文件类似。

C#excelpackage读写Excel文件

C#excelpackage读写Excel文件

C#excelpackage读写Excel⽂件为什么使⽤Excelpackage?ExcelPackage的优势:解放了在程序中设置格式的弊端,总体原理为:在相应路径下放置⼀个Excel模板,执⾏导出操作时按照模板样式在指定⾏插⼊数据,构建出⼀个模板样式的新Excel。

在程序中使⽤期功能时,using OfficeOpenXml; 指令⼀定要加上;在⽹上的代码案列都是很多要么断章取义,要么就是代码⼀⼤堆,不舒服。

写数据往Excel中:以下⼏步:1.新建⼀个xlsx⽂件2.使⽤using(ExcelPackage .....){}代码块3.在上述代码块中,得到⼀个workshoot;4.利⽤workshoot.Cells[,].value=""可以在特定格⼦⾥写⼊⾃⼰的内容;5.写完记得保存,package.save();这样就完了。

(更多的Excel样式问题和⾼级的外观功能以后再讲)staticvoid Main(string[] args){Write();}static void Write(){FileInfo newFile = new FileInfo(@"d:\test.xlsx");if (newFile.Exists){newFile.Delete();newFile = newFileInfo(@"d:\test.xlsx");}using (ExcelPackage package = new ExcelPackage(newFile)){ExcelWorksheet worksheet =package.Workbook.Worksheets.Add("test");worksheet.Cells[1, 1].Value ="名称";worksheet.Cells[1, 2].Value ="价格";worksheet.Cells[1, 3].Value ="销量";worksheet.Cells[2, 1].Value ="⼤⽶";worksheet.Cells[2, 2].Value =56;worksheet.Cells[2, 3].Value =100;worksheet.Cells[3, 1].Value ="⽟⽶";worksheet.Cells[3, 2].Value =45;worksheet.Cells[3, 3].Value =150;worksheet.Cells[4, 1].Value ="⼩⽶";worksheet.Cells[4, 2].Value =38;worksheet.Cells[4, 3].Value =130;worksheet.Cells[5, 1].Value ="糯⽶";worksheet.Cells[5, 2].Value =22;worksheet.Cells[5, 3].Value =200;package.Save();}}读数据:和写数据类似,区别就是把原来的赋值语句修改成为取值语句就好了。

C#操作Excel实用技巧三则

C#操作Excel实用技巧三则

C#操作Excel实用技巧三则一、使用C#操作Excel表格数据操作Excel表格数据是C#中常见的需求,我们通常会涉及到读取、修改、保存Excel 表格数据的操作。

以下是一个简单的例子,演示如何使用C#来操作Excel表格数据。

```csharpusing Excel = Microsoft.Office.Interop.Excel;// 打开Excel工作簿Excel.Workbook workbook =excelApp.Workbooks.Open(@"D:\example.xlsx");// 读取A1单元格的数据string cellData = (sheet.Cells[1, 1] as Excel.Range).Value;// 保存并关闭工作簿workbook.Save();excelApp.Quit();Console.WriteLine("Excel操作完成!");Console.ReadKey();}}}```另外一个常见的需求是将数据导出到Excel中,这在实际的开发中也是非常常见的场景。

以下是一个示例,演示如何使用C#将数据导出到Excel中。

// 创建Excel应用程序Excel.Application excelApp = new Excel.Application();Excel.Workbook workbook = excelApp.Workbooks.Add();Excel.Worksheet sheet = workbook.Sheets[1];// 写入数据到Excelfor (int i = 0; i < dt.Rows.Count; i++){for (int j = 0; j < dt.Columns.Count; j++){sheet.Cells[i + 1, j + 1] = dt.Rows[i][j];}}通过上述代码,我们可以看到如何使用C#将数据导出到Excel中。

VC++操作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平台上,告警也很多。

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

在Visual C++ 中调用Excel 2000程蓬#ifdef USE_OFFICEXP#import "C:\Program Files\Common Files\Microsoft Shared\Office10\MSO.DLL"#import "c:\\Program Files\\Common Files\Microsoft Shared\VBA\VBA6\VBE6EXT.olb" #import "c:\Program Files\Microsoft Office\Office10\MSWORD.olb"rename("ExitWindows","ExitWindowsEx")#import "c:\Program Files\Microsoft Office\Office10\excel.exe" rename("DialogBox", "DialogBoxXL") rename("RGB", "RBGXL") \rename("DocumentProperties", "DocumentPropertiesXL") exclude("IFont","IPicture")#else#import "c:\Program Files\Microsoft Office\Office\MSO9.dll"#import "C:\Program Files\Common Files\Microsoft Shared\VBA\VBA6\VBE6EXT.OLB" no_namespace#import "c:\Program Files\Microsoft Office\Office\MSWORD9.OLB"rename("ExitWindows","_ExitWindows")#import "c:\Program Files\Microsoft Office\Office\excel9.olb" rename("DialogBox", "DialogBoxXL") rename("RGB", "RBGXL") \rename("DocumentProperties", "DocumentPropertiesXL") exclude("IFont","IPicture")#endif在开发软件时,经常要将数据输出到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(ColeVariant(“Sheet1”))取得第一个工作表。

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

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_t(DISP_E_PARAMNOTFOUND, VT_ERROR)产生一个Variant对象。

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

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

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

模板文件名称:MyTemplate.xlt。

程序在Visual C++ 6.0 sp4,Windows 2000 Professional sp-1下调试通过。

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

工程名称ExcelTest。

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

在BOOL CExcelTestApp::InitInstance()中,dlg.DoModal();之前增加代码:if (CoInitialize(NULL)!=0){AfxMessageBox("初始化COM支持库失败!");exit(1);}在return FALSE; 语句前,加入:CoUninitialize();选择Menu->View->ClassWizade,打开ClassWizade窗口,选择Add Class->From a type library,选择D:\Program Files\Microsoft Office\office\Excel9.OLB(D:\ProgramFiles\Microsoft 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.CreateDispatch("Excel.Application",NULL)){AfxMessageBox("创建Excel服务失败!");exit(1);}//利用模板文件建立新文档wbsMyBooks.AttachDispatch(ExcelApp.GetWorkbooks(),true);wbMyBook.AttachDispatch(wbsMyBooks.Add(_variant_t("g:\\exceltest\\MyTemplate.xlt")));//得到WorksheetswssMysheets.AttachDispatch(wbMyBook.GetWorksheets(),true);//得到sheet1wsMysheet.AttachDispatch(wssMysheets.GetItem(_variant_t("sheet1")),true);//得到全部Cells,此时,rgMyRge是cells的集合rgMyRge.AttachDispatch(wsMysheet.GetCells(),true);//设置1行1列的单元的值rgMyRge.SetItem(_variant_t((long)1),_variant_t((long)1),_variant_t("This Is A Excel Test Program!"));//得到所有的列rgMyRge.AttachDispatch(wsMysheet.GetColumns(),true);//得到第一列rgMyRge.AttachDispatch(rgMyRge.GetItem(_variant_t((long)1),vtMissing).pdispVal,true);//设置列宽rgMyRge.SetColumnWidth(_variant_t((long)200));//调用模板中预先存放的宏ExcelApp.Run(_variant_t("CopyRow"),_variant_t((long)10),vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing);//打印预览wbMyBook.SetSaved(true);ExcelApp.SetVisible(true);wbMyBook.PrintPreview(_variant_t(false));//释放对象rgMyRge.ReleaseDispatch();wsMysheet.ReleaseDispatch();wssMysheets.ReleaseDispatch();wbMyBook.ReleaseDispatch();wbsMyBooks.ReleaseDispatch();ExcelApp.ReleaseDispatch();}添加完以上程序后,可运行看结果。

相关文档
最新文档