hpp

 #pragma once
#include "stdafx.h"
#include "CApplication.h"
#include "CWorkbook.h"
#include "CWorksheet.h"
#include "CRange.h"
#include "CWorkbooks.h"
#include "CWorksheets.h"
#include "Cnterior.h"
#include "CFont0.h"
#include "CShape.h"
#include "CShapes.h"
#include <string>
#include <vector> using namespace std; class ExcelApi
{
public:
ExcelApi(void);
~ExcelApi(void); // 初始化Excel OLE
BOOL InitExcel(); /**
* @brief 新建Excel
* @param[in] ExcalPath 路径
*/
void CreateExcel(const char* ExcalPath); /**
* @brief 打开Excel
* @param[in] filePath 路径
* @param[in] type 打开时是否显示EXCEL
* @return BOOL 打开成功&失败
*/
BOOL OpenFile(const char* filePath, bool type); /**
* @brief 关闭Excel
*/
void CloseExcel(); /**
* @brief 保存Excel
*/
void Save(); /**
* @brief 获取所有的工作表数量
* @return int 数量
*/
int GetSheetCount(); /**
* @brief 设置当前工作表
* @param[in] id 第几个sheet,从1开始
* @return BOOL 设置成功&失败
*/
BOOL SetCurrentSheetByNum(const int& id); /**
* @brief 设置当前工作表
* @param[in] sheet_name sheet的名字
* @return BOOL 设置成功&失败
*/
BOOL SetCurrentSheetByName(string sheet_name); /**
* @brief 获取单元格数据
* @param[in] row 行
* @param[in] column 列
* @return string 内容
*/
string GetRangeData(const int row, const int column); /**
* @brief 获取sheet名字
* @return string 名字
*/
string GetSheetName(); /**
* @brief 设置sheet名字
*/
void SetSheetName(const int SheetNum, const char* SheetName); /**
* @brief 当前sheet单元格写入内容
* @param[in] row 行
* @param[in] column 列
* @param[in] Data 内容
*/
void SetRangeData(const int row, const int column, const char* Data); /**
* @brief 获得当前sheet使用的行数
* @return int 数量
*/
int GetRowNum(); /**
* @brief 获得当前sheet使用的列数
* @return int 数量
*/
int GetColumnNum(); /**
* @brief 删除单元格
* @param[in] A1 起始单元格
* @param[in] B1 结束单元格
* @param[in] type 类型(设置删除类型1.右侧单元格左移 2.下方单元格上移 3.整行 4.整列)
*/
void DeleteRange(char* A1, char* B1, int type); /**
* @brief 添加单元格
* @param[in] A1 起始单元格
* @param[in] B1 结束单元格
* @param[in] type 类型(设置添加类型1.右侧单元格左移 2.下方单元格上移 3.整行 4.整列)
*/
void AddRange(char* A1, char* B1, int type); /**
* @brief 设置字体和颜色
* @param[in] A1 起始单元格
* @param[in] B1 结束单元格
* @param[in] FontType 字体类型
* @param[in] FontColor 字体颜色
* @param[in] FontSize 字体大小
*/
void SetFont(char* A1, char* B1, char* FontType, int FontColor, int FontSize); /**
* @brief 设置单元格填充颜色
* @param[in] A1 起始单元格
* @param[in] B1 结束单元格
* @param[in] FontColor 颜色
*/
void SetRangeColor(char* A1, char* B1, int RangeColor); /**
* @brief 遍历某一单元格,替换内容
* @param[in] CycleName 要遍历的名字
* @param[in] NewName 写入的新名字
*/
void CycleRangeSetData(char* CycleName, char* NewName); /**
* @brief 遍历某一单元格,返回所在的行和列(vector)
* @param[in] CycleName 要遍历的名字
*/
vector<string>CycleRangeReturnRowColumn(char* CycleName); /**
* @brief 刷一行值
* @param[in] CycleName 要遍历的名字
* @param[in] NewName1 写入的新名字
* @param[in] NewName2 写入的新名字
* @param[in] NewName3 写入的新名字
* @param[in] NewName4 写入的新名字
* @param[in] NewName5 写入的新名字
* @param[in] NewName6 写入的新名字
* @param[in] NewName7 写入的新名字
* @param[in] NewName8 写入的新名字
*/
void ShuaValue(const char* CycleName, const char* NewName1, const char* NewName2, const char* NewName3, const char* NewName4, const char* NewName5, const char* NewName6, const char* NewName7, const char* NewName8); /**
* @brief 删除当前sheet所有内容
*/
void DeleteSheetRange(); /**
* @brief 添加单元格框线
* @param[in] LineType 线的样式:0- no line; 1-solid; 2-big dot;3-small dot;4-dash dot; 5-dash dot dot;
*/
void SetRangeBorder(int LineType); /**
* @brief 合并单元格
* @param[in] A1 起始单元格
* @param[in] B1 终止单元格
*/
void SetRangeMerge(char* A1, char* B1); /**
* @brief 拆分单元格
* @param[in] A1 起始单元格
* @param[in] B1 终止单元格
*/
void SetRangeUnMerge(char* A1, char* B1); /**
* @brief 清空单元格内容
* @param[in] A1 起始单元格
* @param[in] B1 终止单元格
*/
void ClearContents(char* A1, char* B1); /**
* @brief 设置所有字体左对齐
* @param[in] type 类型(水平对齐:默认 1 居中 -4108, 左= -4131,右=-4152)
*/
void SetFontHorizontalAlignment(int type); /**
* @brief 设置单元格格式(文本)
*/
void SetRangeSetting(); /**
* @brief 遍历单元格中复合条件的字体类型颜色大小/单元格颜色
* @param[in] FontType 字体类型
* @param[in] FontColor 字体颜色
* @param[in] FontSize 字体大小
* @param[in] RangeColor 单元格颜色
*/
void CycleFontTypeColorSizeAndRangeColor(char* FontType, int FontColor, int FontSize, int RangeColor); /**
* @brief 插入图片
* @param[in] ExcalPath 存储图片文件的路径字符串
* @param[in] ExcalPath 表示要连接到的文件
* @param[in] ExcalPath 表示将图片与文档一起保存
* @param[in] ExcalPath 图片插入位置的左上角横坐标
* @param[in] ExcalPath 图片插入位置的左上角纵坐标
* @param[in] ExcalPath 表示插入的图片的显示宽度
* @param[in] ExcalPath 表示插入的图片的显示高度
*/
void AddPicture(const char* Filename, long LinkToFile, long SaveWithDocument, float Left, float Top, float Width, float Height); private: bool IsOpenBook;
bool IsOpenSheet; //Excel应用程序
CApplication ExcelApp;
//Excel工作簿
CWorkbooks ExcelBooks;
CWorkbook ExcelBook;
//Excel工作表
CWorksheets ExcelSheets;
CWorksheet ExcelSheet;
//Excel单元格
CRange ExcelRange;
//Excel字体
CFont0 ft;
//颜色
Cnterior it;
//图片
CShapes shp; };

cpp

 #include "stdafx.h"
#include "ExcelApi.h" COleVariant covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR); ExcelApi::ExcelApi(void)
{
IsOpenBook = false;
IsOpenSheet = false;
} ExcelApi::~ExcelApi()
{
} // 初始化Excel OLE
BOOL ExcelApi::InitExcel()
{
// 初始化COM库
CoInitialize(NULL);
// 初始化Excel
if (!ExcelApp.CreateDispatch("Excel.Application", NULL))return FALSE;
ExcelApp.put_DisplayAlerts(FALSE); // 屏蔽警告
return TRUE;
} //创建EXCEL
void ExcelApi::CreateExcel(const char* ExcalPath)
{
LPDISPATCH lpDisp;
COleVariant vResult;
COleVariant
covTrue((short)FALSE),
covFalse((short)FALSE),
covOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR); if (!ExcelApp.CreateDispatch("Excel.Application"))
{
AfxMessageBox("创建Excel服务失败!");
} ExcelApp.put_Visible(FALSE); //使Excel可见
ExcelApp.put_UserControl(TRUE);// 设置表格状态为用户不可控制
ExcelApp.put_DisplayAlerts(false); //打开fullFileName
lpDisp = ExcelApp.get_Workbooks();
ExcelBooks.AttachDispatch(lpDisp); COleVariant valTemp((long)DISP_E_PARAMNOTFOUND, VT_ERROR);
lpDisp = ExcelBooks.Add(valTemp);
ExcelBook.AttachDispatch(lpDisp); ExcelSheets.AttachDispatch(ExcelBook.get_Worksheets());
ExcelSheet.AttachDispatch(ExcelSheets.get_Item(COleVariant((short)))); //获取sheet1
ExcelSheet.put_Name("TestName"); //设置sheet1名字 //另存为
ExcelBook.SaveAs(COleVariant(ExcalPath), covOptional, covOptional, covOptional,
covOptional, covOptional, , covOptional, covOptional, covOptional, covOptional, covOptional);
IsOpenBook = true;
} //打开Excel
BOOL ExcelApi::OpenFile(const char* filePath, bool type)
{
if (!ExcelApp.CreateDispatch("Excel.Application"))
{
AfxMessageBox("创建Excel服务失败!");
}
ExcelApp.put_Visible(type);//使Excel可见
ExcelApp.put_UserControl(FALSE);// 设置表格状态为用户不可控制
LPDISPATCH lpDisp = NULL;
lpDisp = ExcelApp.get_Workbooks(); ExcelBooks.AttachDispatch(lpDisp);
lpDisp = ExcelBooks.Open(filePath, covOptional, covOptional, covOptional, covOptional,
covOptional, covOptional, covOptional, covOptional, covOptional, covOptional,
covOptional, covOptional, covOptional, covOptional);
if (lpDisp == NULL)
{
return FALSE;
}
ExcelBook.AttachDispatch(lpDisp);
IsOpenBook = true;
return TRUE;
} void ExcelApi::CloseExcel()
{
ExcelRange.ReleaseDispatch();
ExcelSheet.ReleaseDispatch();
ExcelSheets.ReleaseDispatch();
ExcelBook.ReleaseDispatch();
ExcelBooks.ReleaseDispatch();
ExcelApp.Quit();
ExcelApp.ReleaseDispatch();
} void ExcelApi::Save()
{
ExcelBook.Save();
} int ExcelApi::GetSheetCount()
{
if (IsOpenBook != true)
{
AfxMessageBox("请先打开工作簿!");
return -;
} LPDISPATCH lpDisp = NULL;
lpDisp = ExcelBook.get_Sheets();
if (lpDisp == NULL)
{
return -;
}
ExcelSheets.AttachDispatch(lpDisp); return ExcelSheets.get_Count();
} //设置当前工作表
BOOL ExcelApi::SetCurrentSheetByNum(const int& id)
{
if (IsOpenBook != true)
{
AfxMessageBox("请先打开工作簿!");
return FALSE;
} LPDISPATCH lpDisp = NULL;
lpDisp = ExcelBook.get_Sheets();
if (lpDisp == NULL)
{
return FALSE;
}
ExcelSheets.AttachDispatch(lpDisp);
lpDisp = ExcelSheets.get_Item(COleVariant((short)id));
if (lpDisp == NULL)
{
return FALSE;
}
ExcelSheet.AttachDispatch(lpDisp);
ExcelSheet.Activate();
IsOpenSheet = true;
return TRUE;
}
BOOL ExcelApi::SetCurrentSheetByName(string sheet_name)
{
if (IsOpenBook != true)
{
AfxMessageBox("请先打开工作簿!");
return FALSE;
} LPDISPATCH lpDisp = NULL;
lpDisp = ExcelBook.get_Sheets();
if (lpDisp == NULL)
{
return FALSE;
}
ExcelSheets.AttachDispatch(lpDisp); int count = GetSheetCount();
string name;
int id;
for (int i = ; i < count; i++)
{
id = i + ;
SetCurrentSheetByNum(id);
name = GetSheetName();
if (sheet_name == name)
{
lpDisp = ExcelSheets.get_Item(COleVariant((short)id));
break;
}
} if (lpDisp == NULL)
{
return FALSE;
}
ExcelSheet.AttachDispatch(lpDisp);
ExcelSheet.Activate();
IsOpenSheet = true;
return TRUE;
} string ExcelApi::GetRangeData(const int row, const int column)
{
//获得使用的区域Range(区域)
ExcelRange.AttachDispatch(ExcelSheet.get_UsedRange(), TRUE); // 读取
CRange range;
range.AttachDispatch(ExcelRange.get_Item(COleVariant((long)row), COleVariant((long)column)).pdispVal);
COleVariant vResult = range.get_Value2();
range.ReleaseDispatch();
// 分析vResult
CString str;
if (vResult.vt == VT_BSTR)str = vResult.bstrVal; // 字符串
else if (vResult.vt == VT_INT)str.Format(_T("%d"), vResult.pintVal); // 整数
else if (vResult.vt == VT_R8)str.Format(_T("%.3f"), vResult.dblVal); // 8字节的整数
else if (vResult.vt == VT_DATE) // 时间格式
{
SYSTEMTIME st; VariantTimeToSystemTime(vResult.date, &st);
CTime tm(st); str = tm.Format("%Y-%m-%d");
}
else if (vResult.vt == VT_EMPTY)str = ""; // 空的单元格
else str = "";
return str;
} string ExcelApi::GetSheetName()
{
if (IsOpenBook != true)
{
AfxMessageBox("请先打开工作簿!");
return "false";
} return ExcelSheet.get_Name();
} void ExcelApi::SetSheetName(const int SheetNum, const char* SheetName)
{
ExcelSheets.AttachDispatch(ExcelBook.get_Worksheets());
ExcelSheet.AttachDispatch(ExcelSheets.get_Item(COleVariant((short)SheetNum))); //获取sheet1
ExcelSheet.put_Name(SheetName); //设置sheet1名字
} //当前sheet单元格写入内容
void ExcelApi::SetRangeData(const int row, const int column, const char* Data)
{
if (IsOpenBook != true)
{
AfxMessageBox("请先打开工作簿!");
return;
} //得到全部Cells,此时,userRange是cells的集合
ExcelRange.AttachDispatch(ExcelSheet.get_Cells(), TRUE); //设置表格内容
ExcelRange.put_Item(COleVariant((long)row), COleVariant((long)column), COleVariant(_T(Data))); } //获得当前sheet使用的行数
int ExcelApi::GetRowNum()
{
if (IsOpenBook != true)
{
AfxMessageBox("请先打开工作簿!");
return ;
} //获得使用的区域Range(区域)
ExcelRange.AttachDispatch(ExcelSheet.get_UsedRange(), TRUE); //获得使用的行数
long lgUsedRowNum = ;
ExcelRange.AttachDispatch(ExcelRange.get_Rows(), TRUE);
lgUsedRowNum = ExcelRange.get_Count(); return lgUsedRowNum;
} int ExcelApi::GetColumnNum()
{
if (IsOpenBook != true)
{
AfxMessageBox("请先打开工作簿!");
return ;
} //获得使用的区域Range(区域)
ExcelRange.AttachDispatch(ExcelSheet.get_UsedRange(), TRUE); //获得使用的列数
long lgUsedColumnNum = ;
ExcelRange.AttachDispatch(ExcelRange.get_Columns(), TRUE);
lgUsedColumnNum = ExcelRange.get_Count(); return lgUsedColumnNum;
} void ExcelApi::DeleteRange(char* A1, char* B1, int type)
{
//方法1
//ExcelRange.AttachDispatch(ExcelSheet.get_Range(COleVariant(_T(A1)), COleVariant(_T(B1))), TRUE);//设置单元格区域
//ExcelRange.AttachDispatch(ExcelRange.get_EntireRow());//获取这一行
//ExcelRange.Delete(vtMissing);//删除这一行 //方法2
ExcelRange.AttachDispatch(ExcelSheet.get_Range(COleVariant(_T(A1)), COleVariant(_T(B1))), TRUE);//设置单元格区域
ExcelRange.Delete(COleVariant((long)type));//设置删除类型1.右侧单元格左移 2.下方单元格上移 3.整行 4.整列
} void ExcelApi::AddRange(char* A1, char* B1, int type)
{
//方法1
//ExcelRange.AttachDispatch(ExcelSheet.get_Range(COleVariant(_T("F3")), COleVariant(_T("G3"))), TRUE);//设置单元格区域
//ExcelRange.AttachDispatch(ExcelRange.get_EntireRow());//获取这一行
//ExcelRange.Insert(vtMissing, vtMissing);//在上面添加新一行 //方法2
ExcelRange.AttachDispatch(ExcelSheet.get_Range(COleVariant(_T(A1)), COleVariant(_T(B1))), TRUE);//设置单元格区域
// ExcelRange.Insert(COleVariant((long)type), vtMissing);//设置添加类型1.活动单元格右移 2.活动单元格下移 3.整行 4.整列 } void ExcelApi::SetFont(char* A1, char* B1, char* FontType, int FontColor, int FontSize)
{
//设置字体颜色
ExcelRange.AttachDispatch(ExcelSheet.get_Range(COleVariant(_T(A1)), COleVariant(_T(B1))), TRUE);//设置单元格区域
ft.AttachDispatch(ExcelRange.get_Font());
ft.put_Name(COleVariant(_T(FontType)));//设置字体类型
ft.put_ColorIndex(COleVariant((long)FontColor));//设置字体颜色
ft.put_Size(COleVariant((long)FontSize));//设置字体大小
} void ExcelApi::SetRangeColor(char* A1, char* B1, int RangeColor)
{
//设置单元格颜色
ExcelRange.AttachDispatch(ExcelSheet.get_Range(COleVariant(_T(A1)), COleVariant(_T(B1))), TRUE);//设置单元格区域 //设置单元格填充颜色
it.AttachDispatch(ExcelRange.get_Interior());
it.put_ColorIndex(_variant_t((long)RangeColor));
} void ExcelApi::CycleFontTypeColorSizeAndRangeColor(char* FontType, int FontColor, int FontSize, int RangeColor)
{
//获得使用的区域Range(区域)
ExcelRange.AttachDispatch(ExcelSheet.get_UsedRange(), TRUE); //获得使用的行数
long lgUsedRowNum = ;
ExcelRange.AttachDispatch(ExcelRange.get_Rows(), TRUE);
lgUsedRowNum = ExcelRange.get_Count(); //获得使用的列数
long lgUsedColumnNum = ;
ExcelRange.AttachDispatch(ExcelRange.get_Columns(), TRUE);
lgUsedColumnNum = ExcelRange.get_Count(); vector<CString> delete_all;
//遍历整个Excel表格
for (int j = ; j <= lgUsedRowNum; j++)
{
for (int i = ; i <= lgUsedColumnNum; i++)
{
CString str1;
str1.Format("%c%d", + i - , j);
//LPDISPATCH lpDisp = ExcelRange.get_Range(COleVariant(str1), COleVariant(str1)); //设置字体颜色
ExcelRange.AttachDispatch(ExcelSheet.get_Range(COleVariant(_T(str1)), COleVariant(_T(str1))), TRUE);//设置单元格区域
ft.AttachDispatch(ExcelRange.get_Font());
//读取字体颜色
VARIANT vResult1 = ft.get_ColorIndex();
CString str0;
if (vResult1.vt == VT_I4)str0.Format(_T("%d"), vResult1.iVal); // 8字节的整数 //读取字体类型
VARIANT vResult2 = ft.get_Name();
CString str2;
if (vResult2.vt == VT_BSTR)str2 = vResult2.bstrVal; //读取字体大小
VARIANT vResult3 = ft.get_Size();
CString str3;
if (vResult3.vt == VT_R8)str3.Format(_T("%0.0f"), vResult3.dblVal); // 8字节的整数 //设置单元格颜色
ExcelRange.AttachDispatch(ExcelSheet.get_Range(COleVariant(_T(str1)), COleVariant(_T(str1))), TRUE);//设置单元格区域
it.AttachDispatch(ExcelRange.get_Interior());
//读取单元格填充颜色
VARIANT vResult4 = it.get_ColorIndex();
CString str4;
if (vResult4.vt == VT_I4)str4.Format(_T("%d"), vResult4.iVal); // 8字节的整数 //Cstring转char*
char *p = (LPSTR)(LPCTSTR)str0;
int AA = atoi(p); //Cstring转char*
char *p1 = (LPSTR)(LPCTSTR)str3;
int AA1 = atoi(p1); //Cstring转char*
char *p2 = (LPSTR)(LPCTSTR)str4;
int AA2 = atoi(p2); //添加到vector
if (AA == FontColor && AA1 == FontSize && str2 == FontType && AA2 == RangeColor)
{
delete_all.push_back(str1);
} } } for (int i = ; i < delete_all.size(); i++)
{
//方法2
ExcelRange.AttachDispatch(ExcelSheet.get_Range(COleVariant(_T(delete_all[i])), COleVariant(_T(delete_all[i]))), TRUE);//设置单元格区域
ExcelRange.Delete(COleVariant((long)));//设置删除类型1.右侧单元格左移 2.下方单元格上移 3.整行 4.整列 //添加单元格,补充进去
//方法2
ExcelRange.AttachDispatch(ExcelSheet.get_Range(COleVariant(_T(delete_all[i])), COleVariant(_T(delete_all[i]))), TRUE);//设置单元格区域
ExcelRange.Insert(COleVariant((long)), vtMissing);//设置添加类型1.活动单元格右移 2.活动单元格下移 3.整行 4.整列
} } void ExcelApi::CycleRangeSetData(char* CycleName, char* NewName)
{
//获得使用的区域Range(区域)
ExcelRange.AttachDispatch(ExcelSheet.get_UsedRange(), TRUE); //获得使用的行数
long lgUsedRowNum = ;
ExcelRange.AttachDispatch(ExcelRange.get_Rows(), TRUE);
lgUsedRowNum = ExcelRange.get_Count(); //获得使用的列数
long lgUsedColumnNum = ;
ExcelRange.AttachDispatch(ExcelRange.get_Columns(), TRUE);
lgUsedColumnNum = ExcelRange.get_Count(); //遍历整个Excel表格
for (int j = ; j <= lgUsedRowNum; j++)
{
for (int i = ; i <= lgUsedColumnNum; i++)
{
CString str;
str.Format("%c%d", + i - , j);
LPDISPATCH lpDisp = ExcelRange.get_Range(COleVariant(str), COleVariant(str)); CRange range;
range.AttachDispatch(lpDisp); VARIANT vl = range.get_Value2(); CString text;
CString text1 = CycleName;
if (vl.vt == VT_BSTR) //字符串
{
text = vl.bstrVal;
if (text == text1)
{
//得到全部Cells,此时,userRange是cells的集合
range.AttachDispatch(ExcelSheet.get_Cells(), TRUE); //设置表格内容
range.put_Item(COleVariant((long)j), COleVariant((long)i), COleVariant(_T(NewName))); } }
} } } vector<string> ExcelApi::CycleRangeReturnRowColumn(char* CycleName)
{
//创建vector
vector<string> RowColumnAll; //先清空vector
RowColumnAll.clear(); //获得使用的区域Range(区域)
ExcelRange.AttachDispatch(ExcelSheet.get_UsedRange(), TRUE); //获得使用的行数
long lgUsedRowNum = ;
ExcelRange.AttachDispatch(ExcelRange.get_Rows(), TRUE);
lgUsedRowNum = ExcelRange.get_Count(); //获得使用的列数
long lgUsedColumnNum = ;
ExcelRange.AttachDispatch(ExcelRange.get_Columns(), TRUE);
lgUsedColumnNum = ExcelRange.get_Count(); //遍历整个Excel表格
for (int j = ; j <= lgUsedRowNum; j++)
{
for (int i = ; i <= lgUsedColumnNum; i++)
{
CString str;
str.Format("%c%d", + i - , j);
LPDISPATCH lpDisp = ExcelRange.get_Range(COleVariant(str), COleVariant(str)); CRange range;
range.AttachDispatch(lpDisp); VARIANT vl = range.get_Value2(); CString text;
CString text1 = CycleName;
if (vl.vt == VT_BSTR) //字符串
{
text = vl.bstrVal;
if (text == text1)
{
//得到全部Cells,此时,userRange是cells的集合
range.AttachDispatch(ExcelSheet.get_Cells(), TRUE); //得到行和列
//转换
char msg[];
sprintf_s(msg, "%d", j);
string AA = msg; char msg1[];
sprintf_s(msg1, "%d", i);
string BB = msg1; //字符串拼接
string RowColumn = AA + "," + BB; //添加到vector
RowColumnAll.push_back(RowColumn);
}
}
}
} return RowColumnAll;
} void ExcelApi::ShuaValue(const char* CycleName, const char* NewName1, const char* NewName2, const char* NewName3, const char* NewName4, const char* NewName5, const char* NewName6, const char* NewName7, const char* NewName8)
{
//获得使用的区域Range(区域)
ExcelRange.AttachDispatch(ExcelSheet.get_UsedRange(), TRUE); //获得使用的行数
long lgUsedRowNum = ;
ExcelRange.AttachDispatch(ExcelRange.get_Rows(), TRUE);
lgUsedRowNum = ExcelRange.get_Count(); //获得使用的列数
long lgUsedColumnNum = ;
ExcelRange.AttachDispatch(ExcelRange.get_Columns(), TRUE);
lgUsedColumnNum = ExcelRange.get_Count(); //遍历整个Excel表格
for (int j = ; j <= lgUsedRowNum; j++)
{
for (int i = ; i <= lgUsedColumnNum; i++)
{
CString str;
str.Format("%c%d", + i - , j);
LPDISPATCH lpDisp = ExcelRange.get_Range(COleVariant(str), COleVariant(str)); CRange range;
range.AttachDispatch(lpDisp); VARIANT vl = range.get_Value2(); CString text;
CString text1 = CycleName;
if (vl.vt == VT_BSTR) //字符串
{
text = vl.bstrVal;
if (text == text1)
{
if (i == )
{
//得到全部Cells,此时,userRange是cells的集合
range.AttachDispatch(ExcelSheet.get_Cells(), TRUE); //设置表格内容
range.put_Item(COleVariant((long)j), COleVariant((long)i), COleVariant(_T(NewName1)));
range.put_Item(COleVariant((long)j), COleVariant((long)i + ), COleVariant(_T(NewName2)));
range.put_Item(COleVariant((long)j), COleVariant((long)i + ), COleVariant(_T(NewName3)));
range.put_Item(COleVariant((long)j), COleVariant((long)i + ), COleVariant(_T(NewName4)));
range.put_Item(COleVariant((long)j), COleVariant((long)i + ), COleVariant(_T(NewName5)));
range.put_Item(COleVariant((long)j), COleVariant((long)i + ), COleVariant(_T(NewName6)));
//range.put_Item(COleVariant((long)j), COleVariant((long)i + 6), COleVariant(_T(NewName7)));
//range.put_Item(COleVariant((long)j), COleVariant((long)i + 7), COleVariant(_T(NewName8))); //转换
char F[];
sprintf_s(F, "F%d", j); char M[];
sprintf_s(M, "M%d", j); //设置字体颜色
range.AttachDispatch(ExcelSheet.get_Range(COleVariant(_T(F)), COleVariant(_T(M))), TRUE);
ft.AttachDispatch(range.get_Font());
ft.put_Name(COleVariant(_T("宋体")));
ft.put_ColorIndex(COleVariant((long))); //颜色
ft.put_Size(COleVariant((long))); //大小 //设置单元格填充颜色
it.AttachDispatch(range.get_Interior());
// it.put_ColorIndex(_variant_t((long)39));
} } }
} } } void ExcelApi::DeleteSheetRange()
{
//获得使用的区域Range(区域)
ExcelRange.AttachDispatch(ExcelSheet.get_UsedRange(), TRUE); //获得使用的行数
long lgUsedRowNum = ;
ExcelRange.AttachDispatch(ExcelRange.get_Rows(), TRUE);
lgUsedRowNum = ExcelRange.get_Count(); //获得使用的列数
long lgUsedColumnNum = ;
ExcelRange.AttachDispatch(ExcelRange.get_Columns(), TRUE);
lgUsedColumnNum = ExcelRange.get_Count(); char msg[];
sprintf_s(msg, "M%d", lgUsedRowNum); //方法2
ExcelRange.AttachDispatch(ExcelSheet.get_Range(COleVariant(_T("A1")), COleVariant(_T(msg))), TRUE);//设置单元格区域
ExcelRange.Delete(COleVariant((long)));//设置删除类型1.右侧单元格左移 2.下方单元格上移 3.整行 4.整列 } void ExcelApi::SetRangeBorder(int LineType)
{
//获得使用的区域Range(区域)
ExcelRange.AttachDispatch(ExcelSheet.get_UsedRange(), TRUE); //获得使用的行数
long lgUsedRowNum = ;
ExcelRange.AttachDispatch(ExcelRange.get_Rows(), TRUE);
lgUsedRowNum = ExcelRange.get_Count(); //获得使用的列数
long lgUsedColumnNum = ;
ExcelRange.AttachDispatch(ExcelRange.get_Columns(), TRUE);
lgUsedColumnNum = ExcelRange.get_Count(); //画边框线
VARIANT vRange1, vRange2, vRange3, vRange4, vRange5;
VariantInit(&vRange1);
VariantInit(&vRange2);
VariantInit(&vRange3);
VariantInit(&vRange4);
VariantInit(&vRange5);
vRange1.vt = VT_I2;
vRange1.lVal = LineType; // 线的样式:0- no line; 1-solid; 2-big dot;3-small dot;4-dash dot; 5-dash dot dot;
vRange2.vt = VT_I2;
vRange2.lVal = ; // 线的粗细程度;
vRange3.vt = VT_I2;
vRange3.lVal = ; // 1-black;2-white;3-red;4-green;5-blue; 6-yellow; 7-pink;8-dark blue;
vRange4.vt = VT_UI4;
vRange4.uintVal = RGB(, , ); // 我测试后认为,没有实际意义,只有vRange3起作用
vRange5.vt = VT_I2;
vRange5.lVal = ; //遍历整个Excel表格
for (int j = ; j <= lgUsedRowNum; j++)
{
for (int i = ; i <= lgUsedColumnNum; i++)
{
CString str;
str.Format("%c%d", + i - , j);
LPDISPATCH lpDisp = ExcelRange.get_Range(COleVariant(str), COleVariant(str)); CRange range;
range.AttachDispatch(lpDisp); //画边框线
range.BorderAround(vRange1, vRange2.lVal, vRange3.lVal, vRange4, vRange5); } } } void ExcelApi::SetRangeMerge(char* A1, char* B1)
{
ExcelRange.AttachDispatch(ExcelSheet.get_Range(COleVariant(_T(A1)), COleVariant(_T(B1))), TRUE);//设置单元格区域
ExcelRange.Merge(COleVariant((long)));
} void ExcelApi::SetRangeUnMerge(char* A1, char* B1)
{
ExcelRange.AttachDispatch(ExcelSheet.get_Range(COleVariant(_T(A1)), COleVariant(_T(B1))), TRUE);//设置单元格区域
ExcelRange.UnMerge();
} void ExcelApi::ClearContents(char* A1, char* B1)
{
ExcelRange.AttachDispatch(ExcelSheet.get_Range(COleVariant(_T(A1)), COleVariant(_T(B1))), TRUE);//设置单元格区域
ExcelRange.ClearContents();
} void ExcelApi::SetFontHorizontalAlignment(int type)
{
//获得使用的区域Range(区域)
ExcelRange.AttachDispatch(ExcelSheet.get_UsedRange(), TRUE); int num = ;
if (type == )
{
num = -;
}
else if (true)
{
num = -;
}
else if (true)
{
num = -;
}
//设置对齐方式
//水平对齐:默认 1 居中 -4108, 左= -4131,右=-4152
//垂直对齐:默认 2 居中 -4108, 左= -4160,右=-4107
//ExcelRange.put_VerticalAlignment(COleVariant((long)-4108));
ExcelRange.put_HorizontalAlignment(COleVariant((long)num)); } void ExcelApi::SetRangeSetting()
{
//获得使用的区域Range(区域)
ExcelRange.AttachDispatch(ExcelSheet.get_UsedRange(), TRUE); //设置单元格格式为文本
ExcelRange.put_NumberFormatLocal(COleVariant("@")); } void ExcelApi::AddPicture(const char* Filename, long LinkToFile, long SaveWithDocument, float Left, float Top, float Width, float Height)
{
//获得使用的区域
shp.AttachDispatch(ExcelSheet.get_Shapes()); //插入图片
shp.AddPicture(Filename,LinkToFile,SaveWithDocument,Left,Top,Width,Height);
}

stdafx.h

 // stdafx.h : 标准系统包含文件的包含文件,
// 或是经常使用但不常更改的
// 特定于项目的包含文件 #pragma once #ifndef VC_EXTRALEAN
#define VC_EXTRALEAN // 从 Windows 头中排除极少使用的资料
#endif //#include "targetver.h" #define _ATL_CSTRING_EXPLICIT_CONSTRUCTORS // 某些 CString 构造函数将是显式的 // 关闭 MFC 对某些常见但经常可放心忽略的警告消息的隐藏
#define _AFX_ALL_WARNINGS #include <afxwin.h> // MFC 核心组件和标准组件
#include <afxext.h> // MFC 扩展 #include <afxdisp.h> // MFC 自动化类 #ifndef _AFX_NO_OLE_SUPPORT
#include <afxdtctl.h> // MFC 对 Internet Explorer 4 公共控件的支持
#endif
#ifndef _AFX_NO_AFXCMN_SUPPORT
#include <afxcmn.h> // MFC 对 Windows 公共控件的支持
#endif // _AFX_NO_AFXCMN_SUPPORT #include <afxcontrolbars.h> // 功能区和控件条的 MFC 支持 #ifdef _UNICODE
#if defined _M_IX86
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\"")
#elif defined _M_X64
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='amd64' publicKeyToken='6595b64144ccf1df' language='*'\"")
#else
#pragma comment(linker,"/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")
#endif
#endif

stdafx.cpp

 // stdafx.cpp : 只包括标准包含文件的源文件
// MFCApplication1.pch 将作为预编译头
// stdafx.obj 将包含预编译类型信息 #include "stdafx.h"

调用

ExcelApi *SetExcelApi = new ExcelApi();

EXCEL2016 OLE/COM开发-常用功能封装代码的更多相关文章

  1. iOS项目开发常用功能静态库

    YHDeveloperTools iOS项目开发常用功能静态库 查看源码 功能方法: 1.字符检查 [NSString checkStringWithType:Email andTargetStrin ...

  2. js实现第一次打开网页弹出指定窗口(常用功能封装很好用)

    js实现第一次打开网页弹出指定窗口(常用功能封装很好用) 一.总结 1.常用功能封装:之前封装的cookie的操作函数非常好用,我自己也可以这么搞 二.js实现第一次打开网页弹出指定窗口 练习1:第一 ...

  3. c++常用功能封装

    C++文件读写的封装 在C++开发中,文件读写是很常用的功能,出于代码复用的考虑,将它们进行封装. 其中,默认读写的文件是文本文件,并且需要按行处理.调用者只需要关注读取出来的每一行的处理方式.写文件 ...

  4. WebService开发常用功能详解

    一.WebService中常用的属性(Attributes)1. Web Service(Web服务)提供以下三个属性.    Namespace:此属性的值包含 XML Web Service的默认 ...

  5. Android App开发常用专题开源代码

    Android App开发中用到过的专题类开源代码: 项目的需求多了,不知不觉成了Github摘抄员,感谢分享精神,节省了很多弯路和时间.不过想要实现指定效果,还是要看懂作者的思路才好下手改造. 主题 ...

  6. cocos2D-X LUA 常用功能封装和工作经验的一些解决方案

    --[[ Packaging_KernelEngine.h 文件说明:所有对象在建立时位置是优先的,传入位置参数必须cc.p(X,Y) CurObj:表示要传入当前的对象 将3.10 lua api ...

  7. 微信小程序开发常用功能

    获取用户信息 调用 wx.getUserProfile 方法获取用户基本信息.页面产生点击事件(例如 button 上 bindtap 的回调中)后才可调用,每次请求都会弹出授权窗口,用户同意后返回 ...

  8. 软件开发工具(第11章:Eclipse CDT开发常用功能)

    一.自定义编辑器 C/C++首选项设置(重点.记忆.应用) 单击菜单栏中的窗口(Window)菜单, 选择首选项(Preferences)选项,在 弹出的对话框左侧部分,展开C/C++树 形菜单. 外 ...

  9. echarts常用功能封装|抽象为mixin

    目前已解锁以下功能: [x] 初始化echarts(initChart) [x] 获取echarts参数配置(getOption) [x] 生成echarts图表(setOption) [x] 监听r ...

随机推荐

  1. ajax中json格式数据如何朝后端发送数据

  2. sql-主键、外键、索引

    SQL的主键和外键的作用: 外键取值规则:空值或参照的主键值. (1)插入非空值时,如果主键表中没有这个值,则不能插入. (2)更新时,不能改为主键表中没有的值. (3)删除主键表记录时,你可以在建外 ...

  3. bzoj 2013

    http://www.lydsy.com/JudgeOnline/problem.php?id=2013 最初看这个题的时候,以为神题不可做,然后去找yzjc..然后做法过于简单了(' '       ...

  4. hdu 4826 Labyrinth(简单dp)

    Description 度度熊是一只喜欢探险的熊,一次偶然落进了一个m*n矩阵的迷宫,该迷宫只能从矩阵左上角第一个方格开始走,只有走到右上角的第一个格子才算走出迷宫,每一次只能走一格,且只能向上向下向 ...

  5. python 网络编程:socket

    在学习socket之前,我们先复习下相关的网络知识. OSI七层模型:应用层,表示层,会话层,传输层,网络层,数据链路层,物理层.OSI七层模型是由国际标准化组织ISO定义的网络的基本结构,不仅包括一 ...

  6. mysql授权、删除用户和角色权限

    备份权限 GRANT USAGE ON *.* TO 'backup'@'172.16.0.157' IDENTIFIED BY PASSWORD '*38B4F16EADB1601E713D9F03 ...

  7. flask中的目录解析

    首先我们看一下博客blog的封面,flask和django都属于web框架.不过flask属于轻量级web框架,功能的实现是通过扩展实现的,extension.py 中存放各个对象,具体的功能通过对象 ...

  8. (转)Maven中的库(repository)详解 ---repository配置查找构件(如.jar)的远程库

    转:https://blog.csdn.net/taiyangdao/article/details/52287856 Maven中的库(repository)是构件(artifact)的集合.构件以 ...

  9. Dubbo入门到精通学习笔记(二十):MyCat在MySQL主从复制的基础上实现读写分离、MyCat 集群部署(HAProxy + MyCat)、MyCat 高可用负载均衡集群Keepalived

    文章目录 MyCat在MySQL主从复制的基础上实现读写分离 一.环境 二.依赖课程 三.MyCat 介绍 ( MyCat 官网:http://mycat.org.cn/ ) 四.MyCat 的安装 ...

  10. PAT甲级——A1140 LookAndSaySequence【20】

    Look-and-say sequence is a sequence of integers as the following: D, D1, D111, D113, D11231, D112213 ...