方法一:實現簡單(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、