***~~

做到最后可能会只是不能识别汉字,但是能识别英文和数字,有待改进的地方`

`

~~ ***

# 详细步骤见如下

一. 新建一个MFC项目:打开VS2013,文件->新建->项目


这里选择“基于对话框”

二. 在工具箱下添加如下控件

三. 双击”打开文件“,进入。cpp代码编写页面,填入以下代码:

Book* book = xlCreateXMLBook();if (!book){MessageBox(L"failed1");return;}book->load(L"Data2.xlsx");if (!book->load(L"Data2.xlsx")){MessageBox(L"failed2");return;}Sheet* sheet = book->getSheet(0);if (!sheet){MessageBox(L"failed3");return;}int rowfirst = sheet->firstRow();int rowlast = sheet->lastRow();int colfirst = sheet->firstCol();int collast = sheet->lastCol();for (int i = rowfirst + 1; i < rowlast; ++i){CString serial = sheet->readStr(i, 0);//CString address = sheet->readNum(i, 1);double number = sheet->readNum(i, 1);CString ttt;ttt.Format(L"%.0lf", number);CString project = sheet->readStr(i, 2);CString time = sheet->readStr(i, 3);CString gread = sheet->readStr(i, 4);CString address = sheet->readStr(i, 5);mList1.InsertItem(i - 1, serial);//开辟一个行,并且设置行的内容为i的内容mList1.SetItemText(i - 1, 1, ttt);//i代指在第几行插入数据,第二个参数代指第几列,第三个参数代指插入数据的值mList1.SetItemText(i - 1, 2, project);mList1.SetItemText(i - 1, 3, time);mList1.SetItemText(i - 1, 4, gread);mList1.SetItemText(i - 1, 5, address);//mList1.SetItemText(i, 1, number);}

其中的” Data2.xlsx “文件格式事先我已经将格式做好,将该文件放入项目文件下

四. 接下来用libxl.lib库读取excel文件

工程的配置
1、把include_cpp复制到工程文件夹下,设置包含目录

2、把libxl.lib复制到工程文件夹下,附加依赖项:libxl.lib

3、把libxl.dll复制到Debug下

Dlg.cpp下补充头文件与命名空间

#include "libxl.h"
#include <iostream>
using namespace libxl;

Dlg.cpp下主要代码:

const TCHAR* ReadDataToWChar(Sheet* sheet, int row,int col)
{CellType type = sheet->cellType(row,col);TCHAR buff[1024];switch (type){case 1://Num{swprintf_s(buff,1024,_T("%.2lf"),sheet->readNum(row,col));return buff;}case 2://Str{return sheet->readStr(row,col);}default:{return _T("读取错误!");}}
}
void CExcelTestDlg::OnBnClickedButton1()
{//初始化Book* book = xlCreateBook(); //if(!book) return -1;//book->load("00.xls");  //直接读的方式 //创建两个表,一个为“测试写”,一个为“测试读”Sheet* sheet = book->addSheet(_T("测试写"));Sheet* sheet1 = book->addSheet(_T("测试读"));//sheet = book->getSheet(0); //创建出错返回//if(!sheet || !sheet1) return -2; ///设置格式////设置字体//libxl::Font* font = book->addFont();//font->setName(_T("0"));//font->setSize(20);//font->setColor(COLOR_DARKBLUE);//font->setItalic(); //设置样式Format* StrFormat = book->addFormat();//StrFormat->setAlignH(ALIGNH_LEFT);//StrFormat->setBorder(BORDERSTYLE_MEDIUMDASHDOTDOT);//StrFormat->setBorderColor(COLOR_RED);//StrFormat->setFont(font); Format* dateFormat = book->addFormat();//dateFormat->setNumFormat(NUMFORMAT_DATE); Format* NumFormat = book->addFormat();//NumFormat->setNumFormat(NUMFORMAT_NUMBER); //Format* NumFormat1 = book->addFormat();//NumFormat1->setNumFormat(NUMFORMAT_NUMBER_D2);/你提出的要求的测试代码///读EDIT写入EXCELCString str;GetDlgItemText(IDC_WRITE, str);//得到字符串sheet->writeStr(0, 0, str, StrFormat);//0行0列//读EXCEL写入EDITCString str2;str2 = ReadDataToWChar(sheet,0,0);//0行0列SetDlgItemText(IDC_READ, str2);/你提出的要求的测试代码///以下为自由发挥部分///写数据///   sheet->writeStr(2, 0, _T("Hello, World !"),StrFormat);sheet->writeNum(4, 0, 1000,NumFormat);//sheet->writeNum(5, 0, 20.98,NumFormat1);sheet->writeFormula(6, 0, _T("SUM(A5:A6)"));sheet->writeNum(8, 0, book->datePack(2012, 05, 17), dateFormat);//循环写for (int i = 0;i < 200;i++){sheet->writeStr(i, 2, _T("Hello, World !"),StrFormat);sheet->writeNum(i, 3, i);} ///读数据///   for (int i = 0;i < 200;i++){sheet1->writeStr(i, 0,ReadDataToWChar(sheet,i,2));sheet1->writeStr(i, 3,ReadDataToWChar(sheet,i,3));sheet1->setCellFormat(i,3,StrFormat);}///保存///   if(book->save(_T("00.xls"))) {// ::ShellExecute(NULL, _T("open"), _T("00.xls"), NULL, NULL, SW_SHOW);   }else{std::cout << book->errorMessage() << std::endl;}book->release();
}

我当时是参考的这片文章,可以去看一下【mfc】excel读写——libxl.lib库

进行完上一步后,我们可以先打开文件看看效果

可以打开

五. ” 全选 “按键代码

 // TODO:  在此添加控件通知处理程序代码for (int i = 0; i < mList1.GetItemCount(); i++){if (mList1.GetCheck(i) == FALSE)  //未被选中的{mList1.SetCheck(i, TRUE);}else  //选中的{mList1.SetCheck(i, FALSE);}}

六. 接下来就就最好去找一个服务器可以发短信,这里用的是阿里云的

 经过操作,最主要的就是拿到 短信签名signName、模板**templateCode、accessKeyId、accessKeySecret。为后续的代码准备**


七. 在阿里云注册好账号有了ID后就接下来的操作:Windows下 VS2013编译,配置C/C++ libcurl开发环境

具体步骤可以参考这篇文章:Windows下 VS2013编译,配置C/C++libcurl开发环境

编译配置环境:

IDE:Visual Studio 2013
Env:Win 10
libcurl_version:curl 7.64.0
官网下载地址:https://curl.haxx.se/download.html

八. 构建libcurl静态库 (这里编译x64的release版本)

1,下载libcurl源码包,这里使用最新版本。

下载到本地解压后,留意红色框选的winbuild目录:

2,打开命令提示符

“开始”菜单——>Visual Studio 2013——>Visual Studio Tools——>VS2013 开发人员命令提示。

打开如下窗口(本机64位,这里选择红色框选快捷命令):

3,编译libcurl库
命令窗口切换到刚刚解压的源码文件夹的winbuild目录下

命令解析:
  nmake是MS的编译工具
  /f 参数描述文件名不使用默认的makefile
  Makefile.vc 是winbuild里的makefile文件
  mode=static 编译静态链接库
  vc=12 是VC++版本号MACHINE=64,64位lib库DEBUG=no,是否是debug版本(这里是release版本)。更多详细命令参数,参考winbuild文件夹中的BUILD.WINDOWS.txt查看。

回车,等待编译完成,关闭命令行界面。此时会在curl根目录下,生成一个builds文件夹:

打开builds文件夹,其中libcurl-vc12-x64-release-static-ipv6-sspi-winssl 文件夹包含了我们需要的运行库和头文件(可将该目录拷贝至其他位置,若方便后续使用)。

***这一步可做可不做***
> 打开builds文件夹,其中libcurl-vc12-x64-release-static-ipv6-sspi-winssl
>        文件夹包含了我们需要的运行库和头文件(可将该目录拷贝至其他位置,若方便后续使用)。

九. 在Visual Studio中链接libcurl

1,在Visual Studio中,右键单击解决方案资源管理器中的项目,然后单击“属性”。

2,配置属性> C / C ++>常规>其他包含目录:添加F:\curl-7.64.0\builds\libcurl-vc12-x64-release-static-ipv6-sspi-winssl\include。

3,配置属性>链接器>常规>其他库目录:添加F:\curl-7.64.0\builds\libcurl-vc12-x64-release-static-ipv6-sspi-winssl\lib

将以下lib添加至工程!
libcurl_a.lib;Ws2_32.lib;Wldap32.lib;winmm.lib;Crypt32.lib;Normaliz.lib;
使用了静态编译libcurl,所以需要将CURL_STATICLIB预编译添加至工程。

如果没有编译debug版libcurl,则需要将“Runtime Library”改为Release版(即后面不带小写字母d)。同时官方并不建议使用“/MT”或“/MTd”。

注意此处设置修改为和上述设置一致。

十. 项目中调用libcurl

代码如下:

// ConsoleApplication3.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//
#include <stdio.h>
#include <curl.h>
#include <stdarg.h>
#include <stdlib.h>
#include <string.h>//#include<stdafx.h>
#define bzero(a, b)             memset(a, 0, b)
#pragma warning(disable:4996)
#define MAXPARAM 2048CURL* curl;
CURLcode res;
/**
bingone
本样例依赖libcurl库
下载地址 https://curl.haxx.se/download.html
**/// 修改为您的apikey(https://www.yunpian.com)登录官网后获取
char* apikey = "你自己的apikey";
// 修改为您要发送的手机号
char* mobile = "159570";
// 设置您要发送的内容
char* text = "您的验证码是1234";
// 指定发送的模板id
int tpl_id = 3569052;
// 指定发送模板内容char* tpl_data[4] = { "#name#", "www", "#code#", "444" };// 发送语音验证码内容
int code = 1234;
// 获取user信息url
char* url_get_user = "你自己的url";
// 智能模板发送短信url
// 指定模板发送短信url
char* url_tpl_sms = "你自己的url";
// 发送语音验证码短信url
// ar * url_send_voice = "你自己的url";void send_data(char* url, char* data)
{// specify the urlcurl_easy_setopt(curl, CURLOPT_URL, url);// specify the POST datacurl_easy_setopt(curl, CURLOPT_POSTFIELDS, data);// get response datacurl_easy_perform(curl);printf("\n\n");
}/**
* 指定模板单发
*/
void send_tpl_sms(char* apikey, char* mobile, int tpl_id, char* tpl_value)
{char params[MAXPARAM + 1];char* cp = params;sprintf(params, "apikey=%s&mobile=%s&tpl_id=%d&tpl_value=%s", apikey, mobile,tpl_id, tpl_value);send_data(url_tpl_sms, params);
}int main(void)
{curl = curl_easy_init();mobile = curl_easy_escape(curl, mobile, strlen(mobile));if (NULL == curl) {perror("curl open fail\n");}// 获取用户信息//get_user(apikey);// 发送语音验证码// nd_voice(apikey, mobile, code);char* tmp;char* tpl_value = (char*)malloc(sizeof(char) * 500);bzero(tpl_value, sizeof(char) * 500);// 模板短信发送需要编码两次,第一次URL编码转换int len = 0;tmp = curl_easy_escape(curl, tpl_data[0], strlen(tpl_data[0]));memcpy(tpl_value + len, tmp, strlen(tmp));len += strlen(tmp);tpl_value[len++] = '=';tmp = curl_easy_escape(curl, tpl_data[1], strlen(tpl_data[1]));memcpy(tpl_value + len, tmp, strlen(tmp));len += strlen(tmp);tpl_value[len++] = '&';tmp = curl_easy_escape(curl, tpl_data[2], strlen(tpl_data[2]));memcpy(tpl_value + len, tmp, strlen(tmp));len += strlen(tmp);tpl_value[len++] = '=';tmp = curl_easy_escape(curl, tpl_data[3], strlen(tpl_data[3]));memcpy(tpl_value + len, tmp, strlen(tmp));len += strlen(tmp);tmp = tpl_value;// 第二次URL编码tpl_value = curl_easy_escape(curl, tpl_value, strlen(tpl_value));send_tpl_sms(apikey, mobile, tpl_id, tpl_value);free(tmp);curl_easy_cleanup(curl);return 0;
}

之前让注册阿里云短信发送服务时所获得的密钥与URL 在这里便可以用到

将代码运行一遍便可以接受到短信了,但是现在属于用C++控制套程序发送短信,并没有用到MFC的” 发送短信“按键,还待后续继续完善
这里推荐一个关于MFC与云片程序相结合的网站,写的很全----云片

基于MFC与阿里云制作简易发送短信相关推荐

  1. 阿里云接口实现发送短信验证码

    java 阿里云接口实现发送短信验证码 1. 阿里云后台配置短信相关 1.1 开通短信服务 1.2 添加模板签名 1.3 创建秘钥 1.4 短信需要后台授权--注意点 2 java--简单实现短信验证 ...

  2. 阿里云API定时发送短信(小记)

    定时任务的代码:import com.google.gson.Gson; import com.jianke.bid.common.SMSUtils; import org.springframewo ...

  3. java 阿里云接口实现发送短信验证码

    1.先去阿里云开通短信服务: 2.添加模板及签名:需要审核,个人账户审核就几分钟就OK 先解释一下模板及签名: 标准参照:https://help.aliyun.com/document_detail ...

  4. 使用阿里云短信通知服务发送短信--工具类

    public class AliyunUtils {public static boolean sendSMS(String mobilephone,Integer status) throws Se ...

  5. Yii2 + 阿里云 后台配置发送短信

    1.登录阿里云账号之后 首先鼠标移动到你的头像上 点击AccessKey之后 创建 2.找到短信服务这里 申请签名 和 模板 3.登录yii2框架后台 填写上相对应的信息. 4.在控制器中: publ ...

  6. 移动云mas-sdk方式发送短信

    移动云mas-sdk方式发送短信 https://mas.ecloud.10086.cn/ 因业务需要,发送短信的方式由http方式改为sdk,项目使用springboot 云mas账号 http原有 ...

  7. 阿里云短信服务不对个人开放?如何在阿里云市场免费购买短信服务?云市场购买到的短信服务如何使用?(以谷粒学院项目为例)

    问题描述: 在做谷粒学院项目时,需要使用阿里云的短信服务用于注册验证,但是阿里云的短信服务目前不对个人开放了,看到弹幕说可以在云市场购买,于是果断尝试了一把,这过程中又遇到头疼的依赖版本兼容问题,好在 ...

  8. 阿里云验证码与通知短信

    1.入住阿里云 首先,注册阿里云账号或者快捷登陆 其次,实名认证 根据情况选择是企业还是个人用户(以个人用户为例) 然后选择个人支付宝授权认证 最后,根据实际情况填写个人信息 2.开通短信服务 首先, ...

  9. 阿里云——Java实现手机短信验证码功能

    目录 如何实现短信验证码功能 1.准备工作 1.1 注册 阿里云 账号,并完成实名认证.找到短信服务功能. 1.2 开通短信服务 1.3 签名与模板 1.4 获取AccessKey 1.5 打开短信控 ...

最新文章

  1. Linux下的示例程序
  2. IAR编译提示could not open file lnkstm8s003f3.icf
  3. 与python相关的爬虫工具_python爬虫常用工具集合
  4. datename mysql_SQL日期时间函数总结(MSSQL)
  5. C++四种cast操作符
  6. 牛客网【每日一题】4月14日题目精讲 Xorto
  7. 很多文章是在下转载贴在此处,是为了自己以后遇到类似问题一时想不起来
  8. Sql Server 2005 PIVOT的行列转换应用实例
  9. Codeforces Round #207 (Div. 1) B. Xenia and Hamming(gcd的运用)
  10. 技术简报 2014-1-27
  11. 12月第1周网络安全报告:境内95.8万主机感染病毒
  12. 第一方数据,第二方数据,第三方数据:你了解多少?
  13. Code39码和Code93码的区别
  14. 浓淡相宜间,是灵魂的默契;
  15. Vue element 自定义表单验证(验证联系方式、邮箱、邮政编码)
  16. 抽象工厂模式读书笔记
  17. 【FFMPEG】视频转码之VOB视频无声处理
  18. KBEngine游戏服务器(一)——引擎源代码的获取和编译
  19. linux量产工具使用,33-Vstr开发板资料合集 开发工具 US升级和量产工具 LiveSuitV306_For_Linux64 LiveSuit_For_Linux64 RedMe...
  20. softmax分类器推导

热门文章

  1. 怎么检查计算机硬盘有没有供电,事实:如何检测计算机硬盘是否有问题?如何使用硬盘检测工具...
  2. linux u盘启动工具unetbootin
  3. 极路由1S 开启临时ssh 并刷breed成功
  4. 需求分析 及需求文档的编写
  5. Blender:Lowpoly头部建模流程 目录
  6. 《穷查理宝典》芒格思维笔记(二)
  7. PHP设计模式系列:目录
  8. 15个常用excel函数公式_EXCEL函数公式小妙招,点滴积累效率高
  9. 域名解析后内部服务器错误,网站出现域名解析错误怎么办?利用dnspod解决域名解析出错的方法...
  10. 开源项目mini-ipc简介