Excel管理表をMS-ACCESS2010に移行する(その3)
Excel管理表をMS-ACCESS2010に移行した後日談。
Excel管理表に”コメント”をつけていたんだけど、ACCESSにないのだが?
という問い合わせがあって、何を言っているのか分からなかった。
移行する前のExcel管理表を開いてみたところ、”セルにコメントの挿入”でコメントを書いていた。
あぁ~これの事かと。
さて、事態は把握できたものの、Excelのセルに付けられたコメントをごっそりACCESSに移行する方法が分かりません。
どうしたものかなぁ~とグーグル先生に聞いてみると、VBAでコードを書けばできるらしいことが分かったので、ソフト屋さんに事情を話して作ってもらいました。
Excel内のコメントだけを抽出し、別のシートに出力したものをACCESSにインポートしてIDで紐付けするということで解決しました。
それにしても、ググって見たところ、結構コメントだけを抽出したいというニーズはあるようなので、マイクロソフト様には標準でその機能を付けてもらいたいなぁ~
...などと思った今日この頃。
考えてみたら、Excel管理台帳が出来る前の時代は、紙に手書きしてファイリングしていたんだよなぁ~と。
ACCESSの次は何に移行するのかな?
それは次の世代に託そう。
Excel管理表をMS-ACCESS2010に移行する(その2)
昨日の続き。
Excelの表で、表の一部にセルの保護がかかっていて、その部分は上級職員しか編集できず、それ以外の部分は、一般職員でも編集できるようなものを、
どのようにしたら、MS-ACCESS2010に移行できるか? というお話の続き。
色々試行錯誤した結果、データベースを分割して、フロントエンドとバックエンドに分けて、バックエンド側のファイルにアクセス権の設定をしてやると、フロントエンド側のファイルからアクセスしても書き込みが出来ないことがわかりました。
そこで、Excelの表を「上級職員のみが編集できる部分」と「一般職員でも編集できる部分」に分けて、それぞれ個別のテーブルとして、MS-ACCESSにインポートし、
フォーム上でそれらを結合してみたらどうか? と試してみたら、うまくいきました。
注意点は、表を分割する際に、ラインナンバーのような「共通の通し番号」を、分割した両方のファイルに追記しておくことです(表の中に空白のセルがあっても、インポート時に削除されるなどして表の対応がずれないように)。
リレーションシップでIDを元に結合してやると「上級」対「一般職員」のテーブルが
1対1で紐付けされます。
あとは、上級職員用のファイルに対してアクセス権の設定を変更し、
「一般職員」の書き込み権限をなくし、読み取り専用にするだけでOKです。
こうすると、「上級職員」と「一般職員」で同じフロントエンド・ファイルを使用しても、特定の列は「上級職員」だけが編集でき、それ以外の部分は「一般職員」にも編集が出来るようになり、Excelによる運用からそれほど違和感なく移行できるようです。
ちなみに、「上級職員」の人からの感想では、Excelでは保護がかかっているセルを編集するさいにパスワードの入力が必要だったが、ACCESSではそれがないので楽になった。 と喜びの声が聞かれました。
「一般職員」の方は、誰かがExcelファイルを開きっぱなしで編集できない。といったことがなくなり、便利になったとのこと。
Win-Winの関係になったようです。
MS-ACCESSをいじり始めて日は浅いですが、
これはいいものです(ガンダムの、あの壷はいいものだ的な)。
Excel管理表をMS-ACCESS2010に移行する
Excelで管理していた表をMS-ACCESS2010に移行した際の記録です。
職場でちょっとした管理表はExcelで表を作り、そのファイルを共有フォルダに置いて適宜書き換えるなどの運用をしていました。
使う人が増えてくると、「誰かがファイルを開いていると、編集できない」という事態がよく発生するようになりました。
まっさきに思いつくのはExcelのブック共有ですが、おてがるに複数人で同時に編集できる反面、ファイルが壊れてしまう...ということが起きます。
世の中のほかの職場はどうしてるのかしら? などと思いググって見たところ、
Excelの表をMS-ACCESSというデータベースアプリにインポートして、複数人で同時に編集するという運用をされているようでした。
ただ、Excelの表をインポートするだけで良いのなら、話は簡単なのですが、
問題は、このExcelの表にセルの保護がかかっている部分があり、
表の左半分は管理職しか編集できないようにし、
表の右側は誰でも編集可能...といったアクセス制限が行われていたことでした。
どうやって、それをMS-ACCESSで実現するか? といったところで手探り状態でなんとかうまくいったので、その記録です。
MS-ACCESS2003までは、データベースファイルに対してユーザー単位でのアクセス制限を設けることができましたが、ACCESS2010では、その機能がなくなっています。
Excelのように特定のセルに対してパスワードで保護できないか? とも考えましたが、
ACCESSのパスワードはデータベースの閲覧が出来る・出来ないの2択で、特定のセルだけ、保護したいということはできないことがわかりました。
さて、どうするか...続く
windowsでHyper Estraierを用いた全文検索システムの構築
ちょっと構築してみて、驚くほど簡単だったのと、凄く便利だったのだけれども、
windows環境特有のはまった点などをメモ。
Q.そもそも、全文検索ってなによ?
A.MS-Office文書やPDFファイル(テキスト選択できるもの、
スキャナでとった画像ではないもの)の文書の中身の単語で検索できるので便利。
はまりポイント
1. 日本語Windowsの文字コードがSJISなのでハマル
Windows版Hyper Estraier特有の問題ですが、
SJISの"0x5C"問題(エスケープシーケンス記号問題)というのにハマります。
具体例を挙げると、フォルダ名の末尾”~表”になっているフォルダに
保存されているファイルがデータベースに登録できません。
この問題を修正されたバイナリを公開されている方がいましたので、
詳しくはそちらを参照ください。
2. estseek.confの設定でハマル
以下の2行を環境に合わせて書き換えなければなりませんが、
ここで、ハマりました。
replace:ほげほげ
showlreal: ふがふが
●設定その1
showlreal:true とすると、ファイルへのパスはWindowsのパスのまま扱われます。
Windowsファイルサーバ上の共有フォルダ内に
検索対象のファイルがある場合などは、ここをtrueに設定します。
これで、ブラウザで検索したときに、検索結果に見えるアドレスが
\\サーバ名\フォルダ名\ファイル名
のようなアドレスになります。
●設定その2
showlreal:false とすると、ファイルへのパスはUTF-8のURL形式として扱われます。
Hyper Estraierが動作しているサーバ上(ローカルフォルダ)に
検索対象となるファイルがある場合は、ここをfalseに設定します。
このままだと、ブラウザから見えるURLの部分がC:\~で始まる
ローカルパスのアドレスになってしまうので、
続いてreplace:行を書き換えます。
↓こちらのサイトを参考にさせていただきました。
Hyper Estraier を Windows + Apache2 にインストール
replace: ^file:///C|/Program%20Files/html/{{!}}http://www.hoge.com/
のように、半角スペースを%20に置換して入力しなければなりません。
普通に半角スペースで入れていたら置換されずにハマリました。
上記の1と2の設定方法を踏まえて、
Windowsファイルサーバ上の共有フォルダ内のドキュメントと、
Hyper Estraierが動作しているサーバ上のドキュメントを
別々のデータベースとして管理する場合は以上で終了ですが、
ひとまとめにして検索できるデータベースを作りたい場合には、
どうしたらよいのか?? というところでハマリました。
やるべきことは...
showlreal:trueに設定する。
これで、
Windowsファイルサーバ上の共有フォルダ内のドキュメントにはリンクから飛べる
逆にHyper Estraierが動作しているサーバ上のドキュメントには飛べない。
じゃあ
showlreal:falseに設定する。
Windowsファイルサーバ上の共有フォルダ内のドキュメントには飛べない
逆にHyper Estraierが動作しているサーバ上のドキュメントには飛べる。
うん逆転したね。
おいおい、どうしたらいいんだってばよ...
色々試してたどり着いた結果...
showlreal:trueに設定する。
replace:
ほげほげを
replace: ^file:///C|/Program%20Files/html/{{!}}http://www.hoge.com/
↓
replace: ^C:\\Program Files\\html\\{{!}}http://www.hoge.com/
のようにWindowsのパス表記に書き換える!!
表示上バックスラッシュ”C:\”で表示されてしまいますが、
”C:¥¥”のように読み替えてください
というオチでした。 はい。
分からなかったよ...
showlreal:true / false を行ったりきたりして、もしかして true に設定したら
replaceが効かなくなるのかしら? とかあらぬ方向に迷い込んでました。
showlreal:false UTF-8のURL形式
showlreal:true 日本語Windows標準のSJIS形式
に変わるので、それにあわせてreplaceの行もSJIS形式で書き直さないとダメだったんですねー。
分かってしまえば簡単なことですが、分からないとハマリます。
テスト
てすと本文