himorogiの日記

主にプログラミングに関することなど。少々ハード(電子工作)についても。

Excel Workbook から SQLite データベースを構築するためのツールを PowerShell で整備中。

最初は try{}catch{} でエラー処理てんこ盛りにしようと思っていた。だけど PowerShell ISE 上でスクリプトを走らせるなら、余計な処理せずに ISE のエラーメッセージを素直に見てた方が状況把握しやすいのでエラー処理は省いた。

Unicode text ファイルを SQLIte デフォルトの text ファイルに変換する PowerShell スクリプト

Excel の Unicode text 出力は BOM が付くので SQLite からは読み込めない(はず)。 どうせ BOM 外しに変換するなら、ついでに encoding と separator も変更することにした。 このスクリプトは、chooseCSVFileで選択したtextファイルと同じフォルダにある…

PowerShell から Excel を操作して Workbook を Unicode text として保存するスクリプト

このスクリプトは、chooseExcelFileで選択したExcelWorkbookと同じフォルダにある全てのExcelWorkbookをUnicode textファイルに変換する。 xls2UnicodeTxt と chooseExcelFile は .psm1 としてそのうちモジュール化したい。 # toolXls2UnicodeTxt.ps1 # hand…

MS Access では扱えない 255 以上のカラム数のテーブルを SQLite を使って管理することになった。

データは Excel ファイルで展開されてくるため、Excel のファイルを SQLite で取り込めるように変換する手順をまとめた。 ただExcelが吐き出すテキストファイルフォーマットは、データ透過性が保証されるものが一つもないため、本来ならデータ交換に推奨でき…

PowerShellからExcelが出力したUnicodeテキストをUFT8 BOM無し '|' 区切りに変換

SQLiteデフォルト設定のインポートテキスト形式として保存する方法 SQLite のエンコーディングと区切り文字をデフォルトから変更しない場合は、ExcelからUnicodeテキストとして保存されたファイルを、さらにUTF8 BOM無し'|' 区切りに変更する必要がある。 UT…

PowerShell から ExcelWorkBook を テキストとして保存

PowerShell から Excel.Application オブジェクトを開き、WorkBook を Unicode テキストとして保存する SQLite のデフォルトエンコーディングは UTF8 なので、以下のように PRAGMA encoding = "UFT-16le"エンコーディングをUnicode(LittelEndian)に変更(ATT…

Excel WorkBook をテキストとして保存する場合の挙動の違い

Unicode テキスト(*.txt) Excelから ファイル[名前を付けて保存] ファイルの種類[Unicode テキスト(*.txt)] を選択すると、Unicode(UTF-16 LittelEndian/BOM付き/Tab区切り)テキストとして保存される。 この時、 Cell 中に含まれるHT:horizontal tabulation(…

おまけ:numbers の生成

スクリプトエディタ版 app = Application.currentApplication(); app.includeStandardAdditions =true; function numbers(x){ return ( "0000" + Math.floor( Math.random()*Math.pow(10,x) ) ).substr(-x) } app.displayAlert( numbers( 3 ) + String.fromC…

文字列中の改行の扱い

スクリプトエディタや、Automator の Javascript から、文字列中に改行を埋め込むには、"\n" ではなくString.fromCharCode(13)を使う必要があるようだ。 つまり、エスケープ文字は無視されるためString.fromCharCode(n)を使う。 スクリプトエディタの場合 ap…

Automator で Javascript

Automator でワークフローを開いたら"JavaScript を実行"というアクションが追加されていた。 Yosemite になって Javascript for Automation が追加されたんだから当然のことではあるが。 早速、"JavaScript を実行"のアクションを選択してみたら、以下のよ…

Javascript for Automation で droplet を作る方法

…を知ったので、なんかネタないかと考えていたけど思いつかなかった。 function openDocuments(docs){ app = Application.currentApplication(); app.includeStandardAdditions =true; ... }引数 docs に drag&drop された filepath のリストが格納される。 …

実践

SQL コマンドファイルの作成 sampleSQLcmd.txt の内容 ※ sqliteではカラム名に日本語などを含む場合はsingle-quote (')で囲う。 CREATE TABLE list ( id, title ); INSERT INTO list ( id, title ) values( 1, '天上天下唯我独尊' ); INSERT INTO list ( id,…

準備

PowerShell の console の encoding PowerShell の console はデフォルトで chcp 932 # MS-SJIS一方 SQLite3 は Unicode のみ扱える PowerShell の console から SQlite3 との間で日本語を文字化けせずにやりとりできるようにするため、最初に PowerShell co…

PowerShell から .NetFramework 版 SQLite を使う

まず、.NetFramework 版 SQLite である System.Data.SQLite を入手する。 うちの会社では原則として管理者権限禁止(その都度要申請)なので installer 版ではなく binary 版を落としてくる。 Windows7 なので PowerShell V2.0 及び .NetFrameworks 3.5 環境…

Javascript for Automation で LotoNumbers を生成

Javascript に VisualBasic の Left 関数に相当する機能がなくて不便なので prototype 宣言した app = Application.currentApplication(); app.includeStandardAdditions =true; String.prototype.left = function(l){ return this.substr( (this.length > l…

今日は誕生日だった…

OSX を Yosemite にしたので、ScriptEditor から Javascript でもスクリプト書けるようになった。

app = Application.currentApplication(); app.includeStandardAdditions =true; app.displayAlert( 'Hello World');※ displayAlert や displayDialog を使うときは app.includeStandardAdditions =true; が必要らしい。実行結果 app = Application(<unknown>) app.sy</unknown>…

会社の PC の OS が今年の春から Windows7 に移行した。

これまではちょっとしたタスクの自動化をするときは WSH(主にJavascript)を使ってたが 今はなるべく PowerShell にシフトしている。pipe,pipeline,filter は、けっこう便利。ただし Version 2 なので Linq は自分で(若しくは人様の作った) Library を用…

昨年からずっと忙しくて、いろいろ書きたいネタはあったんだけど、結局まる一年更新さぼってたので軽いネタでとりあえず埋め草。

住所記入欄から都道府県を抽出する ※ 住所文字列より左(前)に空白他、住所以外の文字が入っていないこと。※ 〓→住所文字列格納セル(例:A1) =IF(OR(MID(〓,3,1)="都",MID(〓,3,1)="道",MID(〓,3,1)="府",MID(〓,3,1)="県"),LEFT(〓,3),LEFT(〓,4))OR()の…

おまけ:テーブルの有無確認用

データベース変換やワークシート変換のマクロアクションにしても、今回提供したユーザー関数にしても、インポートやリンクの際に指定した名前のオブジェクトが存在すると上書きしないので失敗する。そこで、インポートやリンクの前に同じ名前のオブジェクト…

ワークシート変換

こちらも第一引数を、"import"|"export"|"link" で指定できるようにした。 DoCmd.TransferSpreadsheet にはテーブルの見出しを使うか使わないかという指定や、レンジの指定もできるけど、そこまで細かい指定に対応するよりは、MS Access とやりとりする必要…

データベース変換

マクロアクションの"データベース変換"も DoCmd.TransferDatabase も呼んでる API は同じだけど、VBA の環境では VBA が式を評価するので、引数に変数やユーザー関数やコントロール参照が指定できる。DoCmd.TransferDatabase の第一引数でインポート|エクス…

前口上

MS Access ではマクロでちょっとしたことをやろうとするとすぐに制約にぶつかって、VBA を使わないと目的が果たせないことが多い。 どうもマクロで完結することはあんまり考えておらず、VBA へ誘うための導入編の扱いではないかと勘繰ってしまう。しかしいま…

本題のまえにまた地震

前回、Access ネタで記事書いたのは地震の当日だったことを、今まですっかり忘れていた。今日もまた揺れたけど、そのうち東京方面に誘発しないか、少し不安。

Access2003以降で Folder/File 選択ダイアログを使う

Access のマクロは、テキストファイルの読み込みは[テキスト変換]、Excelワークシートの読み込みは[ワークシート変換]アクションが使えるが、何れもファイル名を決め打ちしないといけないので、実行時に任意のテキストファイルやワークシートを読み込むこと…

Access2003 以前のマクロで変数を使う

Access2003 のマクロでは変数が使えない。*1代用としてFormのTextBox コントロールをコンテンツホルダーに使ったりすることが多いが、データ保持だけのためのFormを開くのも鬱陶しいのでマクロから呼べるデータ保持用の関数を作ってみた。 Function rdStatic…

twitter の場合

twitter では BASIC認証が使えなくなったので、事前の準備が必要。 google map api より手間がかかりそうなので、こちらは後日別記事で。

gooogle map api で goecodeing する場合

戻り値は XML 形式(KML)若しくは JSON だけど MSXML 使うので KMLフォーマットでも面倒は少ない(はず)。 google map の geocoding service に GET で渡すには http://maps.google.com/maps/api/geocode/output?parametersとすれば良い。 ここで paramate…

WSH(Javascript)+ MSXML で非同期に WebAPI を叩く。

IE を Automation で呼ばなくても MSXML から呼べば良い(らしい)。 Windows機を実家の親爺に譲ってしまったので、火曜日まで検証できない。いや、火曜日は連休の休み明けだから仕事溜まって無理かも。 だけど多分これで良いはず。 以下のとおり非同期処理…

WSH から IE6 を DialogWindow の代用として操作

WSH には HTMLApplication という IE 類似(ほとんど実行 engine は同じ)の機能があるので WSH で GUI アプリケーションを構築する場合には HTA(HTMLApplication)を使うことが多い(と言うほどには一般には知られてない気もするが)。 しかし、HTA では j…