一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - C/C++ - VC6.0實現讀取Excel數據的方法

VC6.0實現讀取Excel數據的方法

2021-01-24 12:03C語言程序設計 C/C++

這篇文章主要介紹了VC6.0實現讀取Excel數據的方法,非常實用的功能,需要的朋友可以參考下

Excel是常用的辦公軟件之一,本文以Excel2003為例說明VC程序讀取Excel文件的方法。具體步驟如下:
 
1.首先要將excel類添加到工程中。

在ClassWizard中,【Add Class】,在Excel的安裝目錄找到Excel.exe(Microsoft2003是Excel.exe;2007應該又獨立的lib庫,這個沒有驗證),添加必要的幾個類:

?
1
2
3
4
5
6
7
// 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庫

?
1
2
3
4
5
if (CoInitialize(NULL)!=0)
{
    AfxMessageBox("初始化COM支持庫失敗!");
    exit(1);
}

3.讀取文件中的數據

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
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進程會自動結束。

補充:本文所述程序實例完整源碼點此下載

延伸 · 閱讀

精彩推薦
  • C/C++c++ 單線程實現同時監聽多個端口

    c++ 單線程實現同時監聽多個端口

    這篇文章主要介紹了c++ 單線程實現同時監聽多個端口的方法,幫助大家更好的理解和學習使用c++,感興趣的朋友可以了解下...

    源之緣11542021-10-27
  • C/C++詳解c語言中的 strcpy和strncpy字符串函數使用

    詳解c語言中的 strcpy和strncpy字符串函數使用

    strcpy 和strcnpy函數是字符串復制函數。接下來通過本文給大家介紹c語言中的strcpy和strncpy字符串函數使用,感興趣的朋友跟隨小編要求看看吧...

    spring-go5642021-07-02
  • C/C++C語言中炫酷的文件操作實例詳解

    C語言中炫酷的文件操作實例詳解

    內存中的數據都是暫時的,當程序結束時,它們都將丟失,為了永久性的保存大量的數據,C語言提供了對文件的操作,這篇文章主要給大家介紹了關于C語言中文件...

    針眼_6702022-01-24
  • C/C++C/C++經典實例之模擬計算器示例代碼

    C/C++經典實例之模擬計算器示例代碼

    最近在看到的一個需求,本以為比較簡單,但花了不少時間,所以下面這篇文章主要給大家介紹了關于C/C++經典實例之模擬計算器的相關資料,文中通過示...

    jia150610152021-06-07
  • C/C++深入理解goto語句的替代實現方式分析

    深入理解goto語句的替代實現方式分析

    本篇文章是對goto語句的替代實現方式進行了詳細的分析介紹,需要的朋友參考下...

    C語言教程網7342020-12-03
  • C/C++學習C++編程的必備軟件

    學習C++編程的必備軟件

    本文給大家分享的是作者在學習使用C++進行編程的時候所用到的一些常用的軟件,這里推薦給大家...

    謝恩銘10102021-05-08
  • C/C++C語言實現電腦關機程序

    C語言實現電腦關機程序

    這篇文章主要為大家詳細介紹了C語言實現電腦關機程序,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    xiaocaidayong8482021-08-20
  • C/C++C++之重載 重定義與重寫用法詳解

    C++之重載 重定義與重寫用法詳解

    這篇文章主要介紹了C++之重載 重定義與重寫用法詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下...

    青山的青6062022-01-04
主站蜘蛛池模板: 精品麻豆国产 | 免费91麻豆精品国产自产在线观看 | 四色6677最新永久网站 | 亚洲卡一卡2卡三卡4卡无卡三 | 成人3p视频免费 | 91制片厂(果冻传媒)原档破解 | 亚洲国产成人久久综合一区77 | av中文字幕网免费观看 | 国内精品露脸在线视频播放 | 天天综合天天色 | 午夜一区二区免费视频 | 亚洲一级特黄特黄的大片 | 九九影院午夜理论片无码 | 日韩一区视频在线 | 99热久久这里只精品国产www | 精品一区二区三区中文 | 青青在线国产视频 | 四虎影院入口 | jzzjlzz亚洲乱熟在线播放 | 日韩高清在线高清免费 | 黑人与欧洲女子性大战 | 国产成人一区二区三区在线视频 | 国产高清视频免费最新在线 | 国产成人精品一区二区仙踪林 | 垫底辣妹免费观看完整版 | 国产一区二区视频在线观看 | 俄罗斯12一15处交 | 成人网18免费网站 | 国产精品嫩草影院一二三区 | yy6080午夜国产免费福利 | 亚洲欧美日韩另类在线一 | 女同videos双性人 | 万域之王在线观看 | 国产视频一二三区 | 午夜伦午夜伦锂电影 | 亚洲精品在线网址 | 热99精品 | 亚洲精品电影天堂网 | 男人天堂网www | 好大好粗好爽 | 久久精品国产欧美日韩99热 |