C++-保存数据至EXCEL

Posted 翟天保Steven

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++-保存数据至EXCEL相关的知识,希望对你有一定的参考价值。

作者:翟天保Steven
版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处

场景需求

       在用C++编程时,往往会有保存数据的需求,比如我做图像处理的工作,经常会想将图片的像素数据保存至Excel中,然后用matlab进行分析或者用于其他方面。

       为了解决该需求,本文将为大家提供一个保存数据至EXCEL的函数。我以保存一幅图像数据为例,大家可以根据自己需求进行微调。

功能函数代码

void WritePicToExcel(string name, cv::Mat pic)

    // 我这里写了断言,可以根据需要自己调整
	CV_Assert(pic.type() == CV_32FC1);
	ofstream outfile(name);
	int row = pic.rows;
	int col = pic.cols;
	for (int i = 0; i < row; i++)
	
        // 采用指针读取Mat矩阵的方式提速
		float *p = pic.ptr<float>(i);
		for (int j = 0; j < col; j++)
		
            // 若需要保存的数据是非nan值,则正常保存;若为nan值,则保存字符“nan”
			if (p[j] == p[j])
			
				outfile << p[j] << (j == (col - 1) ? '\\n' : '\\t');
			
			else 
				outfile << "nan" << (j == (col - 1) ? '\\n' : '\\t');
			
			
		
	
	outfile.close();

C++测试代码

#include<iostream>
#include<fstream>
#include<opencv2/opencv.hpp>
using namespace std;
void WritePicToExcel(string name, cv::Mat pic);
int main()

	cv::Mat pic = cv::Mat::zeros(1000, 1000, CV_32FC1);
	for (int i = 0; i < pic.rows; i++)
	
		for (int j = 0; j < pic.cols; j++)
		
			pic.at<float>(i, j) = rand() % 255;
		
	
    // 人为设置一个nan值检验是否可以有效保存
	pic.at<float>(1, 2) = nan("");
    // 输入的string为保存的文件名,函数其实还可以加点文件格式的判断,有兴趣的自己改进下吧
	WritePicToExcel("test1.xls", pic);
	return 0;

void WritePicToExcel(string name, cv::Mat pic)

	CV_Assert(pic.type() == CV_32FC1);
	ofstream outfile(name);
	int row = pic.rows;
	int col = pic.cols;
	for (int i = 0; i < row; i++)
	
		float *p = pic.ptr<float>(i);
		for (int j = 0; j < col; j++)
		
			if (p[j] == p[j])
			
				outfile << p[j] << (j == (col - 1) ? '\\n' : '\\t');
			
			else 
				outfile << "nan" << (j == (col - 1) ? '\\n' : '\\t');
			
			
		
	
	outfile.close();

测试效果

图1 随机生成的图像矩阵
图2 保存效果图

       如上图所示,为了方便,我随机生成了一个1000*1000的图像矩阵,并定义了第二行第三列的点为nan值,保存效果如图2所示,成功!

       如果函数有什么可以改进完善的地方,非常欢迎大家指出,一同进步何乐而不为呢~

       如果文章帮助到你了,可以点个赞让我知道,我会很快乐~加油!

以上是关于C++-保存数据至EXCEL的主要内容,如果未能解决你的问题,请参考以下文章

将excel中数据保存至另一个excel中用vba

python 读取txt文件到excelc

C++-加载EXCEL数据

Jmeter设置保存到jtl文件中的数据

图表的 SetSourceData 为数据透视表返回 HRESULT E_FAIL (Excel C#)

python-Arduino串口传输数据到电脑并保存至excel表格