class LboxExcel

  コンストラクタ



Excel は非常に複雑なので、汎用性を持たせるより限定した仕様で扱ったほうが良いです。ここで使用できるのは、一つのアプリケーション内で常に一つのオブジェクトのみ(ブックも一つのみ)です。その為、アプリケーション作成者はスマートポインタを意識する必要がありません

このクラスを使用する場合は、アプリケーションの開始処理に CoInitialize( NULL ) を実行し、
アプリケーションの終了処理に CoUninitialize( ) を実行して下さい

  
static _ApplicationPtr pXL = NULL;
static WorkbooksPtr pBooks = NULL;
static _WorkbookPtr pBook = NULL;
static WorksheetsPtr pSheets = NULL;
static _WorksheetPtr pSheet = NULL;
static RangePtr pCells = NULL;
static BordersPtr pBorders = NULL;
static BorderPtr pBorder = NULL;
LboxExcel::LboxExcel()
{
	bError = false;

	try {

		if ( pXL == NULL ) {
			pXL.CreateInstance(L"Excel.Application");
			pXL->Visible = false;
			pXL->DisplayAlerts = false;
		}

	}
	catch (_com_error &e)
	{
		ComError.operator = ( (char *)(e.ErrorMessage()) );
		bError = true;
	}
}

LboxExcel::~LboxExcel()
{
	try {

		if ( pBook != NULL ) {
			pBook->Saved = true;
			pBook->Close();
			pBook.Release();
			pBook = NULL;
		}

		if ( pXL != NULL ) {
			pXL->Quit();
			pXL.Release();
			pXL = NULL;
		}

	}
	catch (_com_error &e)
	{
	}
}
  



  Open

  
BOOL Open( LboxString *LString );
BOOL Open( LPTSTR lpBook );
  

処理したい Excel のパスを渡します




  Quit

  
BOOL Quit( void );
  

ブックを閉じます ( Open 処理でカレントのブックを閉じるので通常使用する必要はありませんが、明示したい時に使用します)
行なっている処理は Close ですが、事実上ほとんどの場合ブックを閉じるという事は「処理の終了」なので Quit としています。



  Visible

  
void Visible( BOOL bFlg );
  

Excel を表示したい時に使用します。(デバッグ中は必要です)



  保存

  
BOOL SaveCopy( LboxString *LString );
BOOL SaveCopy( LPTSTR lpBook );
BOOL Save( LboxString *LString );
BOOL Save( LPTSTR lpBook );
BOOL Save( void );
  

引数が無い Save は上書き保存です。引数のある Save は、SaveAs を使用して 名前を付けて保存です。
SaveCopy は SaveCopyAs です。



  シートの追加

  
BOOL AddSheetLast( LboxString *LString );
BOOL AddSheetLast( LPTSTR lpSheet );
BOOL AddSheetFirst( LboxString *LString );
BOOL AddSheetFirst( LPTSTR lpSheet );
  

最初か最後にシートを指定した名前で追加します。
自動処理には必要無いので指定位置の挿入は対応していません。

  
BOOL CopySheet( long nIndex, LboxString *LNewString );
BOOL CopySheet( long nIndex, LPTSTR lpNewSheet );
BOOL CopySheet( LboxString *LString, LboxString *LNewString );
BOOL CopySheet( LPTSTR lpSheet, LPTSTR lpNewSheet );

BOOL CopySheet( LboxString *LString );
BOOL CopySheet( LPTSTR lpSheet );
BOOL CopySheet( long nIndex );
  

既存シートの複写です。
元シートの直前に複写します。引数が一つの CopySheet は新しいブックに複写し、元のブックは閉じられます



  シートをアクティブ

  
BOOL Select( long nSheet );
BOOL Select( LboxString *LString );
BOOL Select( LPTSTR lpSheet );
  

シートをアクティブにします。セルの操作はアクティブシートに対して行なわれます。



  セルの処理

  
BOOL SetRowHeight( long nY, long nHeight );
BOOL SetColumnWidth( long nX, long nWidth );

BOOL GetCell( long nX, long nY, LboxString *LString );
BOOL SetCell( long nX, long nY, LboxString *LString );
BOOL SetCell( long nX, long nY, LPTSTR lpCell );
  



  シートの情報

  
BOOL SetSheetName( LboxString *LString, LboxString *LNewString );
BOOL SetSheetName( LPTSTR lpSheetName, LPTSTR lpSheetNewName );
BOOL SetSheetName( long nIndex, LboxString *LString );
BOOL SetSheetName( long nIndex, LPTSTR lpSheetName );

BOOL GetSheetName( long nIndex, LboxString *LString );

long SheetCount( void );
  



  シートの削除

  
BOOL Delete( LboxString *LString );
BOOL Delete( LPTSTR lpSheet );
BOOL Delete( long nSheet );
  



  BOX罫線(細い実線)

  
// *********************************************************
// BOX罫線
// *********************************************************
BOOL LboxExcel::Box( long nX1, long nY1, long nX2, long nY2 )
{
	bError = false;

	char szColumn1[16];
	char szColumn2[16];
	char szRange[16];

	szColumn1[0] = 0x40 + (unsigned char)nX1;
	wsprintf( szColumn1+1, "%d", nY1 );
	szColumn2[0] = 0x40 + (unsigned char)nX2;
	wsprintf( szColumn2+1, "%d", nY2 );
	wsprintf( szRange, "%s:%s", szColumn1, szColumn2 );

	_variant_t vRange(szRange);
	_variant_t vStyle;

	try {

		if ( pXL != NULL ) {
			if ( pBook != NULL ) {
				pSheet = pBook->ActiveSheet;
				pCells = pSheet->GetRange(&vRange);
				pBorders = pCells->GetBorders();

				pBorder = pBorders->GetItem(xlDiagonalDown);
				vStyle.operator = ( (LONG)xlNone );
				pBorder->PutLineStyle(vStyle);
				pBorder.Release();
				pBorder = NULL;

				pBorder = pBorders->GetItem(xlDiagonalUp);
				vStyle.operator = ( (LONG)xlNone );
				pBorder->PutLineStyle(vStyle);
				pBorder.Release();
				pBorder = NULL;

				for( int i = 0; i < 4; i++ ) {
				    switch( i ) {
					case 0:
					pBorder = pBorders->GetItem(xlEdgeLeft);
					break;
					case 1:
					pBorder = pBorders->GetItem(xlEdgeTop);
					break;
					case 2:
					pBorder = pBorders->GetItem(xlEdgeBottom);
					break;
					case 3:
					pBorder = pBorders->GetItem(xlEdgeRight);
					break;
				   }
				   vStyle.operator = ( (LONG)xlContinuous );
				   pBorder->PutLineStyle(vStyle);
				   vStyle.operator = ( (LONG)xlThin );
				   pBorder->PutWeight( vStyle );
				   vStyle.operator = ( (LONG)xlAutomatic );
				   pBorder->PutColorIndex( vStyle );
				   pBorder.Release();
				   pBorder = NULL;
				}

				pBorders.Release();
				pBorders = NULL;
				pCells.Release();
				pCells = NULL;
				pSheet.Release();
				pSheet = NULL;
			}
		}

	}
	catch (_com_error &e)
	{
		ComError.operator = ( (char *)(e.ErrorMessage()) );
		bError = true;
	}

	return !bError;
}
  










  infoboard   管理者用   
このエントリーをはてなブックマークに追加





フリーフォントWEBサービス
SQLの窓WEBサービス

SQLの窓フリーソフト

素材

一般WEBツールリンク

SQLの窓

フリーソフト

JSライブラリ