VC++ 6.0 使用 COM 读取 Excel 文件数据 - 示例代码
#include <afxwin.h> #include <afxdisp.h>
void OpenExcelFile(CString filePath) { // 初始化COM库 CoInitialize(NULL);
// 创建Excel应用程序对象
_Application app;
if (!app.CreateDispatch("Excel.Application"))
{
AfxMessageBox("无法创建Excel应用程序对象");
return;
}
// 设置Excel应用程序是否可见
app.put_Visible(TRUE);
// 打开Excel文件
Workbooks workbooks;
_Workbook workbook;
workbooks = app.get_Workbooks();
if (!workbooks.Open(filePath, vtMissing, vtMissing, vtMissing, vtMissing, vtMissing, vtMissing, vtMissing, vtMissing, vtMissing, vtMissing, vtMissing, vtMissing, vtMissing, vtMissing))
{
AfxMessageBox("无法打开Excel文件");
app.Quit();
return;
}
// 获取第一个工作表
Sheets sheets;
_Worksheet worksheet;
sheets = workbook.get_Sheets();
worksheet = sheets.get_Item(COleVariant((short)1));
// 读取数据
Range range;
range = worksheet.get_UsedRange();
long rowCount = range.get_Rows()->get_Count();
long columnCount = range.get_Columns()->get_Count();
CString strData;
for (long row = 1; row <= rowCount; row++)
{
for (long column = 1; column <= columnCount; column++)
{
COleVariant cellValue;
cellValue = range.get_Item(COleVariant(row), COleVariant(column))->get_Value2();
if (cellValue.vt == VT_BSTR)
{
strData += CString(cellValue.bstrVal) + "\t";
}
else
{
strData += "\t";
}
}
strData += "\n";
}
// 显示数据
AfxMessageBox(strData);
// 关闭Excel文件
workbook.Close(FALSE);
workbooks.Close();
// 退出Excel应用程序
app.Quit();
// 释放COM库
CoUninitialize();
}
// 对话框类 class CMyDialog : public CDialog { public: CMyDialog() : CDialog(IDD_MYDIALOG) {}
protected: virtual void DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); }
afx_msg void OnButtonOpenExcel()
{
CFileDialog fileDialog(TRUE, _T("Excel Files (*.xls;*.xlsx)|*.xls;*.xlsx||"), NULL, OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST, _T("Excel Files (*.xls;*.xlsx)|*.xls;*.xlsx||"), this);
if (fileDialog.DoModal() == IDOK)
{
CString filePath = fileDialog.GetPathName();
OpenExcelFile(filePath);
}
}
DECLARE_MESSAGE_MAP()
};
BEGIN_MESSAGE_MAP(CMyDialog, CDialog) ON_BN_CLICKED(IDC_BUTTON_OPEN_EXCEL, OnButtonOpenExcel) END_MESSAGE_MAP()
// 应用程序类 class CMyApp : public CWinApp { public: virtual BOOL InitInstance() { CMyDialog dlg; m_pMainWnd = &dlg; dlg.DoModal(); return FALSE; } };
// 入口函数 CMyApp myApp;
// 添加 #import 指令
#import "C:\Program Files\Microsoft Office\Office\MSO9.DLL"
rename("DocumentProperties", "DocumentPropertiesXL")
rename("RGB", "RBGXL")
exclude("IFont", "IPicture") no_dual_interfaces
#import "C:\Program Files\Microsoft Office\Office\EXCEL.EXE"
rename("DialogBox", "DialogBoxXL")
rename("RGB", "RBGXL")
rename("CopyFile", "CopyFileXL")
rename("ReplaceText", "ReplaceTextXL")
rename("FindText", "FindTextXL")
exclude("IFont", "IPicture") no_dual_interfaces
// 请根据实际安装路径修改上述 #import 指令中的文件路径。
原文地址: https://www.cveoy.top/t/topic/pL2t 著作权归作者所有。请勿转载和采集!