资源简介
使用VC/C++生成excel的方式有很多,但是绝大部分要么是简单的csv文件,要么需要COM并已经安装ms excel,局限性比较大。
我这里提供一种使用C++编写以html脚本的方式生成xls文件的方法。不使用任何非C++标准库,支持字体大小、颜色,单元格合并、背景色、边框等设置。
generate_excel.vcproj为在vs2005下的工程文件,如果需要在vc6或Linux等其他编译环境下使用只需新建工程将.h文件和.cpp文件导入即可编译。
generate_excel
|------include
| |----gen_excel_file.h
| |----input_data.h
|
|------cpp
| |----gen_excel_file.cpp //excel文件操作类
| |----input_data.cpp //生成虚拟数据
| |----main.cpp //调用gen_excel_file类
|
|------iofiles
| |----head.txt //格式定义文件
|
|------generate_excel.vcproj //vc2005工程文件
|------表格.xls //输出文件
代码片段和文件信息
//////////////////////////////////////////////////////////////////////////
//
// :gen_excel_file类,excel操作类
// by leo9909@csdn.net
//
//////////////////////////////////////////////////////////////////////////
#include “gen_excel_file.h“
using namespace generate_excel;
//--------------------------------------
gen_excel_file::gen_excel_file(void)
{
m_xls = NULL;
}
gen_excel_file::~gen_excel_file(void)
{
release();
}
gen_excel_file::gen_excel_file(const gen_excel_file &r)
{
}
gen_excel_file &gen_excel_file::operator=(const gen_excel_file &r)
{
return *this;
}
//----------------
void gen_excel_file::release()
{
if (m_xls)
{
fclose(m_xls);
m_xls = NULL;
}
}
//--------------------------------------
int gen_excel_file::create_file(const char * file_name)
{
release();
m_xls = fopen(file_name “w+“);
if (!m_xls)
return ERR_OPEN_FAILED;
//1.
fprintf(m_xls FILE_HTML_title);
//2.
if (load_xls_head())
return ERR_WRITE_HEAD_FAILED;
//3.
fprintf(m_xls FILE_BODY_title);
fprintf(m_xls FILE_TABLE_title);
return SUCCESS;
}
int gen_excel_file::load_xls_head()
{
CHECK_BUFFER_WITH_RETURN;
FILE *p_head = fopen(HEAD_TEXT_FILE “r“);
if (!p_head)
return ERR_WRITE_HEAD_FAILED;
copy_text(p_head m_xls);
fclose(p_head);
return SUCCESS;
}
int gen_excel_file::end_file()
{
CHECK_BUFFER_WITH_RETURN;
fprintf(m_xls “\n“);
fprintf(m_xls “