【亲测免费】 VC++(VS2010)读写Excel文件代码(附示例)

VC++(VS2010)读写Excel文件代码(附示例)

【下载地址】VCVS2010读写Excel文件代码附示例 VC++(VS2010)读写Excel文件代码(附示例) 【下载地址】VCVS2010读写Excel文件代码附示例 项目地址: https://gitcode.com/open-source-toolkit/43ecc

前言

在工作或学习中,我们可能需要实现基于VC++读写Excel文件的功能。本人最近也遇到了这个问题,经过一番波折,最终找到了解决办法。在此与大家分享,希望能对同样迷茫过的同学们有所帮助。

程序功能

  1. 打开一个Excel文件。
  2. 将Excel文件内容显示到CListCtrl上。
  3. 新建一个Excel文件。

以上功能均在对话框中实现。

平台

VC++2010

实现方法

常用的Excel打开方式有两种:

  1. 通过数据库打开。
  2. OLE方式打开。

由于方式1)操作繁琐,经常出现莫名的错误,这里选用方式2)。

准备步骤

  1. 新建一个Dialog窗体程序,添加List Control和两个按钮。
  2. 将ExcelLib文件夹拷贝到程序目录下。
  3. 将Export2Excel.h和Export2Excel.cpp两个文件添加到项目。
  4. 包含头文件:#include "ExcelLib/Export2Excel.h"

通过以上步骤,在程序中引入了可以读取Excel文件的CExport2Excel类。

打开Excel文件

通过按钮点击打开:

void CExcelTestDlg::OnBnClickedButtonOpenExcel()
{
    // 获取文件路径
    CFileDialog* lpszOpenFile;
    CString szGetName;
    lpszOpenFile = new CFileDialog(TRUE, _T("Excel File (*.xlsx;*.xls)|*.xls;*.xlsx"), NULL, OFN_FILEMUSTEXIST | OFN_HIDEREADONLY, NULL);
    if (lpszOpenFile->DoModal() == IDOK)
    {
        szGetName = lpszOpenFile->GetPathName();
        SetWindowText(szGetName);
        delete lpszOpenFile;
    }
    else
        return;

    // 打开文件
    // 文件中包含多个sheet时,默认打开第一个sheet
    CExport2Excel Excel_example;
    Excel_example.OpenExcel(szGetName);

    // 获取sheet个数
    int iSheetNum = Excel_example.GetSheetsNumber();

    // 获取已使用表格行列数
    int iRows = Excel_example.GetRowCount();
    int iCols = Excel_example.GetColCount();

    // 获取单元格的内容
    CString cs_temp = Excel_example.GetText(1, 1);
    // AfxMessageBox(cs_temp);

    // List control上显示
    // 获取工作表列名(第一行)
    CStringArray m_HeadName;
    m_HeadName.Add(_T("ID"));
    for (int i = 1; i <= iCols; i++)
    {
        CString m_content = Excel_example.GetText(1, i);
        m_HeadName.Add(m_content);
    }

    // 清空ClistCtrl
    m_list.DeleteAllItems();
    while (m_list.GetHeaderCtrl()->GetItemCount() > 0)
    {
        m_list.DeleteColumn(0);
    }

    // 初始化ClistCtrl,加入列名
    InitList(m_list, m_HeadName);

    // 填入内容
    // 第一行是标题,所以从第2行开始
    CString num;
    int pos;
    for (int row = 2; row <= iRows; row++)
    {
        pos = m_list.GetItemCount();
        num.Format(_T("%d"), pos + 1);
        m_list.InsertItem(pos, num);
        for (int colum = 1; colum <= iCols; colum++)
        {
            // 插入均从序号0开始
            m_list.SetItemText(pos, colum, Excel_example.GetText(row, colum));
        }
    }

    // 关闭Excel文件
    Excel_example.Close();
}

新建Excel文件

通过按钮点击新建:

void CExcelTestDlg::OnBnClickedButtonNewExcel()
{
    // 新建文件,自己选择目录,并输入文件名称
    CFileDialog* lpszOpenFile;
    CString szGetName;
    lpszOpenFile = new CFileDialog(FALSE, _T("Excel File (*.xlsx)|*.xlsx"), NULL, OFN_FILEMUSTEXIST | OFN_HIDEREADONLY, NULL);
    if (lpszOpenFile->DoModal() == IDOK)
    {
        szGetName = lpszOpenFile->GetPathName();
        SetWindowText(szGetName);
        delete lpszOpenFile;
    }
    else
        return;

    // 文件全名称
    CString csFileName = szGetName;

    // 需要添加的两个sheet的名称
    CString csSheetName = _T("newSheet");
    CString csSheetName2 = _T("newSheet2");

    // 新建一个excel文件,自己写入文字
    CExport2Excel Excel_example;

    // 新建excel文件
    Excel_example.CreateExcel(csFileName);

    // 添加sheet,新加的sheet在前,也就是序号为1
    Excel_example.CreateSheet(csSheetName);
    Excel_example.CreateSheet(csSheetName2);

    // 操作最开始添加的sheet:(newSheet)
    Excel_example.SetSheet(2);

    // 添加表头
    Excel_example.WriteHeader(1, _T("第一列"));
    Excel_example.WriteHeader(2, _T("第二列"));

    // 添加核心数据
    Excel_example.WriteData(1, 1, _T("数据1"));
    Excel_example.WriteData(1, 2, _T("数据2"));

    // 保存文件
    Excel_example.Save();

    // 关闭文件
    Excel_example.Close();
}

注意事项

  1. 一般单个Excel文件包含多个sheet,程序默认打开第一个。
  2. 指定操作sheet,使用Excel_example.SetSheet(2)函数。
  3. 打开文件时,最左侧的sheet序号为1,新建Excel时,最新添加的sheet序号为1。

后记

本程序主要基于网络优快云中的“Excel封装库V2.0”完成,在此表示感谢!同时,

  1. 在其基础上作了小改动,改正了几个小错误,添加了几个小接口。
  2. 添加了如何使用的例子,原程序是没有的。
  3. 详细的注释。

发现不足之处,还请大家多多指教!

【下载地址】VCVS2010读写Excel文件代码附示例 VC++(VS2010)读写Excel文件代码(附示例) 【下载地址】VCVS2010读写Excel文件代码附示例 项目地址: https://gitcode.com/open-source-toolkit/43ecc

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值