ソース掲示板




すべてから検索

キーワード   条件 表示 現行ログ 過去ログ トピックス 名前 本文
ImageMagick で 画像を一括切り抜き処理 『VBScript/C++/PHP/バッチファイル』
日時: 2009/03/20 22:52
名前: lightbox



Tiff にカタログされているデータを、ページ毎に出力し、
その各々の画像から切り抜きデータを作成します

↓ダウンロード
http://www.imagemagick.org/script/index.php
( ImageMagick-6.5.0-1-Q8-windows-static.exe を使用しました )

インストールすると以下のようなダイアログが出るので、
COM をインストールします。


※ コマンドラインで使用しないのであれば、2番目のチェックは必要ありません


以下が抽出用のソースコードです。

  tiff_crop.vbs
拡張子:
Set fso = CreateObject("Scripting.FileSystemObject")
Set img = CreateObject("ImageMagickObject.MagickImage.1")

Call img.Convert("test.tif", "split.bmp")

Set objFolder = Fso.GetFolder( ".\" )
Set objFiles = objFolder.Files

For each objFile in objFiles
	
	strFileName = objFile.Name
	if Left( strFileName, 6 ) = "split-" then
		Call img.Convert( _
			strFileName, _
			"-crop", _
			"100x100+100+100", _
			"+repage", _
			Replace( strFileName, "-", "" ) & ".png" )
	end if
Next


Wscript.Echo "処理が終了しました"
100x100+100+100 : 幅x高さ+x座標+y座標 です。( 左上原点 ) ※ PNG で出力すると crop が動作しませんので、確実な BMP を使用しています ※ TIFF から直接もだめでした。バグがあるようです。 バッチファイル

C++  C++(2)

PHP
メンテナンス

ImageMagick のDLL版をインストールしなおして、バッチファイルでPNGファイルの一括トリミング ( No.1 )
日時: 2009/03/19 14:08
名前: lightbox


日時: 2009/03/19 14:08
名前: lightbox
DLL 版の違いは、C言語用のライブラリと Perl用のライブラリを追加できるようになって
いる事だけのようです。厳密に比較した結果ではありませんが、プログラマならこちらです。



PNG ファイルのままではトリミングできないので、一括処理用に対象となる PNG ファイル
を一つのディレクトリにコピーして、以下の処理を実行しました。

拡張子:
convert *.png png.tif
これは、大量の画像ファイルを一括管理するのに必要と思われるのでテストしましたが、 直接する例が以下にあります 基本、直感的なコマンドが多いですね。とても多用な処理が想定されているので 「これはできるだろう」が普通にできるような気がします で、複雑な事は無理だろうと、昨日は VBSCript でテストしたのですが、 convert *.png png.tif も含めて一括で実行できるバッチファイルが以下です。
拡張子:
convert ..\*.png png.bmp
convert *.bmp -crop 380x540+50+50 +repage crop%%03d.png
del *.bmp
これは、一つ上のディレクトリに対象となる PNG を全て用意して、 カレントに トリミングした PNG ファイルを作成します。 ( PNG から直接できるのなら一行で書けるのですが・・・ ) crop%%03d.png の %%03d は C言語の printf のフォーマット指定ですが、 コマンドラインなので、% が %% になっています。 crop000.png という、数字部分が3桁になったファイル名になります ※ ..\*.png の部分を png.tif に差し替える事ができます。 crop はトリミングの意味で、380x540+50+50 がサイズと位置情報です。 座標の原点は左上となります。他にもいろいろ指定方法がありますが、 かえって混乱するのでこれが一番良いと思います。 repage を指定しないと、画像サイズが変わらずに切り抜かれなかった 部分が余白のようになります。 1) crop のみ 2) repage あり ※ 上記リンク先のサンプルにある rose: という キーワードの後ろに : が付いた ※ ものは、内部で扱える予約されたキーワードです。( この場合 gif 画像 )
捕捉ですが、インストール時のパス設定はシステムの PATH 環境変数の先頭に来ます これは、Windows に既に convert というコマンドがあるからなのですが、 めったに使わないどちらかと言えば危険なコマンドなので問題は無いと思います。
このアーティクルの参照用URLをクリップボードにコピー メンテナンス
ImageMagik を Windows PHP で利用する為のモジュールのダウンロード ( No.2 )
日時: 2009/03/20 16:35
名前: lightbox
PHP用モジュールダウンロード
画像処理 [ImageMagick] : php オンラインマニュアル
※ 注意 : ↑上記マニュアルページ内の[例]のサンプルコードを信じない事


拡張子:
<?

// 一つ上のディレクトリのファイル名の一覧を取得
$files = scandir("../");
// その中から PNG 拡張子のファイルを絞り込む
$png = preg_grep("/^[^\.]+\.[pP][nN][gG]$/", $files);

// 絞り込んだファイル名にディレクトリを付加してアクセス可能にする
array_walk($png, 'add_dir', '../');

// 配列を渡して、画像シーケンスを作成
$images = new Imagick($png);

// 画像毎にトリミングを行う
foreach($images as $image){
	$image->cropImage(380, 540, 50, 50);
} 

// 画像を全て出力する
$image->writeImages('out%03d.jpg',false);


// 配列に一括操作する為のコールバック関数
function add_dir(&$item, $key, $dir)
{
	$item = "$dir$item";
}

?>
このアーティクルの参照用URLをクリップボードにコピー メンテナンス
ImageMagick で C++ アプリケーション作成 ( No.3 )
日時: 2009/03/20 22:52
名前: lightbox
英文サイトなのでサンプル探すのを苦労しましたが、以下にあります

http://www.imagemagick.org/Magick++/http://www.imagemagick.org/Magick++/Documentation.htmlhttp://www.imagemagick.org/Magick++/Image.html

ここから始めるのが良いと思います。ちょうど crop ですし。

※ ファイルのパスのかわりに URL が書けます

  im_test.cpp
拡張子:
// *********************************************************
// www\Magick++\Image.html にある サンプルです
// *********************************************************

#include <Magick++.h>
#include <string>
#include <iostream>

using namespace std;
using namespace Magick;

int main( int argc, char argv[] )
{

	Image image;

	try { 
		image.read( "in.png" ); 

		// Crop the image to specified size (width, height, xOffset, yOffset)
		image.crop( Geometry( 380, 540, 50, 50 ) ); 

		// Write the image to a file 
		image.write( "out.png" ); 
	} 
	catch( Exception &error_ ) { 
		printf( "エラーが発生しました : %s : ", error_.what() );
	}

	return 1;
}
↓バッチビルド用のバッケージです( ソースコードとビルド後の exe も入っています ) http://winofsql.jp/download/ImageMagick_test.lzh ビルド時のオプションは以下のようになります。 ( 実行時にはコメントや改行が削除されます )
拡張子:
;コンパイル
cl.exe im_test.cpp /c
/D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /D _CRT_SECURE_NO_DEPRECATE

; ランタイムライブラリを内部に取り込む( DLLから読まない:msvcr80.dll )
/MT

; ワーングレベル
/W3

; ************************************************
; ImageMagick で追加
; ************************************************
/I "C:\Program Files\ImageMagick-6.5.0-Q8\include"
/EHsc

;↓ 行頭 // で行区切りをあらわします
//

;リンク
link.exe im_test.obj

; 参照ライブラリ
kernel32.lib user32.lib gdi32.lib winspool.lib
comdlg32.lib advapi32.lib shell32.lib ole32.lib
oleaut32.lib uuid.lib

; ************************************************
; ImageMagick で追加
; ************************************************
CORE_RL_magick_.lib CORE_RL_Magick++_.lib X11.lib
/libpath:"C:\Program Files\ImageMagick-6.5.0-Q8\lib"

; 出力ファイル名の指定
/OUT:"im_test.exe"
※ インストールディレクトリは、C:\Program Files\ImageMagick-6.5.0-Q8 です。
このアーティクルの参照用URLをクリップボードにコピー メンテナンス
ImageMagick で C++ アプリケーション作成( 2 ) 〜 一括処理 ( No.4 )
日時: 2009/03/20 22:19
名前: lightbox
http://www.imagemagick.org/Magick++/Image.html#Constructors にあるコンストラクタ
とメソッドのドキュメントを見ましたが、これぐらいは書かないとだめなようです。


拡張子:
// *********************************************************
// 一括処理はやはり一覧が必要
// *********************************************************

#include <windows.h>
#include <Magick++.h>
#include <string>
#include <iostream>

using namespace std;
using namespace Magick;

int main( int argc, char argv[] )
{

	HANDLE hFile;
	BOOL bRet;
	WIN32_FIND_DATA wfd;
	Image image;
	string work;

	hFile = FindFirstFile( "..\\png\\*.png", &wfd );
	bRet = true;
	while( hFile != INVALID_HANDLE_VALUE && bRet == (BOOL)true ) {

		try { 
			work = "..\\png\\";
			work += wfd.cFileName;
			image.read( work ); 
	
			image.crop( Geometry( 380, 540, 50, 50 ) ); 
	
			image.write( wfd.cFileName ); 
		} 
		catch( Exception &error_ ) { 
			printf( "エラーが発生しました : %s : ", error_.what() );
		}

		bRet = FindNextFile( hFile, &wfd );

	}
	if ( !bRet ) {
		FindClose( hFile );
	}

	return 1;
}
このアーティクルの参照用URLをクリップボードにコピー メンテナンス
Excelに書かれたデータを元に画像を加工する ( No.5 )
日時: 2009/03/31 17:16
名前: lightbox
拡張子:
' リサイズ用コードサンプル
' Call img.Convert("image.tif", "-resize", "800", "work.bmp")
'
' 実サイズの標準値( ミリ )
nRealWidth = 251
nRealHeight = 181

Set fso = CreateObject("Scripting.FileSystemObject")
Set img = CreateObject("ImageMagickObject.MagickImage.1")


Dim Book ' 一つのブックを処理するインスタンス

Set Book = New ExcelAction
Call Book(ExcelApp,"パラメータのあるExcelのフルパス")

' デフォルトが非表示なので表示
Book.Visible( True )

' 二つ目のシートを使用する
Book.SelectSheetNo( 2 )

str = Book.GetCellActive(7,3)
n1 = CLng(str)
str = Book.GetCellActive(8,3)
n2 = CLng(str)

Book.Quit()

' 全てのプックを閉じてから、いずれかのインスタンスで終了する
' ブックが一つの場合は、閉じる必要は無い( 閉じてから終了 )

Call CropImage( "元画像.拡張子", n1, n2 )

Wscript.Echo "処理が終了しました"


Function CropImage( strFileName, nRight, nLeft  )
' 右からの切り取り位置
' 左からの切り取り位置

	Dim pic,aData

	aData = Split( strFileName, "," )

	' BMP化( 参考データ : 3872 x 2688 )
	Call img.Convert(strFileName, "work.bmp")

	Set pic = LoadPicture("work.bmp")

	nWidth = CLng(CLng(pic.Width) * 567 / 15000)
	nHeight = CLng(CLng(pic.Height) * 567 / 15000)

	Set pic = Nothing
	pic = Empty

	' 画像上の右からの切り取り位置
	nCrop1 = CLng(nWidth*nRight/nRealWidth)
	sParam1 = nCrop1 & "x" & nHeight & "+" & ( nWidth - nCrop1 ) & "+0"

	Call img.Convert( _
		"work.bmp", _
		"-crop", _
		sParam1, _
		"+repage", _
		aData(0)&"-h.png" )


	' 画像上の左からの切り取り位置
	nCrop2 = CLng(nWidth*nLeft/nRealWidth)
	sParam2 = nCrop2 & "x" & nHeight & "+0+0"

	Call img.Convert( _
		"work.bmp", _
		"-crop", _
		sParam2, _
		"+repage", _
		aData(0)&"-f.png" )


	' 画像上の中央の切り取り位置
	sParam3 = nWidth-nCrop2-nCrop1 & "x" & nHeight & "+" & nCrop2 & "+0"

	Call img.Convert( _
		"work.bmp", _
		"-crop", _
		sParam3, _
		"+repage", _
		aData(0)&"-b.png" )

End Function

' ************************************************
' クラス定義
' ************************************************
Class ExcelAction

	Public ExcelApp		' 共有
	Public ExcelBook	' このインスタンス用

' ************************************************
' コンストラクタのようなもの( New では呼ばれない )
' ************************************************
	Public Default Function InitSetting(ExcelApp,strPath)

		If Not IsObject(ExcelApp) Then
			Set Me.ExcelApp = CreateObject("Excel.Application")
		else
			Set Me.ExcelApp = ExcelApp
		End If
		Set ExcelApp = Me.ExcelApp

		Set ExcelBook = ExcelApp.Workbooks.Open(strPath)

		' アクティブなウィンドウを最大化
		ExcelApp.ActiveWindow.WindowState = 2
		' 警告メッセージを非表示
		ExcelApp.DisplayAlerts = False

	end function
 
' ************************************************
' メソッド ( 表示・非表示の設定 )
' ************************************************
	Public Function Visible(bFlg)
	
		Me.ExcelApp.Visible = bFlg
	
	End Function

' ************************************************
' Book を閉じる
' ************************************************
	Public Function Close()
	
		If TypeName(ExcelBook) = "Workbook" Then
			' 保存した事にする
			ExcelBook.Saved = True
		End If
		ExcelBook.Close()
		Set ExcelBook = Nothing
		ExcelBook = Empty
	
	End Function

' ************************************************
' Excel 本体の終了
' ************************************************
	Public Function Quit()

		If IsObject(ExcelBook) Then
			If TypeName(ExcelBook) = "Workbook" Then
				' 保存した事にする
				ExcelBook.Saved = True
			End If
		End if
		If IsObject(ExcelApp) Then
			ExcelApp.Quit
			Set ExcelApp = Nothing
		End If
		ExcelApp = Empty

	End Function

' ************************************************
' シート名によるシート選択
' ************************************************
	Public Function SelectSheet(strSheetName)

		ExcelBook.Sheets(strSheetName).Select

	End Function

' ************************************************
' 番号よるシート選択
' ************************************************
	Public Function SelectSheetNo(No)

		ExcelBook.Sheets(No).Select

	End Function

' ************************************************
' セルへのデータセット
' ************************************************
	Public Function SetCell(strSheetName, x, y, Data)

		ExcelBook.Sheets(strSheetName).Cells(y, x) = Data

	End Function
	Public Function SetCellActive(x, y, Data)

		ExcelBook.ActiveSheet.Cells(y, x) = Data

	End Function

' ************************************************
' セルからデータの取得
' ************************************************
	Public Function GetCell(strSheetName, x, y)

		GetCell = ExcelBook.Sheets(strSheetName).Cells(y, x)

	End Function
	Public Function GetCellActive(x, y)

		GetCellActive = ExcelBook.ActiveSheet.Cells(y, x)

	End Function

End Class
このアーティクルの参照用URLをクリップボードにコピー メンテナンス
Excelに書かれたデータを元に画像を加工する ( バージョンアツプ版 ) ( No.6 )
日時: 2009/04/01 17:19
名前: lightbox
ログ出力やら、エラー処理やら、Excel のシートを二つ使った
パラメータ取得の実際に処理したコードですので、仕様さえ一致させれば動作します

拡張子:
' スクリプトが存在するディレクトリ
' FileSystemObject を使わないで取得
strCurPath = WScript.ScriptFullName
aPath = Split( strCurPath, "\" )
strCurPath = ""
For i = 0 to Ubound(aPath)-1
	strCurPath = strCurPath & aPath( i )
	if i <> Ubound(aPath)-1 then
		strCurPath = strCurPath & "\"
	end if
Next

' 1) このスクリプトを加工前の画像と同じディレクトリに置きます。
' 2) パラメータを持つ Excel のフルパス( フルパスで書きます )
' strParamBook = "C:\Documents and Settings\lightbox\My Documents\_0904\パラメータ.xls"
' テスト用の Excel をカレントディレクトリに置いています
strParamBook = strCurPath & "\パラメータ.xls"
' 3) 分割された画像を作成するディレクトリ( このスクリプトからの相対パス )
strResultPath = "..\partImage\"

' 実サイズの標準値( ミリ ) : B5 は 182mm×257mm
nRealWidth = 251
nRealHeight = 181
' ********************************************************

' リサイズ用コードサンプル
' Call img.Convert("image.tif", "-resize", "800", "work.bmp")
'

' ImageMagick を使う為のオブジェクト
Set img = CreateObject("ImageMagickObject.MagickImage.1")

Dim ExcelApp ' Excel オブジェクト
Dim Book ' 一つのブックを処理するインスタンス

Set Book = New ExcelAction
Call Book(ExcelApp, strParamBook)
if Book.ErrFlg then
	' Excel を開く事ができなかった
	Book.Quit
	Wscript.Quit
end if

' デフォルトが非表示なのでテスト中は表示
' Book.Visible( True )

' 1つ目のシートを使用する
Book.SelectSheetNo( 1 )
if Book.ErrFlg then
	Book.Quit
	Wscript.Quit
end if

' **********************************************************
' L カラム( 12番目 ) を順に検索して、空白でなかったら( 
' 級とページを取得する
' G カラム( 7番目 ) が空白になったら終了
' **********************************************************

nY = 2
strKyu = ""
Do
	' 表題がなくなったらデータは終わり
	strCell = ""
	nEndLimit = 0
	Do While strCell = ""
		strCell = Book.GetCellActive(7,nY)
		if strCell = "" then
			nEndLimit = nEndLimit + 1
			if nEndLimit > 10 then
				Book.Quit
				Wscript.Echo "処理が終了しました"
				Wscript.Quit
			end if
			nY = nY + 1
		end if
	Loop

	Book.Log("表題:"&strCell)

	' ファイル名
	strFile = Book.GetCellActive(12,nY)

	' ファイル名発見
	if strFile <> "" then
		strKyu = Book.GetCellActive(13,nY)
		strPage = Book.GetCellActive(14,nY)

		' 2つ目のシートを使用する
		Book.SelectSheetNo( 2 )
		if Book.ErrFlg then
			Book.Quit
			Wscript.Quit
		end if

		nRow = 3	' 切り取りシートの開始位置
		Do
			' 級
			strCell1 = Book.GetCellActive(1,nRow)
			if strCell1 = "" then
				Exit Do
			end if
			' ページ
			strCell2 = Book.GetCellActive(2,nRow)
			if strCell1 = strKyu and strCell2 = strPage then
				str = Book.GetCellActive(7,nRow)
				' 右から
				n1 = CLng(str)
				' 左から
				str = Book.GetCellActive(8,nRow)
				n2 = CLng(str)
				' 最後の引数は、出力ディレクトリ( カレントに出力するには、"" を指定 )
				Book.LogPath = strResultPath
				Call CropImage( strFile, n1, n2, Book.LogPath )
				Exit Do
			end if

			nRow = nRow + 1
		Loop

		' 1つ目のシートに戻す
		Book.SelectSheetNo( 1 )
	end if

	nY = nY + 1
Loop

Function CropImage( strFileName, nRight, nLeft, dirString )
' 右からの切り取り位置
' 左からの切り取り位置

	Dim pic,aData

	aData = Split( strFileName, "," )

	' BMP化( 参考データ : 3872 x 2688 )
	Call img.Convert(strFileName, "work.bmp")

	Set pic = LoadPicture("work.bmp")

	nWidth = CLng(CLng(pic.Width) * 567 / 15000)
	nHeight = CLng(CLng(pic.Height) * 567 / 15000)

	Set pic = Nothing
	pic = Empty

	' 画像上の右からの切り取り位置
	nCrop1 = CLng(nWidth*nRight/nRealWidth)
	sParam1 = nCrop1 & "x" & nHeight & "+" & ( nWidth - nCrop1 ) & "+0"

	Call img.Convert( _
		"work.bmp", _
		"-crop", _
		sParam1, _
		"+repage", _
		dirString&aData(0)&"-h.png" )

	Book.Log(aData(0)&"-h.png を作成しました")

	' 画像上の左からの切り取り位置
	nCrop2 = CLng(nWidth*nLeft/nRealWidth)
	sParam2 = nCrop2 & "x" & nHeight & "+0+0"

	Call img.Convert( _
		"work.bmp", _
		"-crop", _
		sParam2, _
		"+repage", _
		dirString&aData(0)&"-f.png" )


	Book.Log(aData(0)&"-f.png を作成しました")

	' 画像上の中央の切り取り位置
	sParam3 = nWidth-nCrop2-nCrop1 & "x" & nHeight & "+" & nCrop2 & "+0"

	Call img.Convert( _
		"work.bmp", _
		"-crop", _
		sParam3, _
		"+repage", _
		dirString&aData(0)&"-b.png" )

	Book.Log(aData(0)&"-b.png を作成しました")

End Function

' ************************************************
' クラス定義
' ************************************************
Class ExcelAction

	Public ExcelApp		' 共有
	Public ExcelBook	' このインスタンス用
	Public Fs		' ログ出力用
	Public ErrFlg		' エラーフラグ
	Public ErrDescription	' エラーメッセージ
	Public LogPath		' ログの出力ディレクトリ( 最後に \ をつける )

' ************************************************
' コンストラクタのようなもの( New では呼ばれない )
' ************************************************
	Public Default Function InitSetting(ExcelApp,strPath)

		Me.ErrFlg = false

		If Not IsObject(Me.Fs) Then
			Set Me.Fs = CreateObject( "Scripting.FileSystemObject" )
		end if

		If Not IsObject(ExcelApp) Then
			Set Me.ExcelApp = CreateObject("Excel.Application")
			Set ExcelApp = Me.ExcelApp
		else
			Set Me.ExcelApp = ExcelApp
		End If

		on error resume next
		Set ExcelBook = ExcelApp.Workbooks.Open(strPath)
		if Err.Number <> 0 then
			Me.ErrFlg = True
			Me.ErrDescription = Err.Description
			Log( "InitSetting:"&Err.Description )
			Exit Function
		end if
		on error goto 0

		' アクティブなウィンドウを最大化
		ExcelApp.ActiveWindow.WindowState = 2
		' 警告メッセージを非表示
		ExcelApp.DisplayAlerts = False

	end function
 
' ************************************************
' メソッド ( 表示・非表示の設定 )
' ************************************************
	Public Function Visible(bFlg)

		Me.ErrFlg = false

		Me.ExcelApp.Visible = bFlg

	End Function

' ************************************************
' Book を閉じる
' ************************************************
	Public Function Close()

		Me.ErrFlg = false

		If TypeName(ExcelBook) = "Workbook" Then
			' 保存した事にする
			ExcelBook.Saved = True
		End If
		ExcelBook.Close()
		Set ExcelBook = Nothing
		ExcelBook = Empty

	End Function

' ************************************************
' Excel 本体の終了
' ************************************************
	Public Function Quit()

		If IsObject(ExcelBook) Then
			If TypeName(ExcelBook) = "Workbook" Then
				' 保存した事にする
				ExcelBook.Saved = True
			End If
		End if
		If IsObject(ExcelApp) Then
			ExcelApp.Quit
			Set ExcelApp = Nothing
		End If
		ExcelApp = Empty

	End Function

' ************************************************
' シート名によるシート選択
' ************************************************
	Public Function SelectSheet(strSheetName)

		Me.ErrFlg = false

		on error resume next
		ExcelBook.Sheets(strSheetName).Select
		if Err.Number <> 0 then
			Me.ErrFlg = True
			Me.ErrDescription = Err.Description
			Log( "SelectSheet:"&Err.Description )
			Exit Function
		end if
		on error goto 0

	End Function

' ************************************************
' 番号よるシート選択
' ************************************************
	Public Function SelectSheetNo(No)

		Me.ErrFlg = false

		on error resume next
		ExcelBook.Sheets(No).Select
		if Err.Number <> 0 then
			Me.ErrFlg = True
			Me.ErrDescription = Err.Description
			Log( "SelectSheetNo:"&Err.Description )
			Exit Function
		end if
		on error goto 0

	End Function

' ************************************************
' セルへのデータセット
' ************************************************
	Public Function SetCell(strSheetName, x, y, Data)

		Me.ErrFlg = false

		on error resume next
		ExcelBook.Sheets(strSheetName).Cells(y, x) = Data
		if Err.Number <> 0 then
			Me.ErrFlg = True
			Me.ErrDescription = Err.Description
			Log( "SetCell:"&Err.Description )
			Exit Function
		end if
		on error goto 0

	End Function
	Public Function SetCellActive(x, y, Data)

		Me.ErrFlg = false

		on error resume next
		ExcelBook.ActiveSheet.Cells(y, x) = Data
		if Err.Number <> 0 then
			Me.ErrFlg = True
			Me.ErrDescription = Err.Description
			Log( "SetCellActive:"&Err.Description )
			Exit Function
		end if
		on error goto 0

	End Function

' ************************************************
' セルからデータの取得
' ************************************************
	Public Function GetCell(strSheetName, x, y)

		Me.ErrFlg = false

		on error resume next
		GetCell = ExcelBook.Sheets(strSheetName).Cells(y, x)
		if Err.Number <> 0 then
			Me.ErrFlg = True
			Me.ErrDescription = Err.Description
			Log( "GetCell:"&Err.Description )
			Exit Function
		end if
		on error goto 0

	End Function
	Public Function GetCellActive(x, y)

		Me.ErrFlg = false

		on error resume next
		GetCellActive = ExcelBook.ActiveSheet.Cells(y, x)
		if Err.Number <> 0 then
			Me.ErrFlg = True
			Me.ErrDescription = Err.Description
			Log( "GetCell:"&Err.Description )
			Exit Function
		end if
		on error goto 0

	End Function

	Public Function Log(str)

		Dim obj

		Set obj = Me.Fs.OpenTextFile( LogPath&"ExcelAction.log", 8, True )
		obj.WriteLine( Now&":"&str )
		obj.Close()

	End Function

End Class
このアーティクルの参照用URLをクリップボードにコピー メンテナンス