kazpgmの日記

『プログラム自動作成@自動生成』作成の日記

「WEB画面情報取得.xls」完成した。のつづき。ソース

「WEB画面情報取得.xls」完成した。のつづき。ソース

■Module6
 WEB画面情報取得()
 ・クリップボードからデータを取得する
 ・アンエスケープする
 ・タブ2個を改行に変更する
  javascriptの編集ロジックがもともとクッキー用なのでタブ2個は改行のこととしている。
 ・WEB画面情報取得
  タブ区切りのデータをエクセルに貼り付けている。このとき「TBL項目名たち」シートを使い日本語項目名と属性を取得し貼り付けている。
 ・エクセルシートをフォーマットする。

'Module6
'//  =============================================================
'//  2010 kaz PHP自動作成お助けTOOL.(http://kazpgm.ddo.jp/) Start
'//  修正BSDライセンス。
'//  =============================================================
Option Explicit

'文字列にしか対応してません
'VBではクリップボード関数を使いましょう
Private Const GHND = &H42
Private Const CF_TEXT = 1
'private  Const MAXSIZE = 4096
Private Const MAXSIZE = 4096000
'クリップボードを開く
Declare Function OpenClipboard Lib "User32" (ByVal hWnd As Long) As Long
'クリップボードを閉じる
Declare Function CloseClipboard Lib "User32" () As Long
'メモリのロックを解除
Declare Function GlobalUnlock Lib "KERNEL32" (ByVal hMem As Long) As Long
'メモリをロック
Declare Function GlobalLock Lib "KERNEL32" (ByVal hMem As Long) As Long
'メモリ割り当て
Declare Function GlobalAlloc Lib "KERNEL32" (ByVal wFlags As Long, ByVal dwBytes As Long) As Long
'文字列をグローバル メモリへコピー
Declare Function lstrcpy Lib "KERNEL32" (ByVal lpString1 As Any, ByVal lpString2 As Any) As Long
'クリップボードハンドル取得
Declare Function GetClipboardData Lib "User32" (ByVal wFormat As Long) As Long
'クリップボードの内容を消去
Declare Function EmptyClipboard Lib "User32" () As Long
'データをクリップボードへコピー
Declare Function SetClipboardData Lib "User32" (ByVal wFormat As Long, ByVal hMem As Long) As Long
   

Public Sub WEB画面情報取得()
    Dim datas() As String
    Dim meisais() As String
    Dim i As Integer, j As Integer, k As Integer, m As Integer, p As Integer, q As Integer
    Dim titleFlg As Boolean
    Dim strwk As String
    Dim rIdxBase As Integer
    Dim Start As Integer
    Dim objSC As Object
    Dim str As String
    Dim text As String
    Dim rtnJpn As String

On Error GoTo ERRWEB画面情報取得

    ' クリップボードからデータを取得する
    str = ClipBoard_GetData
    rIdxBase = ActiveCell.Row
    Start = rIdxBase
    
    ' アンエスケープする
    Set objSC = CreateObject("scriptcontrol")
    objSC.Language = "jscript"
    str = objSC.CodeObject.unescape(str)

    ' タブ2個を改行に変更する
    datas = Split(str, (vbTab & vbTab))

    ' WEB画面情報取得
    titleFlg = False
    For j = 0 To UBound(datas)
        text = datas(j)
        If text <> "" Then
            meisais = Split(text, vbTab)
            m = 0
            For k = 0 To UBound(meisais)
                strwk = meisais(k)
                Call setCells(Start + j + 1, k + 2 + m, strwk)
                If k = 1 Then '項目名を求める
                    m = 1
                    If titleFlg = False Then 'タイトル行
                        Call setCells(Start + j + 1, k + 2 + m, "日本語名")
                        m = 2
                        Call setCells(Start + j + 1, k + 2 + m, "TBL属性")
                    Else
                        If Workbooks("WEB画面情報取得.xls").Sheets("TBL項目名たち").Cells(1, 1) = "" Then '「TBL項目名たち」なし
                            Call setCells(Start + j + 1, k + 2 + m, "")
                            m = 2
                            Call setCells(Start + j + 1, k + 2 + m, "")
                        Else
                            rtnJpn = tblItemJpn(strwk)
                            If rtnJpn <> "" Then
                                Call setCells(Start + j + 1, k + 2 + m, rtnJpn)
                            Else
                                q = Len(strwk) * 0.8 '最大で全体の2倍まで同じ項目名まで補完する
                                If q < 3 Then ' 検索が2文字なら見つけにいかない様にした
                                    Call setCells(Start + j + 1, k + 2 + m, "")
                                Else
                                    For p = 1 To q
                                        rtnJpn = tblItemJpn(Mid(strwk, p + 1)) ' 先頭から1文字づつ減らして検索
                                        If rtnJpn <> "" Then
                                            Call setCells(Start + j + 1, k + 2 + m, Left(strwk, p) & rtnJpn)
                                            Exit For
                                        Else
                                            rtnJpn = tblItemJpn(Mid(strwk, 1, Len(strwk) - p)) ' 最終文字から1文字づつ減らして検索
                                            If rtnJpn <> "" Then
                                                Call setCells(Start + j + 1, k + 2 + m, rtnJpn & Right(strwk, p))
                                                Exit For
                                            End If
                                        End If
                                    Next
                                End If
                            End If
                            m = 2
                            Call setCells(Start + j + 1, k + 2 + m, tblItemZok(strwk))
                        End If
                    End If
                    titleFlg = True
                End If
            Next k
        End If
    Next
    Start = Start + UBound(datas)

    If Start = rIdxBase Then
        MsgBox "ローカルで「iItemZokuForClip.jsをhtmlに埋め込み」画面上でCTL+Uを押してください。" & vbCrLf & _
        "<<クリップボードにデータがありませんでした。>>"
    Else
        MsgBox "WEB画面情報取得を終了します。"
    End If
       
    ActiveWindow.Zoom = 75
    Range("B2").Select
    Columns("A:A").ColumnWidth = 6#
    Columns("B:I").Select
    Selection.ColumnWidth = 18.5
    
    Cells(Start + 3, 1).Activate    ' 次の項目をアクティブにする
    
    Exit Sub
ERRWEB画面情報取得:
    MsgBox ("WEB画面情報取得検索に失敗しました" & Chr(13) & Chr(13) & "原因は " & Chr(13) & Err.Description)
    
End Sub

Private Function ClipBoard_GetData()
'クリップボードから情報を取り出す
    Dim hClipMemory As Long, lpClipMemory As Long, MyString As String, RetVal As Long
    If OpenClipboard(0&) = 0 Then
        MsgBox "他のアプリケーションが使用しているため、クリップボードを開けません。", vbCritical
        Exit Function
    End If
    hClipMemory = GetClipboardData(CF_TEXT)
    If IsNull(hClipMemory) Then
        MsgBox "クリップボードハンドル取得に失敗しました", vbCritical
        GoTo OutOfHere
    End If
    lpClipMemory = GlobalLock(hClipMemory)
    If Not IsNull(lpClipMemory) Then
        MyString = Space$(MAXSIZE)
        RetVal = lstrcpy(MyString, lpClipMemory)
        RetVal = GlobalUnlock(hClipMemory)
        On Error Resume Next
        MyString = Mid(MyString, 1, InStr(1, MyString, Chr$(0), 0) - 1)
        If Err Then 'text以外のデータ
            MsgBox "クリップボードのデータはテキストでありません", vbCritical
            Err.Clear
            MyString = ""
        End If
        On Error GoTo 0
    Else
        MsgBox "クリップボード メモリをロックできません", vbCritical
    End If
OutOfHere:
    RetVal = CloseClipboard()
    If MyString = "" Then
        'ClipBoard_SetData MyString
    Else
        ClipBoard_GetData = MyString
    End If
End Function


'「TBL項目名たち」シートをVLookupして日本語項目名を取得する。
Private Function tblItemJpn(item)
    On Error GoTo errTblItemJpn
    Dim MyVariant As Variant
    MyVariant = Workbooks("WEB画面情報取得.xls").Sheets("TBL項目名たち").Application.VLookup(item, Workbooks("WEB画面情報取得.xls").Sheets("TBL項目名たち").Range("A:B"), 2, False)
    If IsError(MyVariant) Then
        tblItemJpn = ""
    Else
        tblItemJpn = MyVariant
    End If
errTblItemJpn:
    Err = 0

End Function

'「TBL項目名たち」シートをVLookupしてBL属性を取得する。
Private Function tblItemZok(item)
    On Error GoTo errTblItemZok
    Dim MyVariant As Variant
    MyVariant = Workbooks("WEB画面情報取得.xls").Sheets("TBL項目名たち").Application.VLookup(item, Workbooks("WEB画面情報取得.xls").Sheets("TBL項目名たち").Range("A:C"), 3, False)
    If IsError(MyVariant) Then
        tblItemZok = ""
    Else
        tblItemZok = MyVariant
    End If
errTblItemZok:
    Err = 0

End Function


Private Function setCells(rIdx As Integer, cIdx As Integer, val As String)
    If Len(val) < 127 Then
        Cells(rIdx, cIdx).NumberFormatLocal = "@"
    Else
        Cells(rIdx, cIdx).NumberFormatLocal = "G/標準"
    End If
    Cells(rIdx, cIdx) = val
    setCells = rIdx + 1
End Function


Sub TBL項目名たちクリア()
    Workbooks("WEB画面情報取得.xls").Sheets("TBL項目名たち").Columns("A:D").Clear
    Workbooks("WEB画面情報取得.xls").Sheets("環境設定").Activate
End Sub

Sub TBL項目名たち作成()
    Dim i, j, Name, Name2
    Dim pkeyCount, outIdx
    
    Dim 解析するテーブル一覧のエクセル名 As String
    Dim テーブル英語名_row
    Dim テーブル英語名_col
    Dim テーブル日本語名_kbn
    Dim テーブル日本語名_row
    Dim テーブル日本語名_col
    Dim テーブル項目の開始位置_row
    Dim 項目英語名_col
    Dim 項目日本語名_col
    Dim 属性_col
    Dim 読み飛ばしたいシートたち() As String
    Dim str As String
    Dim ignorFlg As Boolean

    解析するテーブル一覧のエクセル名 = Application.Workbooks("WEB画面情報取得.xls").Worksheets("環境設定").Cells(10, 4)
    If 解析するテーブル一覧のエクセル名 = "" Then
        MsgBox ("解析するテーブル一覧のエクセル名を指定してください。")
        Exit Sub
    End If
    テーブル英語名_row = Application.Workbooks("WEB画面情報取得.xls").Worksheets("環境設定").Cells(12, 5)
    If テーブル英語名_row = "" Then
        MsgBox ("テーブル英語名_rowを指定してください。")
        Exit Sub
    End If
    テーブル英語名_col = Application.Workbooks("WEB画面情報取得.xls").Worksheets("環境設定").Cells(12, 6)
    If テーブル英語名_col = "" Then
        MsgBox ("テーブル英語名_colを指定してください。")
        Exit Sub
    End If
    テーブル日本語名_kbn = Application.Workbooks("WEB画面情報取得.xls").Worksheets("環境設定").Cells(13, 4)
    If テーブル日本語名_kbn = "" Then
        MsgBox ("テーブル日本語名_kbnを指定してください。")
        Exit Sub
    End If
    If テーブル日本語名_kbn <> "シート名使用" Then
        テーブル日本語名_row = Application.Workbooks("WEB画面情報取得.xls").Worksheets("環境設定").Cells(13, 5)
        If テーブル日本語名_row = "" Then
            MsgBox ("指定セル使用のときは、テーブル日本語名_rowを指定してください。")
            Exit Sub
        End If
        テーブル日本語名_col = Application.Workbooks("WEB画面情報取得.xls").Worksheets("環境設定").Cells(13, 6)
        If テーブル日本語名_col = "" Then
            MsgBox ("指定セル使用のときは、テーブル日本語名_colを指定してください。")
            Exit Sub
        End If
    End If
    テーブル項目の開始位置_row = Application.Workbooks("WEB画面情報取得.xls").Worksheets("環境設定").Cells(14, 4)
    If テーブル項目の開始位置_row = "" Then
        MsgBox ("テーブル項目の開始位置_rowを指定してください。")
        Exit Sub
    End If
    項目英語名_col = Application.Workbooks("WEB画面情報取得.xls").Worksheets("環境設定").Cells(15, 6)
    If 項目英語名_col = "" Then
        MsgBox ("項目英語名_colを指定してください。")
        Exit Sub
    End If
    項目日本語名_col = Application.Workbooks("WEB画面情報取得.xls").Worksheets("環境設定").Cells(16, 6)
    If 項目日本語名_col = "" Then
        MsgBox ("項目日本語名_colを指定してください。")
        Exit Sub
    End If
    属性_col = Application.Workbooks("WEB画面情報取得.xls").Worksheets("環境設定").Cells(17, 6)
    If 属性_col = "" Then
        MsgBox ("属性_colを指定してください。")
        Exit Sub
    End If
    str = Application.Workbooks("WEB画面情報取得.xls").Worksheets("環境設定").Cells(18, 4)
    読み飛ばしたいシートたち = Split(str, vbLf) '読み飛ばしたいシート
    
    Workbooks("WEB画面情報取得.xls").Sheets("TBL項目名たち").Columns("A:D").Clear
    
    Workbooks.Open Filename:=解析するテーブル一覧のエクセル名
    outIdx = 1
    DoEvents
    For i = 1 To Sheets.count
        Sheets(i).Select
        Sheets(i).Activate
        
        ignorFlg = False
        If UBound(読み飛ばしたいシートたち) > -1 Then
            For j = 0 To UBound(読み飛ばしたいシートたち)
                If 読み飛ばしたいシートたち(j) = Sheets(i).Name Then '読み飛ばしたいシートと同じ
                    ignorFlg = True
                    Exit For
                End If
            Next
        End If
        If ignorFlg = False Then  'テーブル定義シートの場合
            Workbooks("WEB画面情報取得.xls").Sheets("TBL項目名たち").Cells(outIdx, 1) = LCase(Cells(テーブル英語名_row, テーブル英語名_col)) 'テーブル英語名
            If テーブル日本語名_kbn = "シート名使用" Then
                Workbooks("WEB画面情報取得.xls").Sheets("TBL項目名たち").Cells(outIdx, 2) = Sheets(i).Name 'テーブル日本語名
            Else
                Workbooks("WEB画面情報取得.xls").Sheets("TBL項目名たち").Cells(outIdx, 2) = Cells(テーブル日本語名_row, テーブル日本語名_col) 'テーブル日本語名
            End If
            Workbooks("WEB画面情報取得.xls").Sheets("TBL項目名たち").Cells(outIdx, 3) = "" '属性
            Workbooks("WEB画面情報取得.xls").Sheets("TBL項目名たち").Cells(outIdx, 4) = LCase(Cells(テーブル英語名_row, テーブル英語名_col)) 'テーブル名
            outIdx = outIdx + 1
            j = 10
            Do While Cells(j, 3) <> ""  '項目名が入っている内
                If 重複チェック(LCase(Cells(j, 項目英語名_col)), Cells(j, 項目日本語名_col), LCase(Cells(j, 属性_col))) = 0 Then '項目英語名, 項目日本語名, 属性
                    Workbooks("WEB画面情報取得.xls").Sheets("TBL項目名たち").Cells(outIdx, 1) = LCase(Cells(j, 項目英語名_col)) '項目英語名
                    Workbooks("WEB画面情報取得.xls").Sheets("TBL項目名たち").Cells(outIdx, 2) = Cells(j, 項目日本語名_col) '項目日本語名
                    Workbooks("WEB画面情報取得.xls").Sheets("TBL項目名たち").Cells(outIdx, 3) = LCase(Cells(j, 属性_col)) '属性
                    Workbooks("WEB画面情報取得.xls").Sheets("TBL項目名たち").Cells(outIdx, 4) = LCase(Cells(テーブル英語名_row, テーブル英語名_col))  'テーブル名
                    outIdx = outIdx + 1
                End If
                j = j + 1
            Loop
        End If
    Next
    ActiveWorkbook.Close (False)
    
    Workbooks("WEB画面情報取得.xls").Sheets("TBL項目名たち").Activate
    Cells.Select
    Selection.Sort Key1:=Range("A1"), Order1:=xlAscending, Key2:=Range("D1") _
        , Order2:=xlAscending, Key3:=Range("B1"), Order3:=xlAscending, Header _
        :=xlGuess, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom _
        , SortMethod:=xlPinYin, DataOption1:=xlSortNormal, DataOption2:= _
        xlSortNormal, DataOption3:=xlSortNormal
    Range("F29").Select
    Workbooks("WEB画面情報取得.xls").Sheets("環境設定").Activate
End Sub

'同じものがすでに登録されていたら行番号を戻す。無かったら0を戻す
Private Function 重複チェック(項目英語名, 項目日本語名, 属性)
    Dim i
    重複チェック = 0
    i = 1
    Do While Workbooks("WEB画面情報取得.xls").Sheets("TBL項目名たち").Cells(i, 1) <> ""  '項目英語名が入っている内
        If Workbooks("WEB画面情報取得.xls").Sheets("TBL項目名たち").Cells(i, 1) = 項目英語名 And _
        Workbooks("WEB画面情報取得.xls").Sheets("TBL項目名たち").Cells(i, 2) = 項目日本語名 And _
        Workbooks("WEB画面情報取得.xls").Sheets("TBL項目名たち").Cells(i, 3) = 属性 Then
            重複チェック = i
            Exit Do
        End If
        i = i + 1
    Loop
End Function

'//  =============================================================
'//  2010 kaz PHP自動作成お助けTOOL.(http://kazpgm.ddo.jp/) End
'//  修正BSDライセンス。
'//  =============================================================

■itemZokuForClip.js
 ・イベントの上位伝播する。
 ・Ctrl+U同時押しの場合
  ・クリップボードへのWEB画面項目属性一覧出力
   (tagName,name,日本語名,TBL属性,type,size,maxLength,rows,cols,className,value
 ・もとがクッキーに入れるためのロジックなので、2000バイト(1クッキー用)づつに分けてデータを作っている。クッキー向けなのでデータに改行を入れていない。・・・せっかくだからこのままのロジックにしてある。(データを2000バイト1クッキーで自PCにデータをしまうという発想の面白さと、かなりがんばったということを忘れないために残しておく。)

<!--
//_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
//_/
//_/  =============================================================
//_/  2010 kaz PHP自動作成お助けTOOL.(http://kazpgm.ddo.jp/) Start
//_/  修正BSDライセンス。
//_/  =============================================================
//_/
//_/ ・このJavaScriptはIE専用です
//_/
//_/ ・このJavaScriptを追加するとキー押下のイベントをこの関数が取得します。
//_/  WEB画面上でCTL+Uを押下すると現在のINPUTタグtextとpassword、TEXTAREAタグの
//_/  レングス情報などをタブ形式でクリップボードに書き出します。
//_/ 
//_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/
//
document.onkeydown = function(e) { 
    var shift, ctrl, editText; 
    var elementText = new Array(5); 

    // Mozilla(Firefox, NN) and Opera 
    if (e != null) { 
        keycode = e.which; 
        ctrl = typeof e.modifiers == 'undefined' ? e.ctrlKey : e.modifiers & Event.CONTROL_MASK; 
        shift = typeof e.modifiers == 'undefined' ? e.shiftKey : e.modifiers & Event.SHIFT_MASK; 
        // イベントの上位伝播を防止 
        //e.preventDefault(); 
        //e.stopPropagation(); 
    // Internet Explorer 
    } else { 
        keycode = event.keyCode; 
        ctrl = event.ctrlKey; 
        shift = event.shiftKey; 
        // イベントの上位伝播を防止 
        //event.returnValue = false; 
        //event.cancelBubble = true; 
    } 

    // キーコードの文字を取得 
    keychar = String.fromCharCode(keycode).toUpperCase(); 

    // Ctrl同時押しの場合 
    if (ctrl) { 
        if (keychar == "U") { 
            //alert('Ctrl+U'); 
            if (e != null) { 
                alert("WEB画面項目属性一覧は、IE以外では使用できません。");
                return;
            } 
            elementText = alertElementsForDebug();
            editText = "";
            for (var i=0; i < 20; i++) {
                //alert(";" + elementText[i]);
                editText = editText + escape(elementText[i]);
            }
            if (false == clipboardData.setData( "text" , editText )){
              alert("クリップボードへのWEB画面項目属性一覧出力に失敗しました");
            }
        } 
    }
} 

function alertElementsForDebug(){
    var inputFlg = false;
    var elementText = new Array(20); 

    var idx = 0;
    
    elementText[0]="";
    elementText[1]="";
    elementText[2]="";
    elementText[3]="";
    elementText[4]="";
    elementText[5]="";
    elementText[6]="";
    elementText[7]="";
    elementText[8]="";
    elementText[9]="";
    elementText[10]="";
    elementText[11]="";
    elementText[12]="";
    elementText[13]="";
    elementText[14]="";
    elementText[15]="";
    elementText[16]="";
    elementText[17]="";
    elementText[18]="";
    elementText[19]="";
    
    elementText[idx] +=' URL=' + document.URL + "\t\t";
    elementText[idx] += (
        'tagName' + "\t" +
        'name' + "\t" +
        'type' + "\t" +
        'size' + "\t" +
        'maxLength' + "\t" +
        'rows' + "\t" +
        'cols' + "\t" +
        'className' + "\t" +
        'value' + "\t" +
        "\t" ); // タブが2個続いたらVBAツールで改行にしている。
    for (var i=0; i< document.forms.length; i++) {
        for (var j=0; j< document.forms[i].elements.length; j++) {
            var obj = document.forms[i].elements[j];
            if ((obj.tagName.toLowerCase() == "input" || 
                obj.tagName.toLowerCase() == "select") &&
                (obj.type.toLowerCase()!="hidden")) { // hiddenは出さない。
            //if (obj.tagName.toLowerCase() == "input" && 
            //    (obj.type.toLowerCase() == "text" ||
            //     obj.type.toLowerCase() == "password")) {
                 
                if (elementText[idx].length > 2000) {
                    idx ++;
                } 
                inputFlg = true;
                elementText[idx] += (
                    (obj.tagName==""?" ":obj.tagName) + "\t" +
                    (obj.name==""?" ":obj.name) + "\t" +
                    (obj.type==""?" ":obj.type) + "\t");
                if (obj.tagName.toLowerCase() == "select" || obj.type.toLowerCase()=="radio" || 
                    obj.type.toLowerCase()=="checkbox" || obj.type.toLowerCase()=="hidden" || 
                    obj.type.toLowerCase()=="button" || obj.type.toLowerCase()=="submit") {
                    elementText[idx] += (
                        " \t" + // 空白を入れないとタブが2個続いてしまい後で困る。
                        " \t"); // 空白を入れないとタブが2個続いてしまい後で困る。
                } else {
                    elementText[idx] += (
                    (obj.size==""?" ":obj.size) + "\t" +
                    (obj.maxLength==""?" ":obj.maxLength) + "\t");
                }
                elementText[idx] += (
                    " \t" + // 空白を入れないとタブが2個続いてしまい後で困る。
                    " \t" + // 空白を入れないとタブが2個続いてしまい後で困る。
                    (obj.className == ""?" ":obj.className) + "\t" +
                     obj.value + " \t"  +
                    "\t" ); // タブが2個続いたらVBAツールで改行にしている。
            } else if ((obj.tagName.toLowerCase() == "textarea") &&
                (obj.type.toLowerCase()!="hidden")) { // hiddenは出さない。
                if (elementText[idx].length > 2000) {
                    idx ++;
                } 
                inputFlg = false;
                elementText[idx] += (
                    (obj.tagName==""?" ":obj.tagName) + "\t" +
                    (obj.name==""?" ":obj.name) + "\t" +
                    " \t" + // 空白を入れないとタブが2個続いてしまい後で困る。
                    " \t" + // 空白を入れないとタブが2個続いてしまい後で困る。
                    " \t" + // 空白を入れないとタブが2個続いてしまい後で困る。
                    (obj.rows==""?" ":obj.rows) + "\t" +
                    (obj.cols==""?" ":obj.cols) + "\t" +
                    (obj.className == ""?" ":obj.className)  + "\t" +
            //        ' id=' + obj.id +
                    obj.value + " \t"  +
                    "\t" ); // タブが2個続いたらVBAツールで改行にしている。
            }
        }
    }
    
    if (document.forms.length==0) { // formタグがない場合
        for (i = 0; i < document.all.length; i++) {
            var obj = document.all(i);
            if ((obj.tagName.toLowerCase() == "input" || 
                obj.tagName.toLowerCase() == "select") &&
                (obj.type.toLowerCase()!="hidden")) { // hiddenは出さない。
            //if (obj.tagName.toLowerCase() == "input" && 
            //    (obj.type.toLowerCase() == "text" ||
            //     obj.type.toLowerCase() == "password")) {
                 
                if (elementText[idx].length > 2000) {
                    idx ++;
                } 
                inputFlg = true;
                elementText[idx] += (
                    (obj.tagName==""?" ":obj.tagName) + "\t" +
                    (obj.name==""?" ":obj.name) + "\t" +
                    (obj.type==""?" ":obj.type) + "\t");
                if (obj.tagName.toLowerCase() == "select" || obj.type.toLowerCase()=="radio" || 
                    obj.type.toLowerCase()=="checkbox" || obj.type.toLowerCase()=="hidden" || 
                    obj.type.toLowerCase()=="button" || obj.type.toLowerCase()=="submit") {
                    elementText[idx] += (
                        " \t" + // 空白を入れないとタブが2個続いてしまい後で困る。
                        " \t"); // 空白を入れないとタブが2個続いてしまい後で困る。
                } else {
                    elementText[idx] += (
                    (obj.size==""?" ":obj.size) + "\t" +
                    (obj.maxLength==""?" ":obj.maxLength) + "\t");
                }
                elementText[idx] += (
                    " \t" + // 空白を入れないとタブが2個続いてしまい後で困る。
                    " \t" + // 空白を入れないとタブが2個続いてしまい後で困る。
                    (obj.className == ""?" ":obj.className) + "\t" +
                    obj.value + " \t"  +
                    "\t" ); // タブが2個続いたらVBAツールで改行にしている。
            } else if ((obj.tagName.toLowerCase() == "textarea") &&
                (obj.type.toLowerCase()!="hidden")) { // hiddenは出さない。
                if (elementText[idx].length > 2000) {
                    idx ++;
                } 
                inputFlg = false;
                elementText[idx] += (
                    (obj.tagName==""?" ":obj.tagName) + "\t" +
                    (obj.name==""?" ":obj.name) + "\t" +
                    " \t" + // 空白を入れないとタブが2個続いてしまい後で困る。
                    " \t" + // 空白を入れないとタブが2個続いてしまい後で困る。
                    " \t" + // 空白を入れないとタブが2個続いてしまい後で困る。
                    (obj.rows==""?" ":obj.rows) + "\t" +
                    (obj.cols==""?" ":obj.cols) + "\t" +
                    (obj.className == ""?" ":obj.className)  + "\t" +
            //        ' id=' + obj.id +
                    obj.value + " \t"  +
                    "\t" ); // タブが2個続いたらVBAツールで改行にしている。
            }
        }
    }

    return elementText;
}
//_/  =============================================================
//_/  2010 kaz PHP自動作成お助けTOOL.(http://kazpgm.ddo.jp/) End
//_/  修正BSDライセンス。
//_/  =============================================================
//-->

■itemZokuForClipStart.php
 ・.htaccess内に記述する
  php_value auto_prepend_file "/phpディレクトリ/itemZokuForClipStart.php"

<?php
// =============================================================
// 2010 kaz PHP自動作成お助けTOOL.(http://kazpgm.ddo.jp/) Start
// 修正BSDライセンス。
// =============================================================
	// itemZokuForClip.jsをphp実行後htmlの<head>前に入れるための前準備
	ob_start();
	// 重要:既存.htaccessのphp_value auto_prepend_fileにすでに書いてある場合、ここに、そのphp名を書く
	//include 'xxxxxxx.php';
	// 重要:その後、既存.htaccessの「php_value auto_prepend_file」をコメントアウト。次行に「php_value auto_prepend_file "itemZokuForClipStart.php"」を書く。
// =============================================================
// 2010 kaz PHP自動作成お助けTOOL.(http://kazpgm.ddo.jp/) End
// 修正BSDライセンス。
// =============================================================
?>

■itemZokuForClipEnd.php
 ・.htaccess内に記述する
  php_value auto_append_file "/phpディレクトリ/itemZokuForClipEnd.php"

<?php
// =============================================================
// 2010 kaz PHP自動作成お助けTOOL.(http://kazpgm.ddo.jp/) Start
// 修正BSDライセンス。
// =============================================================
	// 重要:既存.htaccessのphp_value auto_append_fileにすでに書いてある場合、ここに、そのphp名を書く
	//include 'xxxxxxxx.php';
	// 重要:その後、既存.htaccessの「php_value auto_append_file」コメントアウト。次行に「php_value auto_append_file "itemZokuForClipEnd.php"」を書く。

	// itemZokuForClip.jsをphp実行後htmlの<head>前に入れる。
	$itemZokuForClipDisp =ob_get_contents();
	ob_end_clean();
	echo preg_replace('/(.*)<\/head>(.*)/i', "${1}<script type=\"text/javascript\" src=\"WEB上のルート/itemZokuForClip.js\" charset=\"utf-8\"></script>\n</head>${3}", $itemZokuForClipDisp);
// =============================================================
// 2010 kaz PHP自動作成お助けTOOL.(http://kazpgm.ddo.jp/) End
// 修正BSDライセンス。
// =============================================================
?>

3/03 01:00-02:00 07:00-07:30