共有フォルダ上Excelファイルでよくあるトラブル
- 組織で仕事をしていると、複数人で共有したい情報を共有フォルダ上に置き、メンバー全員が閲覧することはよくあるでしょう。大規模開発等ではない限り、一人の担当が該当コンテンツを編集/管理(*1)し、皆がそれを見るというパターンが事務仕事では多いかなと思います。
- この情報...データファイルが、例えば毎日の変動をレポートする類のものであれば、当然毎日更新が入ります。そしてデータがExcelファイルだった場合、下記のような問題がよく起きているのではないでしょうか。
- 編集担当が更新しようとしたが、誰かがファイルを開いているため編集/更新できない
- 頻繁にファイルが壊れてしまう
- 毎日更新データは、その鮮度と正確性が重要なため、「更新できない/データ破損」は非常に大きな問題となります。
- これは「絶対に対策すべき問題」として扱われるため、その対策が「どんなにメチャクチャ」でも組織としてメンバーは「従わざるを得ない」状況になりがちです。
-
(不機嫌そうな顔で)〇〇さん、更新できないのでExcel閉じてもらえませんか?
-
8:00〜9:00はファイルを閲覧しないルールなのに誰かが開いています!!
- つまり「見るべき情報」を「見ると怒られる」かもしれない...「ちょっと何言ってるか分からない」案件ですね。しかもこれだけギスギスした感じなのに、ファイル破損対策としては全く意味がありません。
- また「編集できない」の暫定対策として、ファイル名を変えて編集したデータを置くというのもありますが、同種のファイルが複数置かれて、「何を見るべきかわからない」という状況もよくあるでしょう。
素朴な手しか取れない...ならばショートカットを使おう
- こういった場合は「素朴な改善案」(*2)を与えることが必須です。理由は...想像に難くないでしょう。そんなわけでショートカットを使おうというのが改善案になります。
- 毎日の編集/更新データには日付等を付けて "共有データ.20240927.xlsx" 等とし、メンバに共有を通知するフォルダとは別の場所..."公開データ"フォルダ等に置きます。
- メンバに通知/連絡するのは、別のフォルダ..."閲覧データ"フォルダに置いてあるショートカットです。ショートカットの名前からは日付を抜いて "共有データ.xlsx(.lnk)" とします。次の日のデータ更新では、"共有データ.xlsx(.lnk)" の参照先を "共有データ.20240928.xlsx" に変更すれば良いわけです。
- あとはデータ破損対策ですが、これは "編集データ"フォルダに、"共有データ.20240927.xlsx" のコピーを置きます。共有フォルダに置く以上閲覧データの破損事故は避けられないからです。編集担当から見ると"編集データ"フォルダが自分の扱うデータの置き場所となります。
- 言葉だとわかりにくいので、データの配置を図にすると下記のようになります。
Figure 1: ショートカット/閲覧用/編集用データの配置
- 次の日データ更新をする場合は、①編集データフォルダで作成/更新後、②公開データフォルダへコピーし、③閲覧データフォルダのショートカットリンク先を変更します。
Figure 2: データ更新の手順
- このように①②③と一定の手順になるので、ITが苦手でもWindowsを扱えれば遂行可能かつ冒頭のよくあるトラブルを避けることができるようになります。あ、古いファイルの削除ルールも決めて手順に入れて下さいね。
一定の手順なら自動化したいと思うはず
- ルーチンワークにはミスが許されないものも多いです。しかし人手でやると「どうしてもミスは起きます」。特に「単なる操作」の場合「ミスの影響がほとんど見えない」ので見過ごされ、その影響が後になって問題となることもあるでしょう。
- 例えば先のFigure 2で示した手順も、リンク先のファイル名を間違えて違うデータを見せるとか起きそうですよね。だからこういった操作はできるだけ自動化したいわけですが、ここから先は担当の個人スキルに依存(*3)してきます。
- 話を戻して、データのコピーであればバッチファイルなどでコマンド化することは容易でしょう。一点「うん?」と思うのは「ショートカット」の扱いですね。コマンドプロンプト...バッチファイルではショートカット作成のコマンドがありません。VBS/Power Shellで対応します。下記はVBS(WSH)の例です。
'ショートカットファイル名
Dim strFpah: strFpath="共有データ.xlsx.lnk"
'ファイルシステムObject取得
Dim objFs: Set objFs = CreateObject("Scripting.FileSystemObject")
'ショートカット(既存)削除
If objFs.FileExists(strFpath) Then
objFS.DeleteFile strFPath
End If
'WScript.Shellオブジェクト取得
Dim objWsh: Set objWsh = CreateObject("WScript.Shell")
'ショートカットオブジェクト取得
Dim objShc: Set objShc = objWsh.CreateShortcut(strFpath)
'ショートカットファイルパス設定
objShc.TargetPath = "共有データ.20240928.xlsx"
'ショートカット(新規)作成
objShc.Save
'オブジェクト解放
Set objShc = Nothing
Set objWsh = Nothing
Set objFs = Nothing
ですが私の場合ツール作成にPerlを使うことが多いので、Perlからのショートカット操作方法を調べたところ、Win32::Shortcutがありました。尚、標準モジュールではないのでCPANからインストールが必要です。
例えば、ショートカットの参照先を変更するには、下記のようにします。
#!perl -w
use Win32::Shortcut;
use Encode;
use strict;
{
my $o_link = Win32::Shortcut->new(); # Win32::Shortcutオブジェクト作成
$o_link->Load("共有データ.xlsx.lnk"); # ショートカット読み込み(.lnk付くことに注意)
my $r_path_pre = $o_link->{Path}; # 参照パス取得
print "参照パス変更前: [$r_path_pre].\n";
my $r_path_mod_utf8 = Encode::decode('cp932', $r_path_pre); # utf-8へ(正規表現使用のため)
$r_path_mod_utf8 =~ s/\d{8}\.xlsx/20240928.xlsx/; # 参照ファイル名変更
my $r_path_mod = Encode::encode('cp932', $r_path_mod_utf8); # cp932へ戻し
$o_link->{Path} = $r_path_mod; # 参照パス変更
my $r_path_post = $o_link->{Path}; # 確認のため再度取得
print "参照パス変更後: [$r_path_post].\n";
$o_link->Save(); # 変更結果をショートカットファイルへ反映
$o_link->Close(); # オブジェクトクローズ
}
>test.pl
参照パス変更前: [...略... 公開データ\共有データ.20240927.xlsx].
参照パス変更後: [...略... 公開データ\共有データ.20240928.xlsx].
実際にショートカットのプロパティを見ると変更されていることがわかります。
Figure 3: ショートカットプロパティ変更(クリックで拡大)
ショートカット処理も自動化に組み込むことで、共有フォルダ上ファイルのトラブル減少に繋がれば良いなと思っています。
|