VC6.0实现读取Excel数据的方法_C 语言

Excel是常用的办公软件之一,本文以Excel2003为例说明VC程序读取Excel文件的方法。具体步骤如下:
 
1.首先要将excel类添加到工程中。

在ClassWizard中,【Add Class】,在Excel的安装目录找到Excel.exe(Microsoft2003是Excel.exe;2007应该又独立的lib库,这个没有验证),添加必要的几个类:

// Excel应用对象
_Application  m_oExcelApp;   // Excel程序
_Worksheet  m_oWorkSheet;   // 工作表
_Workbook  m_oWorkBook;   // 工作簿
Workbooks  m_oWorkBooks;  // 工作簿集合
Worksheets  m_oWorkSheets;  // 工作表集合
Range  m_oCurrRange;   // 使用区域

添加到工程中的文件是excel.h和excel.cpp。

2.初始化Com库

if (CoInitialize(NULL)!=0)
{
    AfxMessageBox("初始化COM支持库失败!");
    exit(1);
}

3.读取文件中的数据

if (!m_oExcelApp.CreateDispatch( _T( "Excel.Application" ), NULL ) )
{
   ::MessageBox( NULL, _T( "创建Excel服务失败!" ), _T( "错误提示!" ), MB_OK | MB_ICONERROR);
   exit(1);
}

//设置为显示
m_oExcelApp.SetVisible(FALSE);
m_oWorkBooks.AttachDispatch( m_oExcelApp.GetWorkbooks(), TRUE ); //没有这条语句,下面打开文件返回失败。

LPDISPATCH lpDisp = NULL;
COleVariant covTrue((short)TRUE);
COleVariant covFalse((short)FALSE);
COleVariant covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
Range  oCurCell;

// 打开文件
lpDisp = m_oWorkBooks.Open( strFilePath,
    _variant_t(vtMissing),
    _variant_t(vtMissing),
    _variant_t(vtMissing),
    _variant_t(vtMissing),
    _variant_t(vtMissing),
    _variant_t(vtMissing),
    _variant_t(vtMissing),
    _variant_t(vtMissing),
    _variant_t(vtMissing),
    _variant_t(vtMissing),
    _variant_t(vtMissing),
    _variant_t(vtMissing),
    _variant_t(vtMissing),
    _variant_t(vtMissing) );
// 获得活动的WorkBook( 工作簿 )
m_oWorkBook.AttachDispatch( lpDisp, TRUE );
// 获得活动的WorkSheet( 工作表 )
m_oWorkSheet.AttachDispatch( m_oWorkBook.GetActiveSheet(), TRUE );
// 获得使用的区域Range( 区域 )
m_oCurrRange.AttachDispatch( m_oWorkSheet.GetUsedRange(), TRUE );

// 获得使用的行数
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();
// 读取Sheet的名称
CString strSheetName = m_oWorkSheet.GetName();

//得到全部Cells,此时,CurrRange是cells的集合
m_oCurrRange.AttachDispatch( m_oWorkSheet.GetCells(), TRUE );

// 遍历整个Excel表格
CStringArray* arrayStr;
arrayStr = new CStringArray[lgUsedRowNum];
for ( int i = 0; i < lgUsedRowNum; )
{
   for ( int j = 1; j <= lgUsedColumnNum; )
   {
   oCurCell.AttachDispatch( m_oCurrRange.GetItem( COleVariant( (long)(i + 1)), COleVariant( (long)j ) ).pdispVal, TRUE );
   VARIANT varItemName = oCurCell.GetText();
   CString strItemName;
   strItemName = varItemName.bstrVal;
//         AfxMessageBox( strItemName );
   // 判断是否是合并的单元格
   VARIANT varMerge = oCurCell.GetMergeCells();
   if ( varMerge.boolVal == -1 )
   {
//             AfxMessageBox( _T( "是合并的单元格!" ) );
   }
   else if ( varMerge.boolVal == 0 )
   {
//             AfxMessageBox( _T( "不是合并的单元格!" ) );
   }

   arrayStr[i].Add( strItemName );
   j++;
   }
   i++;
}

// 更新列表控件数据
m_pExcelOperDlg->initListCtrlColumn( lgUsedColumnNum );
m_pExcelOperDlg->updateListCtrlData( arrayStr, lgUsedRowNum );

// 释放二维数组
delete[] arrayStr;

// 关闭
m_oWorkBook.Close( covOptional, COleVariant( strFilePath ), covOptional );
m_oWorkBooks.Close();
// 释放
m_oCurrRange.ReleaseDispatch();
m_oWorkSheet.ReleaseDispatch();
m_oWorkSheets.ReleaseDispatch();
m_oWorkBook.ReleaseDispatch();
m_oWorkBooks.ReleaseDispatch();
m_oExcelApp.ReleaseDispatch();
m_oExcelApp.Quit();  // 这条语句是推出Excel程序,任务管理器中的EXCEL进程会自动结束。

补充:本文所述程序实例完整源码点此下载

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索excel
, vc
读取
vc6 实现多语言版、c语言vc6.0软件下载、c语言编程软件vc6.0、怎么用vc6.0编写c语言、vc6.0编写c语言教程,以便于您获取更多的相关知识。

时间: 2024-10-30 06:54:10

VC6.0实现读取Excel数据的方法_C 语言的相关文章

C++实现string存取二进制数据的方法_C 语言

本文实例讲述了C++实现string存取二进制数据的方法,分享给大家供大家参考.具体方法分析如下: 一般来说,STL的string很强大,用起来也感觉很舒服,这段时间在代码中涉及到了用string存取二进制数据的问题,这里记录一下,以供以后参考. 首先提一下STL中string的参考资料:http://www.cplusplus.com/reference/string/string/ ,不懂的朋友可以看下. 在数据传输中,二进制数据的buffer一般用系统预设的大数组进行存储,而不是STL的s

C程序读取键盘码的方法_C 语言

本文以一个简单实例讲述了C程序读取键盘码的方法,分享给大家供大家参考.具体分析如下: 一般来说,键盘码在底层开发中经常会用到,有时候我们会忘记它们,就要急急忙忙的去找 键-码 对照表查看,其实程序可以自己打印出 键-码 对应值 具体实例如下: #include <stdio.h> #include <bios.h> int main(void) { int key, modifiers; while ((key=bioskey(0)) != 0 && key!=0x

快速掌握VC6.0中各种宏注释应用(附图)_C 语言

为了方便别人或自己阅读自己的程序,注释是坚决不可少的.一个漂亮的程序,不是在于你应用的技术多么高深,而是能够把高深的技术描述的清楚易懂. 在Java的IDE环境--Eclispe中,有很多中注释的,并且设置注释也是很方便的,因为现在从事C++,嘻嘻,Eclispe已经卸载,至于设置注释的地方,直接百度或谷歌即可. 所以嘛,习惯了Eclispe的注释,所以想法设法,在VC6.0中尝试.当对于一个陌生的东西而言,如何熟悉他呢,就是拿你现在已有的知识,去联想.比如Java中截取字符串,或解析xml等,

VC打印word,excel文本文件的方法_C 语言

本文实例讲述了VC里打印word,excel文本文件的方法.分享给大家供大家参考.具体实现方法如下: 1. Vc打印Excel: 关于VC如何打开一个excel,这方面的资料很多了,一般用的是OLE Avtive Control/假设当你打开了一个excel文件,并获得了它的 workbook的handle,相应的接口为: 复制代码 代码如下: COleVariant covTrue((short)true); COleVariant covFalse((short)FALSE); COleVa

使用C++程序获取新浪行情数据的方法_C 语言

在日常开发中我们经常会使用到行情数据,很多的时候我们根据一个基准数据区构造行情,但是随着时间的推移然来构造的数据与真实行情数据之间的差距越来越大. 本问以AG1309为例子来说明,如何使用C++程序来获取新浪行情数据.(说明如果合约过期获取的数据将未空,此时请更换合约信息). 好了,在这里就不再将废话,直接给出源码供大家学习! // HttpDataTest.cpp : 定义控制台应用程序的入口点. #include "stdafx.h" #include #include #incl

phpexcel导入excel数据使用方法实例

 phpexcel导入excel数据使用方法,大家参考使用吧 将Excel文件数据进行读取,并且返回错误的信息   代码如下: /**      * 导入商品基本信息      */     public function importProductBasicInfo($data){         include_once 'PHPExcel.php';         include_once 'PHPExcel/IOFactory.php';         include_once 'P

silverlight excel-silverlight读取excel数据并展示

问题描述 silverlight读取excel数据并展示 最近再做一个项目,首次用到silverlight,边学边做.现在遇到个问题,需要用silverlight 5.0读取excel内的数据并展示.网上的方法看了没一个能用的,求高手指点,给出读取数据excel数据的详细代码,希望自己运行过可行的,转载网上的就算了.谢谢! 网上常见的方法:第一个是 xlsx文件是由一个压缩文件和一个载有关于什么是内部的拉链系列信息的XML文件 没搞明白什么意思,我理解的是从一个压缩包中读取xml文件.试了不行

Android应用读取Excel文件的方法_Android

本文实例讲述了Android应用读取Excel文件的方法.分享给大家供大家参考,具体如下: ReadExcel.java文件: public class ReadExcel extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState)

ADO.NET 读取EXCEL 文档方法

// 连接字符串                     string xlsPath = Server.MapPath("~/app_data/somefile.xls"); // 绝对物理路径          string connStr = "Provider=Microsoft.Jet.OLEDB.4.0;" +                          "Extended Properties=Excel 8.0;" +