EncCodeの修正版

以前にSimpleCodeの代用品として作成したEncCode.htaですが、前記事のように、WordPress2.5.1ではペーストしたコードが文字化けしてしまうため、それに対応するように修正しました。
以前のバージョンをご利用の方は新しいバージョンに差し替えてご利用ください。

enccode02.lzh

ここのブログのコードは一応すべてこのEncCodeを使っていますので、自分で気づいた点があれば修正していますが、もし何かお気づきの点がありましたらご指摘いただけると嬉しいです。


日付が土日祝日かを判別するVBA関数

前の記事のスクリプトで祝日データが取得できたので、VBAでそれを利用するサンプルとして日付が土日祝日かを判別する関数を紹介します。
前記事のスクリプトではタブ区切りテキスト形式で出力していましたが、今回はADOで利用しやすいCSV形式を利用します。
前記事のスクリプトをCSV出力に変更するためには、Else以降の部分を以下のものに差し替えます。

Else
  Set objFS = CreateObject("Scripting.FileSystemObject")
  Set objText = objFS.CreateTextFile(OUTPUTFILE)
  Set entrys = xmlDoc.selectNodes("//feed/entry")
    objText.Write("hdate,hname" & VbCr)
  For Each entry In entrys
    objText.Write(Replace(entry.selectSingleNode("gd:when").getAttribute("startTime"), "-", "/"))
    objText.Write("," & entry.selectSingleNode("title").text & VbCr)
  Next
  objText.Close
End If

すでに取得したデータがある場合は、エディタ等でタブを”,”に変更して、一行目に”hdate,hname”という行を追加してください。
例:
hdate,hname
2008/09/23,秋分の日
2008/03/20,春分の日

以下からがVBA関数のソースです。ADOを利用しているので実行にはMicrosoft ActiveX Data Objectsへの参照設定が必要です。
IsHoliday(date)で土日祝日のいずれかならばTrue、それ以外ならFalseを返します。祝日データの場所はそれぞれの環境に合わせて修正してください。

'祝日データの場所設定(ファイルのフォルダパスとファイル名)
Const HOLIDAYDATADIR = "c:¥calendar¥"
Const HOLIDAYDATAFILENAME = "holiday.txt"
'
'入力日が土日祝日かどうかを返す
Public Function IsHoliday(ByVal paramDate As Date) As Boolean
    Dim objRS As Object
    Dim objConn As Object
    '土日ならTrue
    If IsSaturdayorSunday(paramDate) = True Then
        IsHoliday = True
        Exit Function
    End If
    'CSVデータから祝日を検索してレコードがあればTrue
    Set objConn = New ADODB.Connection
    Set objRS = New Recordset
    objConn.Open "Driver={Microsoft Text Driver (*.txt; *.csv)};DBQ=" & HOLIDAYDATADIR & ";"
    objRS.ActiveConnection = objConn
    objRS.Source = "SELECT * FROM " & HOLIDAYDATAFILENAME & " WHERE hdate LIKE '" & paramDate & "'"
    objRS.Open
    If objRS.EOF Then
        IsHoliday = False
    Else
        IsHoliday = True
    End If
    objRS.Close
    objConn.Close
End Function
'
'入力日が土日かどうかを返す
Public Function IsSaturdayorSunday(ByVal paramDate As Date) As Boolean
    Dim tmpWeekDay As Integer
    tmpWeekDay = Weekday(paramDate)
    If tmpWeekDay = vbSunday Or tmpWeekDay = vbSaturday Then
        IsSaturdayorSunday = True
    Else
        IsSaturdayorSunday = False
    End If
End Function


Google Calendarの祝日データフィードからテキスト生成

休日のお知らせの生成や営業日の自動算出など、祝日のデータが必要になることはよくありますが、カレンダーから手入力というのも何ですので、Googleカレンダーの祝日データフィードから祝日名と日付のみ抽出してテキストにするVBScriptを作ってみました。Dimの部分を修正すればVBAにも応用できます。
なお、Googleカレンダーの祝日データフィードに関してはこちらの記事を参考にさせていただきました。

'Google Calendarから祝日データを取得
Option Explicit
'開始日
Const START_DATE="2008-01-01"
'終了日
Const END_DATE = "2008-12-31"
'保存ファイル名
Const OUTPUTFILE = "holiday.txt"
Dim xmlUrl, xmlDoc, i, entrys, entry, objFS, objText
xmlUrl="http://www.google.com/calendar/feeds/" &_
  "japanese@holiday.calendar.google.com/public/" &_
  "full-noattendees?start-min=" & START_DATE & "&start-max=" & END_DATE
Set xmlDoc = CreateObject("Microsoft.XMLDOM")
xmlDoc.async = False
If xmlDoc.Load(xmlUrl) = False then
  Msgbox("フィードの読み込みに失敗しました")
Else
  Set objFS = CreateObject("Scripting.FileSystemObject")
  Set objText = objFS.CreateTextFile(OUTPUTFILE)
  Set entrys = xmlDoc.selectNodes("//feed/entry")
  For Each entry In entrys
    objText.Write(Replace(entry.selectSingleNode("gd:when").getAttribute("startTime"), "-", "/"))
    objText.Write(vbTab & entry.selectSingleNode("title").text & VbCr)
  Next
  objText.Close
End If


WSHでのファイルの最終更新日の変更

スクリプト作成の仕事をしていると、WSHからファイルの最終更新日を変更しなくてはならないことが、ごくたま~にですがあります。

ですが、よく使われているFileSystemObjectのDateLastModifiedプロパティは読み取り専用ですので、変更することができません。そのためWSHではファイルの更新日の変更はできないと思われているのですが、実はShellオブジェクト内のModifyDateプロパティを利用すると変更することができます。

この方法、結構前から知られていたと思うんですが、つい最近になって公式サイトに載りました。

 http://technet.microsoft.com/ja-jp/magazine/cc194399.aspx

検索するといくつか出てくる割には書籍とかでは全く扱われていないので、保証外の利用法なのかと思っていましたが、これで安心して利用できます(これまでも使っていましたが)。


SimpleCodeプラグインの代用品を作ってみた

WordPressでよくつかわれているプラグインにSimpleCodeというものがあります。
これは記事にPHPやHTMLなどのソースを入れたいときに記号などがHTMLタグとして判別されないよう、文字参照に変換してくれるもので、非常に便利なのですが、一度記事の編集画面を抜けないと利用できないとか、日本語が文字化けしたりとかで、ちょっと使いにくい点もあり、もしかしたらこれは独立したアプリのほうが使いやすいのではないかと思い、同様な動作をするHTAアプリケーションを作ってみました。HTAなのでWindowsでしか動作しませんが。

以下のスクリプトをコピーして、ファイル名を「EncCode.hta」で保存するか、アーカイブをダウンロードして解凍ください。ファイルをダブルクリックすれば実行されます。
EncCode画面
使用法に関しては別に説明するまでもないと思いますが、ソースコード欄にソースを入力して「変換」ボタンを押せば、下のエンコード欄に変換されたコードが表示されます。これを記事編集の画面をコードのモードにてペーストしてください。なお再編集するとWordPressの性質上文字化けしてしまう可能性があります。その際は再ペーストしてください。
「変換」以外のボタンは、
ClipBoard取込=クリップボードから取り込んで変換
ClipBoard自動=クリップボードから取り込んで変換してクリップボードにコピー
となっています。クリップボードを操作するために裏でIEを呼び出しますので、環境によってはレスポンスが悪いかもしれません。
また、変換するコード内に空行がある場合、WordPressはそこでコードが終わりと判別してしまいますので、コード内に空行が入らないように注意して下さい。

※2008/4/30 WordPress2.5.1でのダブルクォーテーション、シングルクォーテーションの文字化けに対する修正を行いました。以前のものをご利用の方は新しいバージョンに差し替えてご利用ください。

<HTA:APPLICATION SCROLL="no">
<html>
  <head>
    <title>EncCode</title>
  </head>
<body>
<h2>EncCode</h2>
<form id="Form1">
  <p>ソースコード:<br>
  <textarea id="TextBox1" rows="10" cols="40"></textarea></p>
  <p>エンコードHTML:<br>
  <textarea id="TextBox2" rows="10" cols="40"></textarea></p>
  <p><input type="button" id="CommandButton1" value="変換"> <input type="button" id="CommandButton2" value="ClipBoard取込"> <input type="button" id="CommandButton3" value="ClipBoard自動"></p>
</form>
'
<script language="VBScript">
Option Explicit
Sub Window_onLoad
  Call Window.ResizeTo(340,500)
  Form1.TextBox1.focus()
End Sub
'
Sub CommandButton1_onClick
  Call Encode()
End Sub
'
Sub CommandButton2_onClick
  Form1.TextBox1.value = GetClipBoard()
  Call Encode()
End Sub
'
Sub CommandButton3_onClick
  Form1.TextBox1.value = GetClipBoard()
  Call Encode()
  SetClipBoard(Form1.TextBox2.value)
End Sub
'
Sub Encode()
  Dim sourceCode
  sourceCode=Form1.TextBox1.value
  sourceCode=HTMLEncode(sourceCode)
  sourceCode="<code>" + sourceCode + "</code>"
  Form1.TextBox2.value= sourceCode
  Form1.TextBox2.select()
End Sub
'
Function HTMLEncode(byVal inString)
  inString = Replace(inString, "&", "&amp;")
  inString = Replace(inString, "<", "&lt;")
  inString = Replace(inString, ">", "&gt;")
  inString = Replace(inString, """", "&#34;")
  inString = Replace(inString, "¥", "&yen;")
  inString = Replace(inString, "'", "&#39;")
  inString = Replace(inString, "  ", "&#160;&#160;")
  inString = Replace(inString, vbTab, "&#160;&#160;")
'  以下はWordPress以外の場合に使い分け
'  inString = Replace(inString, vbCr, "<br>" + vbCr)
'  inString = Replace(inString, vbTab, "<pre>" + vbTab + "</pre>")
'  inString = Replace(inString, "|", "&brvbar;")
  HTMLEncode = inString
End Function
'
Function GetClipBoard()
  Dim objIE
  Set objIE = CreateObject("InternetExplorer.Application")
  objIE.Navigate("about:blank")
  GetClipBoard = objIE.document.parentwindow.clipboardData.GetData("text")
  objIE.Quit
End Function
'
Sub SetClipBoard(byVal inString)
  Dim objIE
  Set objIE = CreateObject("InternetExplorer.Application")
  objIE.Navigate("about:blank")
  objIE.Document.ParentWindow.ClipboardData.SetData "Text", inString
  objIE.Quit
End Sub
</script>
</body>
</html>

アーカイブ:enccode02.lzh


    サイト内検索

    プロフィール

  • 顔絵
  • kotani(こたに)

    30台後半になって突然脱サラ。フリーのスクリプト系プログラマーとして独立を目論む謎のおやぢ。東京都在住。趣味は古本屋巡り、文具いぢり、機械いぢり、B級グルメ探索等々多岐にわたる。PCを使う作業に関しては何でもかんでも自動化したがる自動化オタク。