- 博客(0)
- 资源 (6)
- 收藏
- 关注
Data Wrangling with Python
Data Wrangling with Python
全面掌握用Python进行爬虫抓取以及数据清洗与分析的方法 轻松实现高效数据处理
https://item.jd.com/12219342.html
2017-09-25
VC++(VS2010)读写Excel文件代码(附示例)
【前言】
工作或学习中可能需要实现基于VC读\写Excel文件的功能,本人最近也遇到了该问题。中间虽经波折,但是最终还是找到了解决问题的办法。
在此跟大家分享,希望对跟我同样迷茫过的同学们有所帮助。
1、程序功能
1)打开一个excel文件;
2)显示到CListCtrl上;
3)新建一个Excel文件。
以上均在对话框中实现。
2、平台
VC++2010
3、实现方法
常用的Excel打开方式有两种
1)通过数据库打开;
2)OLE方式打开。
由于方式1)操作繁琐,经常出现莫名的错误,这里选用方式2).
4、准备步骤
首先新建一个Dialog窗体程序,添加list control和两个按钮
1)将ExcelLib文件夹拷贝到程序目录下;
2)将Export2Excel.h,Export2Excel.cpp两个文件添加到项目;
3)包含头文件,#include "ExcelLib/Export2Excel.h"
通过以上步骤在程序中引入了可以读取Excle文件的CExport2Excel类;
5、打开excel文件
通过按钮点击打开
void CExcelTestDlg::OnBnClickedButtonOpenExcel()
{
//获取文件路径
CFileDialog* lpszOpenFile;
CString szGetName;
lpszOpenFile = new CFileDialog(TRUE,"","",OFN_FILEMUSTEXIST|OFN_HIDEREADONLY,"Excel File(*.xlsx;*.xls)|*.xls;*.xlsx",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;iGetItemCount()>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;columDoModal()==IDOK)
{
szGetName = lpszOpenFile->GetPathName();
SetWindowText(szGetName);
delete lpszOpenFile;
}
else
return;
//文件全名称
CString csFileName = szGetName;
//需要添加的两个sheet的名称
CString csSheetName = "newSheet";
CString csSheetName2 = "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,"第一列");
Excel_example.WriteHeader(2,"第二列");
//添加核心数据
Excel_example.WriteData(1,1,"数据1");
Excel_example.WriteData(1,2,"数据2");
//保存文件
Excel_example.Save();
//关闭文件
Excel_example.Close();
}
7、注意事项
1)一般单个Excel文件包含多个sheet,程序默认打开第一个;
2)指定操作sheet,使用Excel_example.SetSheet(2)函数; 3)打开文件时最左侧的sheet序号为1,新建excel时最新添加的sheet序号为1.
【后记】
本程序主要基于网络CSDN中---“Excel封装库V2.0”---完成,下载地址是:http://download.csdn.net/detail/yeah2000/3576494,在此表示感谢!同时,
1)在其基础上作了小改动,改正了几个小错误,添加了几个小接口;
2)添加了如何使用的例子,原程序是没有的;
3)详细的注释
发现不足之处,还请大家多多指教!
2014-11-22
VC2008_OpenCV2.3.1图像处理平台
【目的】
1、了解OpenCV在MFC框架中的使用,建立基于VC + OpenCV的图像处理平台;
2、在此基础上实现简单的图像处理操作,包括图像的打开、显示、放大、缩小、保存。
【版本】
VC2008 + opencv 2.3.1
【详细实现步骤】
1、VC2008编译环境设置:工程中已预先设好,为保证能编译成功,自己需重新设置(include/lib/bin路径,略。。。);
2、视图显示选择OpenCV老式显示方法CvvImage,将CvvImage文件夹下两个文件加入工程中,stdafx.h中加入【#include "CvvImage/CvvImage.h"】
3、CMFC_OpenCVDoc文档类中加入变量:
Mat m_originImage;//原始图像
Mat m_Image;//中间处理图像
4、重载虚函数OnOpenDocument函数,代码如下:
BOOL CMFC_OpenCVDoc::OnOpenDocument(LPCTSTR lpszPathName)
{
if (!CDocument::OnOpenDocument(lpszPathName))
return FALSE;
//使用Mat矩阵读取图像数据
m_originImage = imread((char*)lpszPathName);
//原始数据留存,数据操作在m_Image上进行
m_originImage.copyTo(m_Image);
return TRUE;
}
5、重载虚函数OnSaveDocument,代码如下:
BOOL CMFC_OpenCVDoc::OnSaveDocument(LPCTSTR lpszPathName)
{
if (!m_Image.empty())
{
imwrite((char*)lpszPathName, m_Image);
}
return TRUE;
}
6、视图类CMFC_OpenCVView中加入变量:
CImage m_showImage;//图像显示变量
7、视图类CMFC_OpenCVView中OnDraw函数改写如下:
void CMFC_OpenCVView::OnDraw(CDC* pDC)
{
CMFC_OpenCVDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
if (pDoc->m_Image.empty())
{
return;
}
//获取需要显示的图像
IplImage* piI = &(pDoc->m_Image.operator IplImage());
//转化为合适显示的类型
m_showImage.CopyOf( piI );
//获取显示设备窗口
CRect rect; GetClientRect(▭);
//把显示区的宽度设为图像的真实宽度和高度
rect.right=m_showImage.Width(); //CvvImage:Width()计算图像的宽度,单位像素
rect.bottom=m_showImage.Height();//CvvImage:Height()计算图像的高度,单位像素
//定义一个CSize对象,用于保存滚动条的尺寸,设为图像的真实尺寸
CSize sizeTotal(rect.right,rect.bottom);
SetScrollSizes(MM_TEXT, sizeTotal);//设置滚动条的位置
//调用CvvImage类的成员函数DrawToHDC在视图窗口显示图像
//函数形参为当前的设备环境和显示区大小
m_showImage.DrawToHDC(pDC->GetSafeHdc(),rect);
}
8、滚动条显示设置:
视图类CMFC_OpenCVView需继承于CScrollView类,而不是CView类,需要改动的地方还有,将以下语句
IMPLEMENT_DYNCREATE(CMFC_OpenCVView, CView)
BEGIN_MESSAGE_MAP(CMFC_OpenCVView, CView)
改为:
IMPLEMENT_DYNCREATE(CMFC_OpenCVView, CScrollView)
BEGIN_MESSAGE_MAP(CMFC_OpenCVView, CScrollView);
另外,初始化时重载OnInitialUpdate函数如下:
void CMFC_OpenCVView::OnInitialUpdate()
{
CScrollView::OnInitialUpdate();
// TODO: 在此添加专用代码和/或调用基类
CSize sizeTotal;
sizeTotal.cx = sizeTotal.cy = 60;
SetScrollSizes(MM_TEXT, sizeTotal);
}
2012-09-28
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人