// MyExcel.h: interface for the CMyExcel class.
//
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_MYEXCEL_H__5E68A78D_06D3_43B7_BC44_B557B4C15F4C__INCLUDED_)
#define AFX_MYEXCEL_H__5E68A78D_06D3_43B7_BC44_B557B4C15F4C__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#include "excel.h"
#include <comdef.h>
//下劃線種類
#define xlUnderlineStyleDouble -4119
#define xlUnderlineStyleDoubleAccounting 5
#define xlUnderlineStyleNone -4142
#define xlUnderlineStyleSingle 2
#define xlUnderlineStyleSingleAccounting 4
//邊框方位
#define xlDiagonalDown 5
#define xlDiagonalUp 6
#define xlEdgeBottom 9
#define xlEdgeLeft 7
#define xlEdgeRight 10
#define xlEdgeTop 8
#define xlInsideHorizontal 12
#define xlInsideVertical 11
//邊框劃線類型
#define xlContinuous 1
#define xlDash -4115
#define xlDashDot 4
#define xlDashDotDot 5
#define xlDot -4118
#define xlDouble -4119
#define xlLineStyleNone -4142
#define xlNone -4142
#define xlSlantDashDot 13
//字體水平對齊方式
#define xlGeneral 1
#define xlCenter -4108
#define xlLeft -4131
#define xlRight -4152
#define xlFill 5
#define xlJustify -4130
//字體垂直對齊方式
#define xlTop -4160
#define xlBottom -4107
//邊框劃線的粗細
#define xlHairline 1
#define xlMedium -4138
#define xlThick 4
#define xlThin 2
//背景圖案的類型
#define xlSolid 1
#define xlGray8 18
#define xlGray75 -4126
#define xlGray50 -4125
#define xlGray25 -4124
#define xlGray16 17
#define xlHorizontal -4128
#define xlVertical -4166
#define xlDown -4121
#define xlUp -4162
#define xlChecker 9
#define xlSemiGray75 10
#define xlLightHorizontal 11
#define xlLightVertical 12
#define xlLightDown 13
#define xlLightUp 14
#define xlGrid 15
#define xlCrissCross 16
//邊框設置參數類
class MyBorder
{
public:
//線條形狀
short LineStyle;
//粗線
short Weight;
//顏色
long Color;
//構造函數
MyBorder();
};
//背景設置參數類
class MyBackGroundStyle
{
public:
//背景顏色
long Color;
//背景圖案
short Pattern;
//背景圖案顏色
long PatternColor;
//透明與否
BOOL transparent;
//構造函數
MyBackGroundStyle();
};
class MyFont
{
public:
MyFont();
//名字
CString Name;
long size;
long ForeColor;
BOOL Bold;
//斜體
BOOL Italic;
//中間線
BOOL StrikeThrough;
BOOL Shadow;
//下標
BOOL Subscript;
//上標
BOOL Superscript;
short UnderLine;
};
class MyAlignment
{
public:
short HorizontalAlignment;
short VerticalAlignment;
MyAlignment();
};
class MyNumberFormat
{
public:
MyNumberFormat();
//設置參數
CString strValue;
CString GetTextSetup();
CString GetNumberSetup(BOOL bSeparator,int iNumDecimal);
//bInChinese:TRUE-"¥",FALSE-"$"
CString GetMoneySetup(BOOL bInChinese,int iNumDecimal);
CString GetDateSetup(BOOL bInChinese);
CString GetTimeSetup(BOOL bInChinese);
CString GetGeneralSetup();
CString GetSpecialNumberSetup(BOOL bInChinese);
CString GetPercentNumberSetup(int iNumDecimal);
CString GetFractionNumberSetup(int DownSum,int DownNum);
CString GetScientificNumberSetup(int iNumDecimal);
CString GetPostalcodeSetup(int Num);
CString GetDateTimeSetup(BOOL bInChinese);
};
class CMyExcel
{
public:
CString GetAllWorkSheetName();
_Application MyApp;
_Workbook MyBook;
_Worksheet MySheet;
Workbooks MyBooks;
Worksheets MySheets;
Range MyRange;
CString strFilePath;
CMyExcel();
virtual ~CMyExcel();
BOOL Open();
BOOL Open(CString strFile);
BOOL OpenSheet(CString strSheet);
BOOL SetItemText(long Row,long Col,CString strText);
CString GetItemText(long Row,long Col);
void Exit();
void SetVisible(BOOL bVisible);
BOOL IsFileExist(CString strFn,BOOL bDir);
void Save();
void SaveAs(CString strPath);
void AddSheet(CString strSheet);
void DeleteSheet123();
void GetRange(CString strBegin,CString strEnd);
void AddComment(long Row,long Col,CString strText);
void AutoColFit();
void AutoRowFit();
void SetWrapText(BOOL bTrue);
void SetFont(MyFont font);
void GetAllRange();
void SetMergeCells(BOOL bTrue);
void SetBackGroundStyle(MyBackGroundStyle BackStyle);
void SetBorderLine(short position,MyBorder Border);
void SetAlignment(MyAlignment XMyAlignment);
long GetRows();
long GetCols();
void SetNumberFormat(MyNumberFormat XNumberFormat);
void SetColumnWidth(int iWidth);
void SetRowHeight(int iHeight);
void PrintOut(short numCopy);
void PrePrintOut(BOOL bEnable);
void InsertPicture(CString strFilePath);
void SetBackPicture(CString strFilePath);
long Find(CString str);
void SetSheetVisible(BOOL bVisible);
void AutoFilter();
void DeleteRow(long line);
};
#endif // !defined(AFX_MYEXCEL_H__5E68A78D_06D3_43B7_BC44_B557B4C15F4C__INCLUDED_)
// MyExcel.cpp: implementation of the CMyExcel class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "MyExcel.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CMyExcel::CMyExcel()
{
strFilePath = _T("");
}
CMyExcel::~CMyExcel()
{
COleVariant covFalse((short)FALSE);
COleVariant covOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR);
MyRange.ReleaseDispatch();
MySheet.ReleaseDispatch();
MySheets.ReleaseDispatch();
MyBook.Close(covFalse,_variant_t(strFilePath),covOptional);
MyBook.ReleaseDispatch();
MyBooks.Close();
MyBooks.ReleaseDispatch();
MyApp.Quit();
MyApp.ReleaseDispatch();
CoUninitialize();
}
BOOL CMyExcel::Open()
{
LPDISPATCH lpDisp = NULL;
COleVariant covOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR);
CoInitialize(NULL);
if(!MyApp.CreateDispatch("Excel.Application",NULL))
{
AfxMessageBox(_T("EXCEL 初始化時出錯!"),MB_OK | MB_ICONERROR);
return false;
}
MyBooks.AttachDispatch(MyApp.GetWorkbooks(),TRUE);
lpDisp = MyBooks.Add(covOptional);
MyBook.AttachDispatch(lpDisp,TRUE);
lpDisp = MyBook.GetWorksheets();
MySheets.AttachDispatch(lpDisp,TRUE);
return TRUE;
}
BOOL CMyExcel::Open(CString strFile)
{
LPDISPATCH lpDisp = NULL;
CoInitialize(NULL);
if(!MyApp.CreateDispatch("Excel.Application",NULL))
{
AfxMessageBox(_T("EXCEL 初始化時出錯!"),MB_OK | MB_ICONERROR);
return false;
}
MyBooks.AttachDispatch(MyApp.GetWorkbooks(),TRUE);
lpDisp = MyBooks.Open(strFile,vtMissing,vtMissing,vtMissing,
vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing);
MyBook.AttachDispatch(lpDisp,TRUE);
lpDisp = MyBook.GetWorksheets();
MySheets.AttachDispatch(lpDisp,TRUE);
strFilePath = strFile;
return TRUE;
}
BOOL CMyExcel::OpenSheet(CString strSheet)
{
LPDISPATCH lpDisp = NULL;
long length;
length = MySheets.GetCount();
for(long i = 1;i <= length;i++)
{
lpDisp = MySheets.GetItem(_variant_t((long)i));
MySheet.AttachDispatch(lpDisp,TRUE);
if(MySheet.GetName() == strSheet)
{
lpDisp = MySheet.GetCells();
MyRange.AttachDispatch(lpDisp,TRUE);
return TRUE;
}
}
return FALSE;
}
long CMyExcel::GetRows()
{
long lRowsNum;
//Range range = MyRange.GetEntireRow();
Range range,usedRange;
usedRange.AttachDispatch(MySheet.GetUsedRange());
range.AttachDispatch(usedRange.GetRows());
lRowsNum = range.GetCount();
//lRowsNum = range.GetCount();
range.ReleaseDispatch();
usedRange.ReleaseDispatch();
return lRowsNum;
}
long CMyExcel::GetCols()
{
long lColNum;
Range range,usedRange;
usedRange.AttachDispatch(MySheet.GetUsedRange());
range.AttachDispatch(usedRange.GetColumns());
lColNum = range.GetCount();
range.ReleaseDispatch();
usedRange.ReleaseDispatch();
return lColNum;
}
CString CMyExcel::GetItemText(long Row,long Col)
{
CString strValue = _T("");
/*long lRow = 0,lCol = 0;
lRow = GetRows();
lCol = GetCols();
if(Row > lRow || Col > lCol)
{
CString strText;
strText.Format("由於(%d,%d)已經超過了(%d,%d)的範圍,所以返回空值",Row,Col,lRow,lCol);
AfxMessageBox(_T(strText),MB_OK | MB_ICONERROR);
return strValue;
}*/
Range range;
//range.AttachDispatch(MyRange.GetItem(_variant_t(Row),_variant_t(Col)).pdispVal);
range.AttachDispatch(MyRange.GetItem(COleVariant((long)Row),COleVariant((long)Col)).pdispVal);
//_variant_t vtVal = range.GetValue2();
COleVariant vtVal = range.GetText();
//COleVariant vtVal = range.GetValue2();
/*if(vtVal.vt == VT_BSTR)
{
vtVal.ChangeType(VT_BSTR);
strValue = vtVal.bstrVal;
}*/
if(vtVal.vt == VT_EMPTY)
{
range.ReleaseDispatch();
return strValue;
}
vtVal.ChangeType(VT_BSTR);
strValue = vtVal.bstrVal;
range.ReleaseDispatch();
return strValue;
}
BOOL CMyExcel::SetItemText(long Row,long Col,CString strText)
{
/*long lRow = 0,lCol = 0;
lRow = GetRows();
lCol = GetCols();
if(Row > lRow || Col > lCol)
{
CString strText;
strText.Format("由於(%d,%d)已經超過了(%d,%d)的範圍,所以返回空值",Row,Col,lRow,lCol);
AfxMessageBox(_T(strText),MB_OK | MB_ICONERROR);
return FALSE;
}*/
MyRange.SetItem(_variant_t(Row),_variant_t(Col),_variant_t(strText));
return TRUE;
}
void CMyExcel::AutoFilter()
{
Range range;
range = MySheet.GetRange(_variant_t("A1"),_variant_t("G1"));
//range.Select();
range.AutoFit();
MySheet.SetEnableAutoFilter(TRUE);
//range.AutoFilter(_variant_t((long)1),_variant_t())
}
void CMyExcel::Save()
{
MyBook.Save();
}
void CMyExcel::SaveAs(CString strPath)
{
if(IsFileExist(strPath,FALSE) == TRUE)
{
DeleteFile(strPath);
}
MyBook.SaveAs(_variant_t(strPath),vtMissing,vtMissing,vtMissing,vtMissing,vtMissing
,0,vtMissing,vtMissing,vtMissing,vtMissing,vtMissing);
strFilePath = strPath;
}
BOOL CMyExcel::IsFileExist(CString strFn,BOOL bDir)
{
HANDLE handle;
LPWIN32_FIND_DATA lpFindData = new WIN32_FIND_DATA;
BOOL bFind = false;
if(lpFindData)
{
handle = FindFirstFile(strFn,lpFindData);
bFind = (handle != INVALID_HANDLE_VALUE);
if(bFind)
{
if(bDir)
{
bFind = (lpFindData->dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) != NULL;
}
FindClose(handle);
}
delete lpFindData;
}
return bFind;
}
void CMyExcel::AddSheet(CString strSheet)
{
LPDISPATCH lpDisp = NULL;
lpDisp = MySheets.Add(vtMissing,_variant_t(MySheets.GetItem(COleVariant(MySheets.GetCount()))),vtMissing,vtMissing);
MySheet.AttachDispatch(lpDisp,TRUE);
MySheet.SetName(strSheet);
lpDisp = MySheet.GetCells();
MyRange.AttachDispatch(lpDisp,TRUE);
}
void CMyExcel::DeleteSheet123()
{
_Worksheet sheet;
sheet = MySheets.GetItem(COleVariant("Sheet1"));
sheet.Activate();
sheet.Delete();
sheet = MySheets.GetItem(COleVariant("Sheet2"));
sheet.Activate();
sheet.Delete();
sheet = MySheets.GetItem(COleVariant("Sheet3"));
sheet.Activate();
sheet.Delete();
}
void CMyExcel::GetRange(CString strBegin,CString strEnd)
{
MyRange = MySheet.GetRange(_variant_t(strBegin),_variant_t(strEnd));
}
void CMyExcel::AddComment(long Row,long Col,CString strText)
{
Range range;
range.AttachDispatch(MyRange.GetItem(_variant_t((long)Row),_variant_t((long)Col)).pdispVal,TRUE);
range.AddComment(_variant_t(strText));
range.ReleaseDispatch();
}
void CMyExcel::AutoColFit()
{
Range range = MyRange.GetEntireColumn();
range.AutoFit();
range.ReleaseDispatch();
}
void CMyExcel::AutoRowFit()
{
Range range = MyRange.GetEntireRow();
range.AutoFit();
range.ReleaseDispatch();
}
void CMyExcel::SetWrapText(BOOL bTrue)
{
MyRange.SetWrapText(_variant_t((short)bTrue));
}
void CMyExcel::SetVisible(BOOL bVisible)
{
/*if(bVisible == TRUE)
{
if(strFilePath != "")
{
if(IsFileExist(strFilePath,false))
{
ShellExecute(NULL,"open",strFilePath,NULL,NULL,SW_SHOW);
}
else
{
CString strName;
strName = "路徑:" + strFilePath + "錯誤,不能打開顯示!";
AfxMessageBox(strName,MB_OK | MB_ICONERROR);
}
}
else
{
AfxMessageBox("請先保存文件後,方可打開!",MB_OK | MB_ICONINFORMATION);
}
}*/
MyApp.SetVisible(bVisible);
}
void CMyExcel::DeleteRow(long line)
{
Range range;
CString strCell;
strCell.Format(_T("A%d"),line);
range.AttachDispatch(MySheet.GetRange(COleVariant(strCell),COleVariant(strCell)));
range.AttachDispatch(range.GetEntireRow());
range.Delete(COleVariant((long)xlUp));
range.ReleaseDispatch();
}
void CMyExcel::SetNumberFormat(MyNumberFormat XNumberFormat)
{
MyRange.SetNumberFormat(_variant_t(XNumberFormat.strValue));
}
void CMyExcel::Exit()
{
COleVariant covFalse((short)FALSE);
COleVariant covOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR);
MyRange.ReleaseDispatch();
MySheet.ReleaseDispatch();
MySheets.ReleaseDispatch();
MyBook.Close(covFalse,_variant_t(strFilePath),covOptional);
MyBook.ReleaseDispatch();
MyBooks.Close();
MyBooks.ReleaseDispatch();
MyApp.Quit();
MyApp.ReleaseDispatch();
CoUninitialize();
}
void CMyExcel::SetFont(MyFont font)
{
Font f = MyRange.GetFont();
f.SetName(_variant_t(font.Name));
//f.SetShadow((_variant_t)(short)font.Shadow);
f.SetSize((_variant_t)(short)font.size);
f.SetUnderline((_variant_t)(short)font.UnderLine);
f.SetBold((_variant_t)(short)font.Bold);
f.SetColor((_variant_t)(long)font.ForeColor);
f.SetItalic((_variant_t)(short)font.Italic);
f.SetStrikethrough((_variant_t)(short)font.StrikeThrough);
f.SetSubscript((_variant_t)(short)font.Subscript);
f.SetSuperscript((_variant_t)(short)font.Subscript);
f.ReleaseDispatch();
}
void CMyExcel::PrePrintOut(BOOL bEnable)
{
COleVariant covOptional((short)bEnable);
MySheet.PrintPreview(covOptional);
}
void CMyExcel::PrintOut(short numCopy)
{
COleVariant covTrue((short)TRUE);
COleVariant covFalse((short)FALSE);
COleVariant covOptional((long)DISP_E_PARAMNOTFOUND,VT_ERROR);
MySheet.PrintOut(vtMissing,vtMissing,_variant_t((short)numCopy),vtMissing,vtMissing,vtMissing,covTrue,vtMissing,vtMissing);
}
MyFont::MyFont()
{
Name = "Arial";
size = 10;
ForeColor = RGB(0,0,0);
Bold = FALSE;
Italic = FALSE;
StrikeThrough = FALSE;
Shadow = FALSE;
Subscript = FALSE;
Superscript = FALSE;
UnderLine = xlUnderlineStyleNone;
}
MyBackGroundStyle::MyBackGroundStyle()
{
Color = RGB(255,255,255);
Pattern = xlSolid;
PatternColor = RGB(255,0,0);
transparent = FALSE;
}
MyAlignment::MyAlignment()
{
HorizontalAlignment = xlGeneral;
VerticalAlignment = xlCenter;
}
MyNumberFormat::MyNumberFormat()
{
strValue = "G/通用格式";
}
CString MyNumberFormat::GetTextSetup()
{
strValue = "@";
return strValue;
}
CString MyNumberFormat::GetGeneralSetup()
{
strValue = "G/通用格式";
return strValue;
}
CString MyNumberFormat::GetNumberSetup(BOOL bSeparator,int iNumDecimal)
{
CString str = "0";
return str;
}
CString MyNumberFormat::GetDateSetup(BOOL bInChinese)
{
if(bInChinese == TRUE)
{
strValue = "yyyy\"年\"m\"月\"d\"日\";@";
}
else
{
strValue = "yyyy-m-d;@";
}
return strValue;
}
CString MyNumberFormat::GetDateTimeSetup(BOOL bInChinese)
{
if(bInChinese == TRUE)
{
strValue = "yyyy\"年\"m\"月\"d\"日\" h\"時\"mm\"分\"ss\"秒\";@";
}
else
{
strValue = "yyyy-m-d h:mm:ss;@";
}
return strValue;
}
CString MyNumberFormat::GetSpecialNumberSetup(BOOL bInChinese)
{
if(bInChinese == TRUE)
{
strValue = "[DBNum1][$-804]G/通用格式";
}
else
{
strValue = "[DBNum2][$-804]G/通用格式";
}
return strValue;
}
CString MyNumberFormat::GetFractionNumberSetup(int DownSum,int DownNum)
{
CString str = "0";
return str;
}
CString MyNumberFormat::GetMoneySetup(BOOL bInChinese,int iNumDecimal)
{
CString str = "0";
return str;
}
CString MyNumberFormat::GetScientificNumberSetup(int iNumDecimal)
{
CString str = "0";
return str;
}
CString MyNumberFormat::GetPercentNumberSetup(int iNumDecimal)
{
CString str = "0";
return str;
}
CString MyNumberFormat::GetTimeSetup(BOOL bInChinese)
{
CString str = "0";
return str;
}
CString MyNumberFormat::GetPostalcodeSetup(int Num)
{
CString str = "0";
return str;
}
void CMyExcel::SetAlignment(MyAlignment XMyAlignment)
{
MyRange.SetHorizontalAlignment(_variant_t(XMyAlignment.HorizontalAlignment));
MyRange.SetVerticalAlignment(_variant_t(XMyAlignment.VerticalAlignment));
}
void CMyExcel::SetSheetVisible(BOOL bVisible)
{
if(bVisible == TRUE)
{
MySheet.Activate();
}
}
CString CMyExcel::GetAllWorkSheetName()
{
LPDISPATCH lpDisp = NULL;
long length;
CString strName;
length = MySheets.GetCount();
for(long i = 1;i <= length;i++)
{
lpDisp = MySheets.GetItem(_variant_t((long)i));
MySheet.AttachDispatch(lpDisp,TRUE);
strName = strName + MySheet.GetName() + "\t";
}
return strName;
}
商店管理系統源代碼(五)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.