方法一:实现简单(C++),功能单一,对环境要求低
1、头文件
#include<fstream>
2、创建EXCEL表格
ofstream oFile;
//取个名字
CString m_strName = _T("xxx");
//后缀
//此方法只能创建.csv格式
CString strSuffix = _T(".csv");
char *m_clsExcelName = new char[128];
#ifdef _UNICODE
USES_CONVERSION;
// T2A():CString 转 char*
strcpy_s(m_clsExcelName, strlen(T2A(m_strName + strSuffix));
#else
strcpy_s(m_clsExcelName, strlen(m_strName + strSuffix);
#endif
//生成的路径是可以设置的
oFile.open(m_clsExcelName,ios::out|ios::trunc);
//防止内存泄漏
delete []m_clsExcelName;
m_clsExcelName = NULL;
//打印内容(.csv格式以逗号为分隔符)
int m_nId = 1;
oFile<<"ID:"<<","<<m_nId<<endl;
//空行
oFile<<" "<<endl;
//所有需要打印的字符串都需要转化为char*格式
CString m_strNO = _T("10");
char *strNo = new char[32];
#ifdef _UNICODE
USES_CONVERSION;
strcpy_s(strNo, strlen(T2A(m_strNO))+1, T2A(m_strNO));
#else
strcpy_s(strNo, strlen(m_strNO)+1, m_strNO);
#endif
oFile<<"编号:"<<","<<strNo<<endl;
delete []strNo;
strNo = NULL;
oFile.close();
方法二、稍复杂(MFC),功能多样,需要下载EXCEL
1、下载安装Office
2、右击MFC项目->【添加】->【类】->【Visual C++】->【MFC】->【TypeLib中的MFC类】->【添加】
以下A、B两种方法均可
选项A:
类来源=> "注册表"=> 类型库=>在【可用的类型库】中选择【Microsoft Excel 16.0 Object Library<1.9>】
【接口】中选择_Application,_Workbook,_Worksheet,Range,Workbooks,Worksheets,Font这7个接口。
选项B:类来源=> "文件"=> 找到"EXCEL.EXE"文件的位置=> 添加上述7个接口。
3、修改头文件
分别将加进来的7个头文件上面的“#import "C:\\Program Files (x86)\\Microsoft Office\\Root\\Office16\\EXCEL.EXE" no_namespace”注释掉。
【注】编译时可能会报错
…\crange.h(335): warning C4003: “DialogBoxW”宏的实参不足
…\crange.h(335): error C2059: 语法错误:“,”
【解决方案】
双击错误提示,定位在错误行,
VARIANT DialogBox()
{
VARIANT result;
InvokeHelper(0xf5, DISPATCH_METHOD, VT_VARIANT, (void*)&result, NULL);
return result;
}
将该函数名“DialogBox()”前面加“_”下划线,即“_DialogBox()”,这样就可以编译成功了。
4、头文件
#include "CApplication.h"
#include "CFont0.h"
#include "CRange.h"
#include "CWorkbook.h"
#include "CWorkbooks.h"
#include "CWorksheet.h"
#include "CWorksheets.h"
5、创建EXCEL表格
//EXCEL软件
CApplication app;
//工作簿
CWorkbook book;
//工作簿集合
CWorkbooks books;
//工作表
CWorksheet sheet;
//工作表集合
CWorksheets sheets;
//选区
CRange range;
//字体
CFont0 font;
COleVariant covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
if (!app.CreateDispatch(_T("Excel.Application")))
{
this->MessageBox(_T("无法启动Excel应用!"));
return;
}
books = app.get_Workbooks();
book = books.Add(covOptional);
sheets = book.get_Worksheets();
//获取第一个工作表
sheet = sheets.get_Item(COleVariant((short)1));
//工作表名称
CString strSheetName = _T("test1");
sheet.put_Name(strSheetName);
//选中A1-K1
range = sheet.get_Range(COleVariant(_T("A1")), COleVariant(_T("K1")));
//合并
range.Merge(_variant_t((long)0));
/*//设置列宽
range.put_ColumnWidth(_variant_t((long)8));
//设置上下边距
range.put_RowHeight(_variant_t((long)36));*/
//打印想要的内容
range.put_Value2(COleVariant(_T("拳打北海幼儿园,脚踢南山敬老院")));
//水平方向和竖直方向居中
//水平对齐:默认=1,居中=-4108,左=-4131,右=-4152
//垂直对齐:默认=2,居中=-4108,左=-4160,右=-4107
range.put_HorizontalAlignment(COleVariant((long)-4108));
range.put_VerticalAlignment(COleVariant((long)-4108));
//修改字体样式
font.AttachDispatch(range.get_Font());
font.put_Name(_variant_t("Times New Roman"));
//加粗
font.put_Bold(_variant_t((long)1));
font.put_Size(_variant_t((long)20));
range = sheet.get_Range(COleVariant(_T("A2")), COleVariant(_T("A2")));
range.put_Value2(COleVariant((long)1));
range = sheet.get_Range(COleVariant(_T("B2")), COleVariant(_T("K2")));
//自动换行
//range.put_WrapText(_variant_t((long)1));
//强制换行
CString strFirst = _T("赢则双亲健在");
CString strSecond = _T("输则族谱升天");
range.put_Value2(COleVariant(COleVariant(strFirst + '\n' + strSecond)));
range = sheet.get_Range(COleVariant(_T("A2")), COleVariant(_T("K2")));
range.put_VerticalAlignment(COleVariant((long)-4108));
font.AttachDispatch(range.get_Font());
font.put_Name(_variant_t("Times New Roman"));
font.put_Size(_variant_t((long)11));
//若是浮点数——设置小数位
//range.put_NumberFormat(COleVariant(_T("0.000")));
//画边框
CString strCellName;
for(int i=1; i <= 2; i++){
for(int j=1; j <= 11; j++){
strCellName.Format(_T("%c%d"), j+64, i);
range.AttachDispatch(sheet.get_Range(COleVariant(strCellName), COleVariant(strCellName)));
range._BorderAround(_variant_t((long)1),_variant_t((long)3),_variant_t((long)-4105), vtMissing);
}
}
/**
*//保存excel文件
*COleVariant VOption((long)DISP_E_PARAMNOTFOUND,VT_ERROR);
*book.SaveAs(COleVariant(path),VOption,VOption,VOption,VOption,VOption,(long)0,VOption,VOption,VOption,VOption,VOption);
**/
// 保存
book.SaveCopyAs(COleVariant(EXCEL_FILE + strSheetName + _T(".xlsx")));
book.put_Saved(TRUE);
// 释放对象
books.ReleaseDispatch();
book.ReleaseDispatch();
sheets.ReleaseDispatch();
sheet.ReleaseDispatch();
range.ReleaseDispatch();
font.ReleaseDispatch();
app.Quit();
// 退出 Excel 程序,注意这里要先退出,后释放
app.ReleaseDispatch();
定义生成路径
#define EXCEL_FILE ReturnPath()+ _T("\\EXCEL REPORT\\")
CString ReturnPath()
{
CString sPath;
GetModuleFileName(NULL, sPath.GetBufferSetLength(MAX_PATH+1), MAX_PATH);
sPath.ReleaseBuffer();
int nPos;
nPos=sPath.ReverseFind('\\');
sPath=sPath.Left(nPos);
return sPath;
}
2、