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

2025-05-27 0 85

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进程会自动结束。

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

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 VC6.0实现读取Excel数据的方法 https://www.kuaiidc.com/76157.html

相关文章

发表评论
暂无评论