Excelで報告書の雛形を作っておいて、言語アプリで項目を埋めて報告書を仕上げる業務フローは多くあります。
タイトル欄、内容欄、規定値、入力欄など、項目の性質は幾つか種類に分かれます。
例
タイトル欄 => 製品名
内容欄 => ハイブリット電球
規程最大長 => 135mm
個別実測値 => (実際に測定して、Excelシートに記入)
(*)製品規格通りに生産されたかのチェックシートとして使用
内容欄と、規程最大長は 言語で埋めて、個別実測値欄のみ入力する仕様です。
入力欄は個別実測値のみなので、規定最大長などの個別実測値欄以外はロックしたいです。
これが、一筋縄はできない。
そもそも、EXCELのセルロックの手順がスッキリしない。セルの属性で「保護」頁に「ロック」のチェックボックスがあるのだが、何故か。デフォルトでチェックが入っている。
ても、シート保護しないと、有効にならない。
言語でシートの項目に値を埋めていくのは ADO.NET の Excel-Provider を使えば、 excel.object を介さずにできるので、便利です。
(*)Excel objectは、異常時にタスクが残ったりするので、、いろいろ回避策が必要なので、使いたくない。
でも、予めシート保護していたら、項目書き込みができないのです。雛形レベルでシート保護はできない。
言語で、項目を埋めて、シート保護して、ユーザーに公開したい。
シート保護のステートメントをマクロで組み、(ActiveSheet.Protect,ActiveWorkbook.Save)
これは、 Excel Objectを介して、それほコールする。(xlApp.run("SheetHogo"))
どうにか、動作はしているが、スマートとは言えない。
VSTOを使えばスマートになるのかも知れないが、Visual Stdio 2005だと、ライセンスがない。
言語で埋め込むのでなく、ExcelマクロがDBを見に行って埋め込んで、自分でロックするのかな。
でも、VBAでDataアクセス処理は書きたくない.....(我が儘だなぁ)
ありがちな業務フローだと思うのだが、他の人はどのようにしているのだろう。
0 件のコメント:
コメントを投稿