// MyCell - version 1.1
// Written by Yanxueming <yanxm2003@hotmail.com>
// Copyright (C) 2006-2007
// All rights reserved.
//
// The code and information is provided "as-is" without
// warranty of any kind, either expressed or implied.
//Yanxm 2008��3��12�� 21:51:13
#pragma once
#include "../include/Workbook.h"
using namespace mycell;
class CoWorksheet: public CComObjectRootEx<CComSingleThreadModel>
,public IWorksheet
{
Worksheet* pWorksheet_;
public:
CoWorksheet():pWorksheet_(NULL)
{
}
void Set(Worksheet* pws)
{
pWorksheet_=pws;
}
BEGIN_COM_MAP(CoWorksheet)
COM_INTERFACE_ENTRY(IWorksheet)
END_COM_MAP()
public:
STDMETHOD(GetName)(BSTR* pval)
{
_ASSERT(NULL==*pval);
if(pWorksheet_)
*pval=CComBSTR(pWorksheet_->GetName()).Detach();
return *pval?S_OK:S_FALSE;
}
STDMETHOD(Merge)(int minR,int minC,int maxR,int maxC)
{
pWorksheet_->Merge(minR,minC,maxR,maxC);
return S_OK;
}
STDMETHOD(UnMerge)(int minR,int minC,int maxR,int maxC)
{
pWorksheet_->Unmerge(minR,minC,maxR,maxC);
return S_OK;
}
STDMETHOD(SetRows)(int rows)
{
pWorksheet_->put_rows(rows);
return S_OK;
}
STDMETHOD(SetCols)(int cols)
{
if(pWorksheet_)
pWorksheet_->put_cols(cols);
return S_OK;
}
STDMETHOD(GetRows)(int* prows)
{
if(pWorksheet_)
*prows=pWorksheet_->get_RowHeader().get_rows();
else
*prows=0;
return S_OK;
}
STDMETHOD(GetCols)(int* pcols)
{
if(pWorksheet_)
*pcols=pWorksheet_->get_ColHeader().get_cols();
else
*pcols=0;
return S_OK;
}
STDMETHOD(SetColLabel)(int col,BSTR bstrLabel)
{
pWorksheet_->get_ColHeader().put_ColLabel(col,bstrLabel?CString(bstrLabel):_T(""));
return S_OK;
}
STDMETHOD(ShowSetupDialog)()
{
pWorksheet_->ShowSetupDialog(pWorksheet_->m_hWnd);
return S_OK;
}
STDMETHOD(DisplayGridlines)(VARIANT_BOOL bDisplay)
{
pWorksheet_->put_ShowGrid(bDisplay);
return S_OK;
}
STDMETHOD(GetDisplayGridlines)(VARIANT_BOOL* pval)
{
*pval=pWorksheet_->get_ShowGrid()?VARIANT_TRUE:VARIANT_FALSE;
return S_OK;
}
STDMETHOD(Redraw)()
{
pWorksheet_->RedrawWindow();
return S_OK;
}
STDMETHOD(SetDefaultCellType)(ECellType ect)
{
pWorksheet_->SetTableDefCellType(ect);
return S_OK;
}
STDMETHOD(SetColType)(int col,ECellType cellType)
{
pWorksheet_->get_ColHeader().put_ColType(col,cellType);
return S_OK;
}
STDMETHOD(SetRowType)(int row,ECellType cellType)
{
pWorksheet_->get_RowHeader().put_RowType(row,cellType);
return S_OK;
}
STDMETHOD(SetCellType)(Cell cell,ECellType cellType)
{
pWorksheet_->SetCellType(cell,cellType);
return S_OK;
}
};
CComPtr<IWorksheet> CreateWorksheet(Worksheet* pws)
{
CComObject<CoWorksheet>* p;
CComObject<CoWorksheet>::CreateInstance(&p);
p->Set(pws);
CComPtr<IWorksheet> pWorksheet;
p->QueryInterface(IID_IUnknown,(void**)&pWorksheet);
return pWorksheet;
}
class CoWorkbook :
public CComObjectRootEx<CComSingleThreadModel>,
public IWorkbook
{
Workbook wb_;
public:
BEGIN_COM_MAP(CoWorkbook)
COM_INTERFACE_ENTRY(IWorkbook)
END_COM_MAP()
STDMETHOD(Create)(HWND hWndParent,RECT rc,UINT dwStyle,UINT dwExStyle)
{
wb_.Create(hWndParent,rc,NULL,dwStyle,dwExStyle);
return S_OK;
}
STDMETHOD(GetHWnd)(HWND* phWnd)
{
*phWnd=wb_.m_hWnd;
return S_OK;
}
STDMETHOD(SetScrollBarVisible)(VARIANT_BOOL bHScrollbarVis,VARIANT_BOOL bVScrollbarVis)
{
wb_.SetShowScrollBars(bHScrollbarVis,bVScrollbarVis);
return S_OK;
}
STDMETHOD(RegisterSymbol)(ECellType cellType,ICellSymbol* pSymbol,ICellSymbol** ppOld)
{
CComPtr<ICellSymbol> pCS=wb_.RegisterSymbol(cellType,pSymbol);
if(*ppOld)
pCS.CopyTo(ppOld);
return pCS?S_OK:S_FALSE;
//wndSheet_.gridRender_.RegisterSymbol(cellType,pSymbol);
}
STDMETHOD(GetActiveSheet)(IWorksheet** ppval)
{
Worksheet* pws=wb_.Worksheet_GetActiveSheet();
CComPtr<IWorksheet> pWorksheet=CreateWorksheet(pws);
return pWorksheet.CopyTo(ppval);
}
STDMETHOD(UpdateScreen)(VARIANT_BOOL bval)
{
wb_.EnableDrawing(bval);
//bval?bits_|=B_UpdateScreen:bits_&=~B_UpdateScreen;
return S_OK;
}
STDMETHOD(SetSheetName)(UINT nSheet,BSTR bstrName)
{
return wb_.Worksheet_SetSheetName(nSheet,CString(bstrName));
}
STDMETHOD(FindSheetByName)(BSTR bstrName,int* pval)
{
*pval=wb_.Worksheet_FindPosByName(CString(bstrName));
return S_OK;
}
STDMETHOD(GetSheet)(UINT nSheet,IWorksheet** ppval)
{
CComPtr<IWorksheet> pWS;
CreateWorksheet(wb_.Worksheet_GetSheet(nSheet));
return pWS.CopyTo(ppval);
}
STDMETHOD(ImportFromXml)(BSTR bstrFileName,BSTR* pOutFileName)
{
TCHAR buf[MAX_PATH]={0};
HRESULT hr=wb_.ImportFromXml(EXT_EXCEL,bstrFileName?CString(bstrFileName):NULL,buf);
if FAILED(hr)
return hr;
if(pOutFileName && buf[0])
*pOutFileName=CComBSTR(buf).Detach();
return hr;
}
STDMETHOD(ExportToXml)(BSTR bstrFileName,BSTR* pOutFileName)
{
TCHAR buf[MAX_PATH];
HRESULT hr=wb_.ExportToXml(EXT_EXCEL,bstrFileName?CString(bstrFileName):NULL,buf);
if FAILED(hr)
return hr;
if(pOutFileName)
*pOutFileName=CComBSTR(buf).Detach();
return hr;
}
};