refactor
This commit is contained in:
292
src/sh/juk/sheet/J1.cls
Normal file
292
src/sh/juk/sheet/J1.cls
Normal file
@@ -0,0 +1,292 @@
|
||||
' ============================================================
|
||||
' JUK CSV Item Definition Generator
|
||||
'
|
||||
' Description:
|
||||
' Excel の CSV 項目定義シートから sh_csv_item_definition テーブル用の
|
||||
' DML INSERT 文を生成する
|
||||
'
|
||||
' Usage:
|
||||
' 1. 「CSV項目定義」シートを開く
|
||||
' 2. VBAエディタで J1.cls をインポート
|
||||
' 3. GenerateJukCsvItemDefinition マクロを実行
|
||||
' 4. 同じフォルダに juk_csv_item_definition.sql が生成される
|
||||
'
|
||||
' Column Mapping:
|
||||
' C - 順序号 (item_seq)
|
||||
' D - 項目名 (item_title)
|
||||
' P - データ型 (data_type)
|
||||
' V - PK (is_duplicate_check_key)
|
||||
' W - 必须入力 (nullable) - 反転
|
||||
' X - 定義チェック (enable_format_check)
|
||||
' Y - 存在チェック (enable_exist_check)
|
||||
' Z - 関連チェック (enable_relation_check)
|
||||
' AA -許可値 (allowed_values)
|
||||
' BI - JsonIgnore (json_ignore)
|
||||
'
|
||||
' Output Sample:
|
||||
' INSERT INTO sh_csv_item_definition (CODE, ITEM_SEQ, ITEM_TITLE, ITEM_NAME, IS_DUPLICATE_CHECK_KEY, DATA_TYPE, PRECISION, SCALE, NULLABLE, ENABLE_FORMAT_CHECK, FORMAT_REGEX, ENABLE_EXIST_CHECK, ALLOWED_VALUES, MASTER_SYBT, ENABLE_RELATION_CHECK, JSON_IGNORE, CMNUSER) VALUES ('JUK', 1, '職員番号', '', TRUE, 'CHAR', 8, NULL, FALSE, FALSE, '', TRUE, NULL, '', FALSE, FALSE, 'updsv7');
|
||||
' ============================================================
|
||||
|
||||
Option Explicit
|
||||
|
||||
' --- 設定 ---
|
||||
Private Const TARGET_SHEET_NAME As String = "CSV項目定義"
|
||||
Private Const OUTPUT_FILE_NAME As String = "juk_csv_item_definition.sql"
|
||||
Private Const DATA_START_ROW As Long = 9
|
||||
Private Const CODE_PREFIX As String = "JUK"
|
||||
Private Const DEFAULT_CMNUSER As String = "updsv7"
|
||||
|
||||
' --- カラム位置 (Excel 列番号) ---
|
||||
Private Const COL_ITEM_SEQ As Long = 3
|
||||
Private Const COL_ITEM_TITLE As Long = 4
|
||||
Private Const COL_DATA_TYPE As Long = 16
|
||||
Private Const COL_PK As Long = 22
|
||||
Private Const COL_REQUIRED As Long = 23
|
||||
Private Const COL_FORMAT_CHECK As Long = 24
|
||||
Private Const COL_EXIST_CHECK As Long = 25
|
||||
Private Const COL_RELATION_CHECK As Long = 26
|
||||
Private Const COL_ALLOWED_VALUES As Long = 27
|
||||
Private Const COL_JSON_IGNORE As Long = 61
|
||||
|
||||
' --- フィールド名 (DDLフィールド名→大写) ---
|
||||
Private Const CODE = "CODE"
|
||||
Private Const ITEM_SEQ = "ITEM_SEQ"
|
||||
Private Const ITEM_TITLE = "ITEM_TITLE"
|
||||
Private Const ITEM_NAME = "ITEM_NAME"
|
||||
Private Const IS_DUPLICATE_CHECK_KEY = "IS_DUPLICATE_CHECK_KEY"
|
||||
Private Const DATA_TYPE = "DATA_TYPE"
|
||||
Private Const PRECISION = "PRECISION"
|
||||
Private Const SCALE = "SCALE"
|
||||
Private Const NULLABLE = "NULLABLE"
|
||||
Private Const ENABLE_FORMAT_CHECK = "ENABLE_FORMAT_CHECK"
|
||||
Private Const FORMAT_REGEX = "FORMAT_REGEX"
|
||||
Private Const ENABLE_EXIST_CHECK = "ENABLE_EXIST_CHECK"
|
||||
Private Const ALLOWED_VALUES = "ALLOWED_VALUES"
|
||||
Private Const MASTER_SYBT = "MASTER_SYBT"
|
||||
Private Const ENABLE_RELATION_CHECK = "ENABLE_RELATION_CHECK"
|
||||
Private Const JSON_IGNORE = "JSON_IGNORE"
|
||||
Private Const CMNUSER = "CMNUSER"
|
||||
|
||||
|
||||
' ============================================================
|
||||
' Main: GenerateJukCsvItemDefinition
|
||||
' ============================================================
|
||||
Public Sub GenerateJukCsvItemDefinition()
|
||||
Dim ws As Worksheet
|
||||
Dim outputPath As String
|
||||
Dim sqlLines As String
|
||||
Dim lastRow As Long
|
||||
Dim i As Long
|
||||
Dim sql As String
|
||||
|
||||
On Error Resume Next
|
||||
Set ws = ThisWorkbook.Worksheets(TARGET_SHEET_NAME)
|
||||
On Error GoTo 0
|
||||
|
||||
If ws Is Nothing Then
|
||||
MsgBox "シート [" & TARGET_SHEET_NAME & "] が見つかりません。", vbExclamation
|
||||
Exit Sub
|
||||
End If
|
||||
|
||||
lastRow = ws.Cells(ws.Rows.Count, COL_ITEM_TITLE).End(xlUp).Row
|
||||
|
||||
If lastRow < DATA_START_ROW Then
|
||||
MsgBox "データが見つかりません。", vbExclamation
|
||||
Exit Sub
|
||||
End If
|
||||
|
||||
sqlLines = ""
|
||||
|
||||
For i = DATA_START_ROW To lastRow
|
||||
sql = GenerateSqlForRow(ws, i)
|
||||
If sql <> "" Then
|
||||
sqlLines = sqlLines & sql & vbCrLf
|
||||
End If
|
||||
Next i
|
||||
|
||||
If sqlLines = "" Then
|
||||
MsgBox "出力するデータがありませんでした。", vbInformation
|
||||
Exit Sub
|
||||
End If
|
||||
|
||||
outputPath = ThisWorkbook.Path & "\" & OUTPUT_FILE_NAME
|
||||
|
||||
Call WriteTextFile(outputPath, FormatSql(sqlLines))
|
||||
|
||||
MsgBox "SQLファイルを生成しました:" & vbCrLf & outputPath, vbInformation
|
||||
|
||||
End Sub
|
||||
|
||||
|
||||
' ============================================================
|
||||
' Generate SQL for a single row
|
||||
' IDE表示用: 只需要对value做注释
|
||||
' ============================================================
|
||||
Private Function GenerateSqlForRow(ws As Worksheet, rowNum As Long) As String
|
||||
Dim itemTitle As String
|
||||
Dim itemSeq As Long
|
||||
Dim sqlParts As Variant
|
||||
|
||||
itemTitle = GetCellValue(ws, rowNum, COL_ITEM_TITLE)
|
||||
If itemTitle = "" Then
|
||||
GenerateSqlForRow = ""
|
||||
Exit Function
|
||||
End If
|
||||
|
||||
itemSeq = CLng(GetCellValue(ws, rowNum, COL_ITEM_SEQ))
|
||||
|
||||
sqlParts = Array( _
|
||||
"INSERT INTO sh_csv_item_definition (", _ ' INSERT INTO
|
||||
CODE & ",", _ ' code
|
||||
ITEM_SEQ & ",", _ ' item_seq
|
||||
ITEM_TITLE & ",", _ ' item_title
|
||||
ITEM_NAME & ",", _ ' item_name
|
||||
IS_DUPLICATE_CHECK_KEY & ",", _ ' is_duplicate_check_key
|
||||
DATA_TYPE & ",", _ ' data_type
|
||||
PRECISION & ",", _ ' precision
|
||||
SCALE & ",", _ ' scale
|
||||
NULLABLE & ",", _ ' nullable
|
||||
ENABLE_FORMAT_CHECK & ",", _ ' enable_format_check
|
||||
FORMAT_REGEX & ",", _ ' format_regex
|
||||
ENABLE_EXIST_CHECK & ",", _ ' enable_exist_check
|
||||
ALLOWED_VALUES & ",", _ ' allowed_values
|
||||
MASTER_SYBT & ",", _ ' master_sybt
|
||||
ENABLE_RELATION_CHECK & ",", _ ' enable_relation_check
|
||||
JSON_IGNORE & ",", _ ' json_ignore
|
||||
CMNUSER & ")", _ ' cmnuser
|
||||
") VALUES (", _ ' VALUES
|
||||
GetCode(), _ ' code
|
||||
GetItemSeq(itemSeq), _ ' item_seq
|
||||
SqlString(itemTitle), _ ' item_title
|
||||
GetIsChecked(ws, rowNum, COL_PK), _ ' is_duplicate_check_key
|
||||
SqlString(GetCellValue(ws, rowNum, COL_DATA_TYPE)), _ ' data_type
|
||||
GetNull(), _ ' precision
|
||||
GetNull(), _ ' scale
|
||||
Not GetIsChecked(ws, rowNum, COL_REQUIRED), _ ' nullable
|
||||
GetIsChecked(ws, rowNum, COL_FORMAT_CHECK), _ ' enable_format_check
|
||||
GetEmptyStr(), _ ' format_regex
|
||||
GetIsChecked(ws, rowNum, COL_EXIST_CHECK), _ ' enable_exist_check
|
||||
SqlArrayOrNull(GetCellValue(ws, rowNum, COL_ALLOWED_VALUES)), _ ' allowed_values
|
||||
GetEmptyStr(), _ ' master_sybt
|
||||
GetIsChecked(ws, rowNum, COL_RELATION_CHECK), _ ' enable_relation_check
|
||||
GetIsChecked(ws, rowNum, COL_JSON_IGNORE, True), _ ' json_ignore
|
||||
GetCmnuser()) ' cmnuser
|
||||
|
||||
GenerateSqlForRow = Join(sqlParts, "")
|
||||
|
||||
End Function
|
||||
|
||||
|
||||
' ============================================================
|
||||
' Helper: Get code value
|
||||
' ============================================================
|
||||
Private Function GetCode() As String
|
||||
GetCode = "'" & CODE_PREFIX & "', "
|
||||
End Function
|
||||
|
||||
|
||||
' ============================================================
|
||||
' Helper: Get item_seq value
|
||||
' ============================================================
|
||||
Private Function GetItemSeq(seq As Long) As String
|
||||
GetItemSeq = seq & ", "
|
||||
End Function
|
||||
|
||||
|
||||
' ============================================================
|
||||
' Helper: Get cmnuser value
|
||||
' ============================================================
|
||||
Private Function GetCmnuser() As String
|
||||
GetCmnuser = "'" & DEFAULT_CMNUSER & "'"
|
||||
End Function
|
||||
|
||||
|
||||
' ============================================================
|
||||
' Helper: Get NULL value
|
||||
' ============================================================
|
||||
Private Function GetNull() As String
|
||||
GetNull = "NULL, "
|
||||
End Function
|
||||
|
||||
|
||||
' ============================================================
|
||||
' Helper: Get empty string value
|
||||
' ============================================================
|
||||
Private Function GetEmptyStr() As String
|
||||
GetEmptyStr = "'', "
|
||||
End Function
|
||||
|
||||
|
||||
' ============================================================
|
||||
' Format: 去掉IDE的换行和缩进,输出1行
|
||||
' ============================================================
|
||||
Private Function FormatSql(sql As String) As String
|
||||
Dim lines As Variant
|
||||
Dim i As Long
|
||||
Dim result As String
|
||||
|
||||
lines = Split(sql, vbCrLf)
|
||||
result = ""
|
||||
|
||||
For i = LBound(lines) To UBound(lines)
|
||||
If Trim(lines(i)) <> "" Then
|
||||
result = result & Trim(lines(i))
|
||||
End If
|
||||
Next i
|
||||
|
||||
FormatSql = result
|
||||
End Function
|
||||
|
||||
|
||||
' ============================================================
|
||||
' Helper: Get cell value as string (trimmed)
|
||||
' ============================================================
|
||||
Private Function GetCellValue(ws As Worksheet, rowNum As Long, colNum As Long) As String
|
||||
GetCellValue = Trim(CStr(ws.Cells(rowNum, colNum).Value))
|
||||
End Function
|
||||
|
||||
|
||||
' ============================================================
|
||||
' Helper: Check if cell contains "○"
|
||||
' ============================================================
|
||||
|
||||
|
||||
' ============================================================
|
||||
' Helper: Boolean to SQL string
|
||||
' ============================================================
|
||||
|
||||
|
||||
' ============================================================
|
||||
' Helper: String to SQL (quoted and escaped)
|
||||
' ============================================================
|
||||
Private Function SqlString(s As String) As String
|
||||
If s = "" Then
|
||||
SqlString = "NULL, "
|
||||
Else
|
||||
SqlString = "'" & Replace(s, "'", "''") & "', "
|
||||
End If
|
||||
End Function
|
||||
|
||||
|
||||
' ============================================================
|
||||
' Helper: Array string to SQL or NULL
|
||||
' ============================================================
|
||||
Private Function SqlArrayOrNull(s As String) As String
|
||||
If s = "" Then
|
||||
SqlArrayOrNull = "NULL, "
|
||||
Else
|
||||
SqlArrayOrNull = "'{" & s & "}', "
|
||||
End If
|
||||
End Function
|
||||
|
||||
|
||||
' ============================================================
|
||||
' Helper: Write text file
|
||||
' ============================================================
|
||||
Private Sub WriteTextFile(filePath As String, content As String)
|
||||
Dim fileNum As Long
|
||||
fileNum = FreeFile
|
||||
Open filePath For Output As #fileNum
|
||||
Print #fileNum, content;
|
||||
Close #fileNum
|
||||
End Sub
|
||||
Reference in New Issue
Block a user