外部からインポートしたプロジェクトで
他フォームをShowやShowDialogで開く際、
FileNotFoundが発生している場合、プロジェクトフォルダ内の「App.config」を見直す。
外部ライブラリ等を参照している場合、パスが記載されていることがあり、
そのパスに外部ライブラリがないことで発生している。
外部からインポートしたプロジェクトで
他フォームをShowやShowDialogで開く際、
FileNotFoundが発生している場合、プロジェクトフォルダ内の「App.config」を見直す。
外部ライブラリ等を参照している場合、パスが記載されていることがあり、
そのパスに外部ライブラリがないことで発生している。
コマンドプロンプトを管理者権限で起動して以下のコマンドを実行する。
netstat -bn -p TCP
バッチファイルでUTF-8のDBデータを取得します。
DBデータ取得部分はDBに併せて変更する。
@echo off REM バッチ実行ファイルと同階層に実行したいSQLファイルを配置する。 REM SQLファイルは1文を1行で記載する。 REM SQLファイルは「PARAM1」と「PARAM2」を置換文字列としておく。 setlocal ENABLEDELAYEDEXPANSION REM SQLファイルの置換内容の入力 set /P START_DAY="開始日(YYYYMMDD)を入力してください。:" set /P END_DAY="終了日(YYYYMMDD)を入力してください。:" REM バッチ実行ディレクトリの設定 set CURRENT_DIR=%~dp0 REM 日付時刻の設定 set CURRENT_DATE_TIME_HOUR=%time:~0,2% set CURRENT_DATE_TIME_MINUTE=%time:~3,2% set CURRENT_DATE_TIME_SECOND=%time:~6,2% set CURRENT_DATE_TIME=%date:~0,4%%date:~5,2%%date:~8,2%%CURRENT_DATE_TIME_HOUR: =0%%CURRENT_DATE_TIME_MINUTE: =0%%CURRENT_DATE_TIME_SECOND: =0% REM DB接続ファイルのディレクトリに移動 REM 今回の例ではMySQLとする set MYSQL_DIR="C:\Program Files\MySQL\MySQL Server 5.7\bin" cd /d %MYSQL_DIR% set SQL_FILE=%CURRENT_DIR%%~n0.sql set SQL_FILE_TMP=%CURRENT_DIR%%~n0_tmp.sql set WORK_DIR="D:\work" set OUT_DIR=%CURRENT_DIR%output\%CURRENT_DATE_TIME% mkdir %OUT_DIR% set ROWNUM=1 REM コンソールの文字コードをUTF-8に変更 chcp 65001 for /f "tokens=*" %%i in (%SQL_FILE%) do ( set SQL_LINE1=%%i set SQL_LINE2=!SQL_LINE1:PARAM1=%START_DAY%! set SQL_LINE3=!SQL_LINE2:PARAM2=%END_DAY%! echo !SQL_LINE3! > %SQL_FILE_TMP% REM DB接続と実行 REM 今回の例ではMySQLとする mysql -h localhost -u ユーザID -pパスワード -P ポート番号 docrdb < "%SQL_FILE_TMP%" >> %WORK_DIR%\!ROWNUM!.txt set /A ROWNUM=!ROWNUM!+1 ) del %SQL_FILE_TMP% REM コンソールの文字コードをShift-JISに変更 chcp 932 REM DBデータ出力結果のファイル名を変更 move %WORK_DIR%\1.txt %OUT_DIR%\01_案件数.txt move %WORK_DIR%\2.txt %OUT_DIR%\02_案件数不備あり.txt move %WORK_DIR%\3.txt %OUT_DIR%\03_案件数不備なし.txt
バッチファイルのテンプレートとして、以下を設定する。
日付時刻の設定
バッチファイル実行場所の利用
バッチファイルと同名ファイルの利用
@echo off REM 日付時刻の設定 set CURRENT_DATE_TIME_HOUR=%time:~0,2% set CURRENT_DATE_TIME_MINUTE=%time:~3,2% set CURRENT_DATE_TIME_SECOND=%time:~6,2% set CURRENT_DATE_TIME=%date:~0,4%%date:~5,2%%date:~8,2%%CURRENT_DATE_TIME_HOUR: =0%%CURRENT_DATE_TIME_MINUTE: =0%%CURRENT_DATE_TIME_SECOND: =0% REM バッチファイル実行場所の利用 REM バッチファイルと同名ファイルの利用 set LOG_FILE=%dp0/%n0_%CURRENT_DATE_TIME%.log
BATファイルからJava処理を呼び出します。
@echo off REM 空欄を指定した場合、後続処理でバッチ実行ディレクトリになる set USR_EXEDIR=C:\work\bin echo START Java呼び出し if "%USR_EXEDIR%" EQU "" (set USR_EXEDIR=%~dp0) cd /d %USR_EXEDIR% if %errorlevel% == 1 goto label_cderror set LIB_DIR=C:\work\lib set EXE_PATH=.\sub.jar;..\db\ojdbc7.jar;%LIB_DIR%test.jar set CONF_DIR=..\conf set CLASS_PATH=. set JAVA_OPTION=-Xms128M -Xmx128M -XX:MetaspaceSize=64M -XX:MaxMetaspaceSize=64M java %JAVA_OPTION% -classpath %EXE_PATH%;%CONF_DIR%;%CLASS_PATH%;jp.co.test.TestMain > nul echo END Java呼び出し(0) exit %errorlevel% :label_cderror echo END Java呼び出し(9) exit(9)
選択範囲の取消線を削除します。
納品時の作業で利用することあり。
Sub StrikethroughDel()
For Each myCell In Selection
textBefore = myCell.Value
textAfter = ""
For i = 1 To Len(textBefore)
If myCell.Characters(Start:=i, Length:=1).Font.Strikethrough = False Then
textAfter = textAfter & Mid(textBefore, i, 1)
End If
Next i
Next myCell
End Sub
フォルダ内のJPGファイルをフォルダごとのシートを作成し、
そのシート内に自動で貼り付けします。
Sub JpgPut()
' JpgPut
' JPGファイルを貼り付ける。
' エビデンスが存在する1階層上のフォルダを指定する。(末尾\)
' フォルダ内のJPGファイルは100枚まで。
' 例)
' C:\work\ebi\を指定した場合、
' C:\work\ebi\imgフォルダ内のJPGファイルを貼り付ける。
Application.Calculation = xlCalculationManual
Application.EnableEvents = False
Application.ScreenUpdating = False
Application.DisplayStatusBar = True
Application.StatusBar = "処理中・・・"
Dim count As Integer
count = 0
Dim folderPath As String ' 環境によって変更すること。
folderPath = Worksheets(1).Cells(2, 1).Value
Dim fileName As String
fileName = Dir(folderPath & "\", vbDirectory)
Dim n As Integer
n = 0
Dim fileNames(100) As String
Do While fileName <> ""
fileNames(n) = fileName
n = n + 1
fileName = Dir()
Loop
Dim i As Integer
Dim j As Integer
For j = 0 To n
fileName = fileNames(j)
If GetAttr(folderPath & "\" & fileName) And vbDirectory Then
If fileName <> "." And fileName <> ".." And fileName <> "" Then
i = 0
Dim newSheet As Worksheet
Set newSheet = Worksheets.Add()
newSheet.Move after:=Worksheets(Worksheets.count)
newSheet.Name = fileName
Dim jpgPath As String
jpgPath = Dir(folderPath & "\" & fileName & "\" & "*.JPG", vbNormal)
Do While jpgPath <> ""
' 画像の高さに合わせて「45」の数値を変更すること。
newSheet.Cells(i * 45 + 1, 1).Value = jpgPath
newSheet.Cells(i * 45 + 2, 2).Select
' Excel2010の場合はここから
' 画像を1*1ポイントで貼り付け
Set myShape = Worksheets(fileName).Shapes.AddPicture( _
fileName:=folderPath & "\" & fileName & "\" & jpgPath, _
linkToFile:=False, _
saveWithdocument:=True, _
Left:=Selection.Left, _
Top:=Selection.Top, _
Width:=msoTrue, _
Height:=msoTrue)
' 画像を元のサイズに変換(Heightの設定は不要かも)
' Withを利用しないとオブジェクトエラーになる。
With myShape
LockAspecRatio = msoTrue
Hieght = 560
End With
'myShape.LockAspecRatio = msoTrue
'myShape.Hieght = 560
' Excel2010の場合はここまで
' Excel2013の場合はここから
'Worksheets(fileName).Picutures.Insert fileName:=folderPath & "\" & fileName & "\" & jpgPath
' Excel2013の場合はここまで
i = i + 1
count = count + 1
jpgPath = Dir()
Loop
End If
End If
Next j
Application.StatusBar = count & "個貼り付け完了"
Application.ScreenUpdating = True
Application.EnableEvents = True
End Sub
フォルダ内のファイルを解凍します。
/**
* ファイル解凍処理
*/
private void deCompressFile() throws Exception {
// 圧縮ストリームを宣言する。
ZipInputStream zis = null;
try {
// 作業フォルダのファイルを解凍する。
zis = ZipInputStream(
new BufferedInputStream(
new FileInputStream(this.currentZipFileName)));
// ファイルのエントリを宣言する。
ZipEntry entry;
// ファイルに含まれるエントリ分繰り返す。
while ((entry = zis.getNextEntry()) != null) {
// 解凍対象ファイル名を取得する。
String fileName = entry.getName();
// ディレクトリの場合
if (entry.isDirectory()) {
// ディレクトリを作成する。
Path filePath = Paths.get(this.currentTmpDir + Const.FILE_PATH_SEPARATOR + fileName);
Files.createDirectories(filePath);
// ファイルの場合
} else {
// 解凍処理を行う。
extract(zis, fileName);
}
}
} catch (Exception e) {
LOGGER.error("エラー発生");
throw new Exception("エラー発生", e);
} finally {
if (zis != null) {
try {
zis.close();
} catch (Exception e) {
LOGGER.error("エラー発生");
throw new Exception("エラー発生", e);
}
}
}
}
* 解凍処理
* @param zis 圧縮ストリーム
* @param fileName 解凍対象ファイル名
*/
private void extract(ZipInputStream zis, String fileName) throws Exception {
// 出力用のストリームを宣言する。
BufferedOutputStream bos = null;
try {
// 解凍対象ファイルのフルパスを取得する。
Path filePath = Paths.get(this.currentTmpDir + Const.FILE_PATH_SEPARATOR + fileName);
// 解凍対象ファイルを読み込む。
int readSize = 0;
byte[] buffer = new byte[1024];
bos = new BufferedOutputStream(
new FileOutputStream(filePath.toString()), 1024);
// 解凍対象ファイルをファイルとして出力する。
while ((readSize = zis.read(buffer, 0, buffer.length)) != -1) {
bos.write(buffer, 0, readSize);
}
bos.flush();
} finally {
if (bos != null) {
bos.close();
}
zis.closeEntry();
}
}
フォルダ内のファイルを圧縮します。
/**
* フォルダ圧縮処理
* @param 圧縮対象フォルダ「C:\work\dir」
* @param 圧縮ファイル名「C:\work\send_20181104150000.zip」
*/
private void dirCompress(String dir, String zipFileName) throws Exception {
// 圧縮ストリームオブジェクトを宣言する。
ZipOutputStream zos = null;
try {
// 圧縮ストリームオブジェクトを生成する。
zos = ZipOutputStream(
new FileOutputStream(
new File(zipFileName)), Charset.forName("MS932"));
// フォルダ内のファイル一覧を取得する。
List<Path> filePahtList = Files.list(Paths.get(dir).collect(Collectors.toList());
// ファイル一覧分繰り返す。
for (Path filePath : filePathList) {
archive(zos, filePath, Paths.get(dir).getFileName().toString() + "\\" + filePath.getFileName().toString());
}
zos.closeEntry();
zos.finish();
} catch (Exception e) {
LOGGER.error("エラー発生");
throw new Exception("エラー発生", e);
} finally {
if (zos != null) {
try {
zos.close();
} catch (Exception e) {
LOGGER.error("エラー発生");
throw new Exception("エラー発生", e);
}
}
}
}
* 圧縮処理
* @param zos 圧縮ストリーム
* @param filePath 圧縮対象ファイルパス
* @param fileName 圧縮対象ファイル名
*/
private void archive(ZipOutputStream zos, Path filePath, String fileName) throws Exception {
// 圧縮対象ファイルの読込ストリームを宣言する。
BufferedInputStream bis = null;
try {
// zipエントリを作成する。
zos.putNextEntry(new ZipEntry(fileName));
// ファイルの場合
if (! Files.isDirectory(filePath)) {
// 圧縮対象ファイルを読み込む。
bis = new BufferedInputStream(new FileInputStream(filePath.toString()));
// 圧縮対象ファイルをzipファイルに出力する。
int readSize = 0;
byte[] buffer = new byte[1024];
while ((readSize = bis.read(buffer, 0, buffer.length)) != -1) {
zos.write(buffer, 0, readSize);
}
}
} finally {
if (bis != null) {
bis.close();
}
zos.closeEntry();
}
}
画像に対して個人情報等をマスクする際に利用します。
private void imageMaskBlack(String imageFile) thorws Exception {
// 変数を宣言する。
BufferedImage bimg = null;
Graphics graphics = null;
ImageReader jpgReader = null;
ImageWriter jpgWriter = null;
try {
// イメージファイルを読み込む。(ImageIO.readは利用しない方針)
jpgReader ImageIO.getImageReadersByFormatName("jpeg").next();
jpgReader.setInput(ImageIO.createImageInputStream(new File(imageFile)));
bimg = jpgReader.read(0);
// Graphicsオブジェクトを取得する。
graphics = bimg.getGraphics();
graphics.setColor(Color.BLACK);
// X座標、Y座標、幅、高さを指定し黒色でマスクする。
// 画像の左上がX座標:0、Y座標:0
graphics.fillRect(100, 50, 100, 100);
graphics.drawImage(bimg, 0, 0, null);
// 品質と解像度指定
// イメージを書き込むため、ImageIOからjpg用のImageWriterを取得する。
jpgWriter = ImageIO.getImageWritersByFormatName("jpeg").next();
// ImageWriterのパラメータ設定
// パラメータを取得する。
JPEGImageWriteParam jpgWriteParam = (JPEGImageWriteParam)jpgWriter.getDefaultWriteParam();
// パラメータに品質指定を行うモードを指定する。
jpgWriteParam.setCompressionMode(ImageWriteParam.MODE_EXPLICIT);
// パラメータに品質を指定する。(0.0f~1.0f)
jpgWriteParam.setCompressionQuality(0.5f);
// ImageWriterのメタデータの設定
// メタデータを取得する。
IIOMetadata imageMeta = jpgWriter.getDefaultImageMetadata(new ImageTypeSpecifier(bimg), jpgWriteParam);
// メタデータからXMLのツリー構造を取得する。
Element tree = (Element)imageMeta.getAsTree("javax_imageio_jpeg_image_1.0");
// ツリー構造から要素「JFIF」を取得する。
Element jfif = (Element)tree.getElementsByTagName("app0JFIF").item(0);
//DPI指定を行うモードを指定する。
jfif.setAttribute("resUnits", "1");
// X座標は300dpiを指定する。
jfif.setAttribute("Xdensity", 300);
// Y座標は300dpiを指定する。
jfif.setAttribute("Ydensity", 300);
// メタデータにツリー構造を設定し直す。
imageMeta.setFromTree("javax_imageio_jpeg_image_1,0", tree);
// これまでに行った設定を元にイメージファイルを出力する。(ImageIO.writeは利用しない方針)
jpgWriter.setOutput(ImageIO.createImageOutputStream(new File(imageFile)));
jpgWriter.write(null, new IIOImage(bimg, null, imageMeta), jpgWriteParam);
} finally {
if (grahics != null) {
graphics.dispose();
graphics = null;
}
if (jpgWriter != null) {
jpgWriter.reset();
jpgWriter = null;
}
if (jpgReader != null) {
jpgReader.reset();
jpgReader = null;
}
if (bimg != null) {
bimg.flush();
bimg = null;
}
}
}