C++二进制导出到Excel代码

我使用C++语言编写的导出Excel文件的代码。

功能:

1:可生成Xls的Excel二进制文件,但不包括最新的2007格式(此格式正在编写学习中)。

2:生成字符串、数字、日期等格式的单元格,可以自由设置格式。

3:自由嵌入多个图片(目前不需要也不想支持线型、文本框等图型元素)。

4:自由合并单元格,设置列宽和行高(以像素为单位)。

5:可同时生成多个命名的Sheet。

 

特点:

1:快速。

2:体积小且格式正确,未发现生成的文件有任何异常。

3:C++语言编写的。(2011-02-26)

 

主要用途:

目的是主要应用于在项目中生成Excel,比如在报表中导出Excel等,所以不包括像公式这样的在导出时用不到的功能。

 

代码分为头文件和Cpp文件,但不包括里面用到的一个自定义类CTArray,这个类是我自己实现的。看情况如果需要再贴出。

 

ExcelWorkBook1.h:

ExcelWorkBook1.cpp:

下载链接

 

template<typename T, int I=256, bool Auto=false>
class CTArray
{
public:
	CTArray(void)
		: m_Array(NULL)
		, m_Count(0)
		, m_MaxSize(I)
		, m_AutoSize(Auto)
	{
		this->m_Array=new T[this->m_MaxSize];
		/*尊重元素的构造函数,不能强制的都初始化为0值
		memset(this->m_Array, 0, sizeof(T)*this->m_MaxSize);
		*/
	}
	CTArray(CTArray& src)
	{
		this->m_MaxSize=src.m_Count;//Copy合适的大小
		this->m_Count=src.m_Count;
		this->m_AutoSize=src.m_AutoSize;
		this->m_Array=new T[src.m_Count];
		memcpy_s(this->m_Array, sizeof(T)*src.m_Count, src.m_Array, sizeof(T)*src.m_Count);
	}
	~CTArray(void)
	{
 		delete[] this->m_Array;
	}
	int Count(void)
	{
		return this->m_Count;
	}
	void RemoveAll(void)
	{
		this->m_Count=0;
	}
	void DeleteAll(void)
	{
		for(int i=0;i<this->m_Count;i++)
		{
			delete *(this->m_Array+i);
		}
		this->m_Count=0;
	}
	void Zero()
	{
		memset(this->m_Array, 0, sizeof(T)*this->m_MaxSize);
	}
	CTArray& operator=(CTArray& src)
	{
		this->m_MaxSize=src.m_Count;//Copy合适的大小
		this->m_Count=src.m_Count;
		this->m_AutoSize=src.m_AutoSize;
		this->m_Array=new T[src.m_Count];
		memcpy_s(this->m_Array, sizeof(T)*src.m_Count, src.m_Array, sizeof(T)*src.m_Count);
		return *this;
	}
	T& operator[](int index)
	{
		if(m_AutoSize)
		{
			this->EnsureSize(index+1);
		}
		return this->m_Array[index];
	}
	T* GetAt(int index)
	{
		if (m_AutoSize)
		{
			this->EnsureSize(index+1);
		}
		return this->m_Array+index;	
	}
	int Add(T value)
	{
		this->EnsureSize();
		this->m_Array[this->m_Count]= value;
		return this->m_Count++;
	}
	int Add(T value, int length)
	{
		this->EnsureSize();
		memcpy(this->m_Array[this->m_Count++], value, length*(sizeof value[0]));

		return this->m_Count;
	}
	int Insert(int index, T value)
	{
		this->EnsureSize();
		for(int i=this->m_Count-1;i>index-1;i--)
		{
			this->m_Array[i+1]=this->m_Array[i];
		}
		this->m_Array[index]=value;
		return ++this->m_Count;
	}
	int Insert(int index, T value, int length)
	{
		this->EnsureSize();
		for(int i=this->m_Count-1;i>index-1;i--)
		{
			memcpy(this->m_Array[i+1], this->m_Array[i], sizeof this->m_Array[i]);
		}
		memcpy(this->m_Array[index], value, length*(sizeof value[0]));
		return ++this->m_Count;
	}
	void EnsureSize(int size=0)
	{
		//int count=this->m_Count;
		if (size>0 && this->m_Count<size)
		{
			this->m_Count=size;
		}
		if (this->m_Count<this->m_MaxSize)
		{
			/*尊重元素的构造函数,不能强制的都初始化为0值
			for(int i=count;i<this->m_Count;i++)
			{
				memset(this->m_Array+count, 0, sizeof(T)*(this->m_Count-count));
			}
			*/
			return;
		}
		this->m_MaxSize=this->m_Count+I;
		T* tmpArray=new T[this->m_MaxSize];
		memcpy(tmpArray, this->m_Array, this->m_Count*sizeof(T));
		/*尊重元素的构造函数,不能强制的都初始化为0值
		memset(tmpArray+count, 0, sizeof(T)*(this->m_MaxSize-count));
		*/
		delete[] this->m_Array;
		this->m_Array=tmpArray;
	}
	void Sort()
	{
		CTArray::quickSort(this->m_Array, 0, this->m_Count-1);
	}
	T* Array()
	{
		return this->m_Array;
	}
	void static quickSort(T* tArray, int left, int right)
	{
		do
		{
			int lindex = left;
			int rindex = right;
			int m = (lindex + rindex) >> 1;
			T mv = tArray[m];
			do
			{
				while (tArray[lindex]<mv)
				{
					lindex++;
				}
				while (mv<tArray[rindex])
				{
					rindex--;
				}
				if (lindex > rindex)
				{
					break;
				}
				if (lindex < rindex)
				{
					T lv = tArray[lindex];
					tArray[lindex] = tArray[rindex];
					tArray[rindex] = lv;
				}
				lindex++;
				rindex--;
			}
			while (lindex <= rindex);
			if ((rindex - left) <= (right - lindex))
			{
				if (left < rindex)
				{
					quickSort(tArray, left, rindex);
				}
				left = lindex;
			}
			else
			{
				if (lindex < right)
				{
					quickSort(tArray, lindex, right);
				}
				right = rindex;
			}
		}
		while (left < right);
	}
public:
	T* m_Array;
	int m_Count;
	bool m_AutoSize;
private:
	int m_MaxSize;
};


欢迎给出意见!2011-02-26 09:58:49

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值