目标:
生成一个excel文件,该文件可以使用office2007打开,也可以使用office2003打开,而不弹出提示;
实现数据写入自动换行,换列的操作;
实现写入实数、复数、字符串的操作;
实现在指定位置,指定范围写入的操作。
该程序在VS2005,VS2008,VS2010测试通过!
步骤:
我们首先建立一个基于对话框的MFC程序,我将程序名命名为:GenenalCreateExcelFileDlg。然后打开界面,拖拽如图所示的四个static控件以及四个button控件。将界面更名为:“Excel测试程序”。其他界面的细节略过。
第一步:导入需要的库文件;
打开类向导,选择“类型库中的MFC类”如图:
接着我们在打开的对话框中选择源:注册表,类型库为:Excel 12.0。选择的库文件如图所示
第二步:修改库文件中的部分语句,否则编译后讲弹出大量bug;
上述步骤完成后,编译一下发现很多bug,此时,注释掉,步骤一中添加的库文件的#import语句:“//#import "E:\\Program Files\\Office2007\\Office12\\EXCEL.EXE" no_namespace”,同时,将这些库文件中“DialogBox()”更改为“_DialogBox()”,以防止重名冲突。
第三步:设计思路:excel2003 的行共有:256列,65536行,2007 更是有:1048576行、16384列;我们需要往不同的行不同的列写入数据,手动指定的话,谁也受不了,但是,excel列的排序符合26进制,因此,一个小小的函数,就可以让输入换列,而行的规律就是简单的十进制,指定了列的话往该列的不同行写不是问题。因此程序中有一个inline函数。再者,生成excel一般的思维就是:生成一个空白文件,往该文件中写入不同的数据,然后保存到指定位置即可。程序中实现这些函数即可。
第四步:设计相关函数:
首先添加一个操作excel的类:CMyExcel。其头文件如下:
#include "CApplication.h"
#include "CRange.h"
#include "CWorkbook.h"
#include "CWorksheet.h"
#include "CWorkbooks.h"
#include "CWorksheets.h"
#include <string>
using namespace std;
class CMyExcel
{
private:
//标记Excel对象的变量
CApplication m_app;
CWorkbooks m_books;
CWorkbook m_book;
CWorksheets m_sheets;
//标记excel中当前写入的标签页
CWorksheet m_sheet;
CRange m_range; //标记写入的范围
COleVariant m_covTrue,m_covFalse,m_coverOptional,m_filePath;
long m_rowCount; //标记Excel当前写入的列数
long m_sheetCount; //标记Excel使用了多少标签页的变量
long m_totalRow; //标记Excel总列数的变量
long m_totalCol; //标记Excel总行数的变量
char *m_colPst; //一个含有A-Z的数组
//列计数器
long m_matricImag