MFC 读取EXCEL表格 VS2008

我们的上位机需要一个配置文件INI,但是数据项有点多看起来很乱,而EXCEL在保存一些配置数据的时候有独特的优势,所以就在EXCEL里边配置,利用上位机读EXCEL。

一、建立工程:


    a. project->add class->MFC class from typelib (项目->添加类->Typelib中的MFC类)导入Excel.exe,一般都在C:/Program Files/Microsoft Office/Office12路径下(即选择你的office安装路径下的excel.exe加入)

 

    b. 选中以下几项_Application,_WorkSheet,_WorkBook,WorkSheets,WorkBooks,Range,然后导入;

 

   c. 导入后自动在工程中添加CApplication,CWorkSheet,CWorkBook,CWorkSheets,CWorkBooks,CRange这些类;

 

然后需要把这些类的头文件中的第一句话 #import ".......EXCEL.EXE" nonamespace 删除;

 

引入之后如果编译遇到错误,Not enough actual parameters for macro 'DialogBoxW'. 让人头疼!

 

解决方法是在CRange类中,VARIANT DialogBox()前面添加下划线变成VARIANT _DialogBox(),解决了!


二、添加头文件

#include "CApplication.h"  
#include "CRange.h"  
#include "CWorkbook.h"  
#include "CWorkbooks.h"  
#include "CWorksheet.h"  
#include "CWorksheets.h"

三、添加操作代码

void CMonitorDlg::OnBnClickedButton1()
{
	// TODO: 在此添加控件通知处理程序代码

	CApplication app;  
    CWorkbooks books;  
    CWorkbook book;  
    CWorksheets sheets;  
    CWorksheet sheet;  
    CRange range;  
    CRange iCell;  
    LPDISPATCH lpDisp;  
    COleVariant vResult;  
    COleVariant covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);  
    if(!app.CreateDispatch("Excel.Application"))  
    {  
		AfxMessageBox("无法启动Excel服务器!");  
		return;  
    }
	app.put_Visible(TRUE);
	app.put_UserControl(FALSE);

    books.AttachDispatch(app.get_Workbooks());  
    lpDisp = books.Open("D:\\test.xls",covOptional, covOptional, covOptional, covOptional, covOptional,covOptional, covOptional, covOptional, covOptional, covOptional,covOptional, covOptional, covOptional,covOptional);  
      
    //得到Workbook  
    book.AttachDispatch(lpDisp);  
    //得到Worksheets  
    sheets.AttachDispatch(book.get_Worksheets());  
   
    //得到当前活跃sheet  
    //如果有单元格正处于编辑状态中,此操作不能返回,会一直等待  
    lpDisp=book.get_ActiveSheet();  
    sheet.AttachDispatch(lpDisp);  
    //读取第一个单元格的值  
    range.AttachDispatch(sheet.get_Cells());  
    range.AttachDispatch(range.get_Item (COleVariant((long)2),COleVariant((long)2)).pdispVal);  
    /*COleVariant*/ vResult =range.get_Value2();  
    CString str;  
    if(vResult.vt == VT_BSTR) //字符串  
    {  
		str=vResult.bstrVal;  
    }  
    else if (vResult.vt==VT_R8) //8字节的数字  
    {  
		str.Format("%f",vResult.dblVal);  
    }  
    MessageBox(str); 
    books.Close();   
    app.Quit();             // 退出     
    range.ReleaseDispatch();  
    sheet.ReleaseDispatch();  
    sheets.ReleaseDispatch();  
    book.ReleaseDispatch();  
    books.ReleaseDispatch();  
    app.ReleaseDispatch();  
    //OnOK(); 
}

有读取单元格的函数基本也就差不多了,有想法就去做

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 使用VS2019 MFC可以通过以下步骤读取Excel文件: 1. 首先,需要在项目中添加Microsoft Excel Object Library的引用。在Visual Studio中,选择“项目”菜单,然后选择“添加引用”。在“COM”选项卡中,找到“Microsoft Excel Object Library”并选中它,然后点击“确定”按钮。 2. 在代码中添加头文件“<afxdisp.h>”。 3. 创建一个Excel应用程序对象,如下所示: ```cpp _Application excelApp; ``` 4. 打开Excel文件,如下所示: ```cpp if (!excelApp.CreateDispatch(_T("Excel.Application"))) { AfxMessageBox(_T("无法创建Excel应用程序对象")); return; } _Workbook workbook; if (!workbook.Open(_T("文件路径"))) { AfxMessageBox(_T("无法打开Excel文件")); return; } ``` 5. 获取工作表对象,如下所示: ```cpp _Worksheet worksheet; worksheet.AttachDispatch(workbook.Worksheets(L"Sheet1")); ``` 6. 读取单元格的值,如下所示: ```cpp _variant_t var; Range range = worksheet.GetRange(_T("A1")); var = range.GetValue(); CString strValue = var.bstrVal; ``` 7. 关闭Excel文件和应用程序对象,如下所示: ```cpp workbook.Close(); excelApp.Quit(); ``` 以上就是使用VS2019 MFC读取Excel文件的基本步骤。 ### 回答2: VS2019提供了一种简便的方法来读取Excel文件,需要使用MFC(Microsoft Foundation Class)。首先,打开VS2019并创建一个MFC应用程序。创建的应用程序将包含一个默认的对话框。现在,需要添加以下文件: 1. stdafx.h 2. stdafx.cpp 3. CExcelReader.h 4. CExcelReader.cpp 其中,CExcelReader.h和CExcelReader.cpp文件是核心文件,用于读取Excel文件。 现在需要将以下头文件和库添加到MFC应用程序中: 1. #include <afxdb.h> 2. #include <afxwin.h> 3. #include <afxdao.h> 4. #pragma comment(lib,"odbc32.lib") 5. #pragma comment(lib,"odbccp32.lib") 这些文件和库将帮助应用程序读取Excel文件。现在,编写CExcelReader.h和CExcelReader.cpp文件,以下是示例代码: CExcelReader.h文件: #pragma once class CExcelReader { public: CExcelReader(); virtual ~CExcelReader(); bool open(CString fileName); void close(); bool isOpen(); bool read(int column, CString& value); bool nextRow(); protected: bool m_opened; CString m_fileName; CDatabase m_database; CRecordset m_recordset; }; CExcelReader.cpp文件: CExcelReader::CExcelReader() { m_opened = false; } CExcelReader::~CExcelReader() { close(); } bool CExcelReader::open(CString fileName) { close(); m_fileName = fileName; CString connectionString; connectionString.Format(_T("ODBC;DSN=Excel Files;DBQ=%s;DriverId=790;MaxBufferSize=2048;PageTimeout=5;"), m_fileName); try { m_database.Open(NULL, FALSE, FALSE, connectionString); m_recordset.Open(AFX_DB_DEFAULT_TYPE, connectionString); m_opened = true; return true; } catch(exception ex) { return false; } } void CExcelReader::close() { if(m_opened) { m_opened = false; m_recordset.Close(); m_database.Close(); } } bool CExcelReader::isOpen() { return m_opened; } bool CExcelReader::read(int column, CString& value) { try { m_recordset.GetFieldValue(column, value); return true; } catch(exception ex) { return false; } } bool CExcelReader::nextRow() { try { return !m_recordset.IsEOF() && !m_recordset.IsBOF() && m_recordset.MoveNext(); } catch(exception ex) { return false; } } 现在使用这些文件和库来读取Excel文件。在对话框中创建一个按钮,单击此按钮时将会触发打开Excel文件的事件。以下是示例代码: void CMyDlg::OnOpenExcelFile() { CString fileName; CExcelReader excelReader; CFileDialog openFileDialog(TRUE, _T("*.xls"), _T(""), OFN_FILEMUSTEXIST | OFN_HIDEREADONLY, _T("Excel Files (*.xls)|*.xls||"), this); if (openFileDialog.DoModal() == IDOK) { fileName = openFileDialog.GetPathName(); if(excelReader.open(fileName)) { CString value; while(excelReader.nextRow()) { excelReader.read(1, value); // do something with the value } excelReader.close(); } } } 现在,按钮单击事件将读取Excel文件中每一行的第一个值,然后可以使用所读取的值执行任何操作。大功告成! ### 回答3: Visual Studio 2019 中,使用 MFC 库来读取 Excel 文件可以分为两步进行,分别是建立 COM 对象和读取数据。 第一步:建立 COM 对象 在 MFC 应用程序中,需要将 Microsoft Excel 应用程序作为 COM 对象进行引用。具体步骤如下: 1. 在工具栏中选择“项目”-“添加新项”-“MFC 类”; 2. 在“向导”选项中,选择“ActiveX 控件”; 3. 在“ActiveX 控件模板”中勾选“Automation”; 4. 在“其他选项”中指定名称和位置; 5. 完成向导并进行生成。 生成后,在您的 Visual Studio 的项目中,您可以看到一个名为“您指定的名称.cpp”的新文件。 打开此文件以查看 COM 组件的声明和实现。 第二步:读取数据 在您成功建立了 COM 对象之后,您就可以使用 COM 对象的方法来读取 Excel 文件数据。具体步骤如下: 1. 使用 GetWorkbooks() 方法打开指定 Excel 文件; 2. 使用 GetWorksheets() 方法打开指定的工作表; 3. 使用 GetRange() 方法从工作表中获取数据范围; 4. 使用 GetValue() 方法读取单元格的值或者使用 GetVariantArray() 方法获取连续区域的内容; 5. 关闭 Excel 应用程序并释放资源。 通过以上的步骤,您可以成功的读取 Excel 文件的数据内容。但需要注意的是,在使用 COM 对象时,需要确保 Excel 应用程序正在运行,并且您需要具有访问 Excel 文件的权限。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值