// TestLibxlMFCAppDlg.cpp: 实现文件
//
#include "pch.h"
#include "framework.h"
#include "TestLibxlMFCApp.h"
#include "TestLibxlMFCAppDlg.h"
#include "afxdialogex.h"
#include "CReadExcelFile.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// 用于应用程序“关于”菜单项的 CAboutDlg 对话框
class CAboutDlg : public CDialogEx
{
public:
CAboutDlg();
// 对话框数据
#ifdef AFX_DESIGN_TIME
enum { IDD = IDD_ABOUTBOX };
#endif
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
// 实现
protected:
DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialogEx(IDD_ABOUTBOX)
{
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx)
END_MESSAGE_MAP()
// CTestLibxlMFCAppDlg 对话框
CTestLibxlMFCAppDlg::CTestLibxlMFCAppDlg(CWnd* pParent /*=nullptr*/)
: CDialogEx(IDD_TESTLIBXLMFCAPP_DIALOG, pParent)
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
m_nRowCount = 0;
m_nColumCount = 0;
}
void CTestLibxlMFCAppDlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
DDX_Control(pDX, IDC_LIST_EXCEL, m_listExcel);
}
BEGIN_MESSAGE_MAP(CTestLibxlMFCAppDlg, CDialogEx)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_BTN_FILE, &CTestLibxlMFCAppDlg::OnBnClickedBtnFile)
ON_WM_CLOSE()
END_MESSAGE_MAP()
// CTestLibxlMFCAppDlg 消息处理程序
BOOL CTestLibxlMFCAppDlg::OnInitDialog()
{
CDialogEx::OnInitDialog();
// 将“关于...”菜单项添加到系统菜单中。
// IDM_ABOUTBOX 必须在系统命令范围内。
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != nullptr)
{
BOOL bNameValid;
CString strAboutMenu;
bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
ASSERT(bNameValid);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// 设置此对话框的图标。 当应用程序主窗口不是对话框时,框架将自动
// 执行此操作
SetIcon(m_hIcon, TRUE); // 设置大图标
SetIcon(m_hIcon, FALSE); // 设置小图标
// TODO: 在此添加额外的初始化代码
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}
void CTestLibxlMFCAppDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialogEx::OnSysCommand(nID, lParam);
}
}
// 如果向对话框添加最小化按钮,则需要下面的代码
// 来绘制该图标。 对于使用文档/视图模型的 MFC 应用程序,
// 这将由框架自动完成。
void CTestLibxlMFCAppDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // 用于绘制的设备上下文
SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
// 使图标在工作区矩形中居中
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// 绘制图标
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialogEx::OnPaint();
}
}
//当用户拖动最小化窗口时系统调用此函数取得光标
//显示。
HCURSOR CTestLibxlMFCAppDlg::OnQueryDragIcon()
{
return static_cast<HCURSOR>(m_hIcon);
}
void CTestLibxlMFCAppDlg::OnBnClickedBtnFile()
{
// TODO: 在此添加控件通知处理程序代码
CString strFilePath;
CString strFilter = _T("(*.xlsx)|*.xlsx|(*.xls)|*.xls||");
CFileDialog openFileDlg(TRUE, NULL, NULL, OFN_FILEMUSTEXIST | OFN_HIDEREADONLY, strFilter);
if (openFileDlg.DoModal() != IDOK)
{
return;
}
strFilePath = openFileDlg.GetPathName();
GetDlgItem(IDC_EDIT_FILE)->SetWindowText(strFilePath);
OnInitExcelList(strFilePath);
}
void CTestLibxlMFCAppDlg::OnClose()
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CDialogEx::OnClose();
}
void CTestLibxlMFCAppDlg::OnInitExcelList(CString strFilePath)
{
m_listExcel.DeleteAllItems();
CReadExcelFile reader(strFilePath);
m_nRowCount = reader.GetExcelRowsCount(0);
m_nColumCount = reader.GetExcelColumsCount(0);
CRect rect;
m_listExcel.GetClientRect(&rect);
int nWidth = rect.Width();
m_listExcel.SetExtendedStyle(LVS_EX_GRIDLINES | LVS_EX_HEADERDRAGDROP | LVS_EX_SUBITEMIMAGES | LVS_EX_FULLROWSELECT);
CStringArray arrHeaders;
reader.ReadSheetHeaders(0, arrHeaders);
for (int i = 0; i < arrHeaders.GetCount(); i++)
{
m_listExcel.InsertColumn(i, arrHeaders.GetAt(i), LVCFMT_CENTER, (int)(nWidth * (1.0/ m_nColumCount)));
}
for (int i = 0; i < m_nRowCount-1; ++i)
{
for (int j = 0; j < m_nColumCount; ++j)
{
CString sTmp = reader.GetCellStrValue(0,i+1,j);
if (j == 0)
{
m_listExcel.InsertItem(i, sTmp);
}
else
{
m_listExcel.SetItemText(i, j, sTmp);
}
}
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
Libxl_4.1.1库文件及读写数据示例VS项目,包含授权key,无读取300行数限制;可以参照示例VS项目配置环境使用。 LibXL是一个可以读写Excel文件的商业库。它不需要Microsoft Excel和.NET框架,结合了易于使用和强大的功能。LibXL库可用于从头开始生成新的电子表格以及从现有电子表格中提取数据或修改现有电子表格。
资源推荐
资源详情
资源评论
收起资源包目录
TestLibxlMFCApp.zip (39个子文件)
TestLibxlMFCApp
TestLibxlMFCApp.aps 107KB
Libxl_4.1.1
lib
x64
libxl.lib 187KB
x86
libxl.lib 191KB
bin
x64
libxl.dll 8.51MB
x86
libxl.dll 7.58MB
include_cpp
IBookT.h 7KB
IRichStringT.h 2KB
IConditionalFormatT.h 4KB
IFilterColumnT.h 2KB
libxl.h 3KB
IConditionalFormattingT.h 3KB
IFontT.h 2KB
setup.h 2KB
IFormControlT.h 4KB
IFormatT.h 5KB
IAutoFilterT.h 2KB
enum.h 12KB
ISheetT.h 18KB
CReadExcelFile.cpp 3KB
TestLibxlMFCAppDlg.cpp 5KB
TestLibxlMFCApp.h 532B
resource.h 832B
TestLibxlMFCAppDlg.h 908B
framework.h 2KB
TestLibxlMFCApp.sln 1KB
res
TestLibxlMFCApp.rc2 686B
TestLibxlMFCApp.ico 66KB
pch.h 544B
x64
Release
TestLibxlMFCApp.exe 127KB
libxl.dll 8.51MB
test.xlsx 27KB
TestLibxlMFCApp.vcxproj.user 241B
TestLibxlMFCApp.rc 11KB
CReadExcelFile.h 884B
TestLibxlMFCApp.vcxproj.filters 2KB
pch.cpp 158B
TestLibxlMFCApp.vcxproj 11KB
TestLibxlMFCApp.cpp 3KB
targetver.h 295B
共 39 条
- 1
欧特克_Glodon
- 粉丝: 4w+
- 资源: 64
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
前往页