利用 libxl库来读取Excel表格数据

作者: admin 分类: C++,LibXL 发布时间: 2020-08-01 09:30

转自:https://blog.csdn.net/m0_37251750/article/details/87602041

头文件 //LibXL\3.4.2

#pragma once
#include "libxl.h"
using namespace libxl;
class CReadExcelFile
{
public:
CReadExcelFile();
CReadExcelFile(CString strFileName);
~CReadExcelFile();
public:
bool ReadAllSheetNames(CStringArray& arrSheetNm);
int GetExcelRowsCount(int index);
int GetExcelColumsCount(int index);
CString GetCellStrValue(CString strSheetName, int nRow, int nCol);
CString GetCellStrValue(int indexSheet, int nRow, int nCol);
double  GetCellDouValue(CString strSheetName, int nRow, int nCol);
double  GetCellDouValue(int indexSheet, int nRow, int nCol);
CellType GetCellType(CString strSheetName, int nRow, int nCol);
CellType GetCellType(int indexSheet,int nRow, int nCol);
int GetSheetIndexFromName(CString strSheetName);
bool SetActiveSheet(int index);
private:
Book* m_book;
};

#include "StdAfx.h"
#include "ReadExcelFile.h"
CReadExcelFile::CReadExcelFile()
{
}
CReadExcelFile::CReadExcelFile( CString strFileName )
{
//参考——HongYe book Tongxing
m_book = xlCreateBook();
m_book->setKey(_T(" ** ** Co.,Ltd"), _T("windows"));
if (NULL == m_book)
{
::MessageBox(acedGetAcadFrame()->GetSafeHwnd(), _T("打开EXCEL失败"), _T("提示"), MB_OK|MB_ICONINFORMATION);
return;
}
if (m_book)
{
m_book->load(strFileName);
}
}
bool CReadExcelFile::ReadAllSheetNames(CStringArray& arrSheetNm)
{
if (m_book)
{
for (int i = 0; i < m_book->sheetCount(); i++)
{
CString strName = m_book->getSheet(i)->name();
arrSheetNm.Add(strName);
}
}
return !arrSheetNm.IsEmpty();
}
CString CReadExcelFile::GetCellStrValue( CString strSheetName, int nRow, int nCol )
{
int index = GetSheetIndexFromName(strSheetName);
return GetCellStrValue(index, nRow, nCol);
}
CString CReadExcelFile::GetCellStrValue( int indexSheet, int nRow, int nCol )
{
CString strRet = _T("");
if(m_book)
{
if (indexSheet < m_book->sheetCount() && indexSheet >= 0)
{
strRet = m_book->getSheet(indexSheet)->readStr(nRow, nCol);
}
}
return strRet;
}
double CReadExcelFile::GetCellDouValue( CString strSheetName, int nRow, int nCol )
{
int index = GetSheetIndexFromName(strSheetName);
return GetCellDouValue(index, nRow, nCol);
}
double CReadExcelFile::GetCellDouValue( int indexSheet, int nRow, int nCol )
{
double dRet = 0;
if(m_book)
{
if (indexSheet < m_book->sheetCount() && indexSheet >= 0)
dRet = m_book->getSheet(indexSheet)->readNum(nRow, nCol);
}
return dRet;
}
CellType CReadExcelFile::GetCellType(CString strSheetName, int nRow, int nCol)
{
int index = GetSheetIndexFromName(strSheetName);
return GetCellType(index, nRow, nCol);
}
CellType CReadExcelFile::GetCellType(int indexSheet,int nRow, int nCol)
{
CellType CellType = libxl::CELLTYPE_STRING;
if(m_book)
{
if (indexSheet < m_book->sheetCount() && indexSheet >= 0)
CellType = m_book->getSheet(indexSheet)->cellType(nRow, nCol);
}
return CellType;
}
int CReadExcelFile::GetSheetIndexFromName( CString strSheetName )
{
int index = -1;
if (m_book)
{
for (int i = 0; i < m_book->sheetCount(); i++)
{
CString strName = m_book->getSheet(i)->name();
if (strSheetName.CompareNoCase(strName) == 0)
{
index = i;
break;
}
}
}
return index;
}
CReadExcelFile::~CReadExcelFile()
{
m_book->release(); 
}
int CReadExcelFile::GetExcelRowsCount(int index)
{
if (m_book)
{
return m_book->getSheet(index)->lastRow();
}
return 0;
}
int CReadExcelFile::GetExcelColumsCount(int index)
{
if (m_book)
{
return m_book->getSheet(index)->lastCol();
}
return 0;
}
bool CReadExcelFile::SetActiveSheet( int index )
{
m_book->setActiveSheet(index);
return true;
}
// 简单应用
bool CProjectDlg::CheckExcelFile(CReadExcelFile* pReadData, int indexSheet)
{
int nColumCount = pReadData->GetExcelColumsCount(indexSheet);
int nRowCount = pReadData->GetExcelRowsCount(indexSheet);
if (nColumCount != 9)
{
acutPrintf(_T("表格列数不正确!\n"));
return false;
}
}

XTPReportContrl控件常用样式设定:


m_xtpReportCtrl.ModifyStyle( 0, WS_CHILD|WS_TABSTOP|WS_VISIBLE|WM_VSCROLL|WM_HSCROLL|WS_BORDER|WS_CLIPSIBLINGS, 0 );
  m_xtpReportCtrl.AddColumn(new CXTPReportColumn(0, _T("序号"), 40, FALSE, XTP_REPORT_NOICON, FALSE));
  m_xtpReportCtrl.GetColumns()->GetAt(0)->SetEditable(FALSE);
  m_xtpReportCtrl.GetColumns()->GetAt(0)->SetAlignment(DT_CENTER);
  m_xtpReportCtrl.AddColumn(new CXTPReportColumn(1, _T("类型"), 70, TRUE, XTP_REPORT_NOICON));
  m_xtpReportCtrl.AddColumn(new CXTPReportColumn(2, _T("直径"), 120, TRUE, ICON_CHECK));
  m_xtpReportCtrl.AddColumn(new CXTPReportColumn(3, _T("个数"), 100, TRUE, ICON_CHECK));
  m_xtpReportCtrl.AddColumn(new CXTPReportColumn(4, _T("路径"), 120, TRUE, ICON_CHECK));
  CXTPWellTypeReportPaintManager* pPaintManager = new CXTPWellTypeReportPaintManager(this);
  m_xtpReportCtrl.SetPaintManager(pPaintManager);
  // 设置样式
  m_xtpReportCtrl.SetGridStyle(TRUE, xtpReportGridSolid);
  m_xtpReportCtrl.SetMultipleSelection(TRUE); 
  m_xtpReportCtrl.AllowEdit(TRUE);
  m_xtpReportCtrl.EditOnClick(TRUE);
  m_xtpReportCtrl.GetReportHeader()->AllowColumnSort(FALSE);
  m_xtpReportCtrl.GetReportHeader()->AllowColumnReorder(FALSE);
  m_xtpReportCtrl.GetReportHeader()->AllowColumnResize(TRUE);
  m_xtpReportCtrl.GetReportHeader()->AllowColumnRemove(FALSE);
  m_xtpReportCtrl.GetReportHeader()->SetAutoColumnSizing(FALSE);
  m_xtpReportCtrl.AdjustScrollBars();
  m_xtpReportCtrl.Populate();
// 读取上一次的EXCEL文件目录
  CString strLastFolderPath = CPipePubUtils::getSzgxPz(HyGetUserDataDir() + _T("Data\\CustomStandard.ini"), _T("CustomStandard"), _T("StandardFilePath"), _T(""));
  if (!strLastFolderPath.IsEmpty())
  {
    strPath = strLastFolderPath;
  }
  lpszOpenFile->m_ofn.lpstrInitialDir = strPath;

如果觉得我的文章对您有用,请随意赞赏。您的支持将鼓励我继续创作!

发表评论

标签云