by manamana
21. 6月 2011 01:34
最近 PowerShell にはまっています。
PowerShell は、Win7/Server 2008R2 から 「標準搭載」 されたシェルスクリプト環境で、
Active Directory, Exchange, SQL Server の管理に深く関わっています・・・というか便利過ぎます。
関連情報はそれなりに出ていますが、すいません、正直無視していました。
現場で使ってみて、目から鱗が落ちました。 これはすばらしい環境です。
で、タイトルの内容です。
PowerShell から Excel を呼び出して操作する方法はよく知られていますが、
動作中の Excel を開く技はそれほど知られていないと思うので紹介します。
System.Runtime.InteropServices の機能を使い、動作中のオブジェクトを捕まえます。
Excel.Application のオブジェクトを捕まえて、Open中のブックと同名の WorkBook を取得する
ファンクション Get-ExcelBook() はこんな感じになります。
Function Get-ExcelBook($BookName)
{
#=== 稼働中の Excel を捕まえる
$ex = [System.Runtime.InteropServices.Marshal]::GetActiveObject("Excel.Application")
if ($ex -eq $null) { return $null }
#=== Open中のWorkBookから目的のBookを見つける
foreach ($bk in $ex.WorkBooks)
{
if ($bk.Name -eq $BookName)# 見つかった!
{
return $bk
}
}
return $null
}
"Book1.xlsx" を開いている状態で、次のコマンドを実行してやれば、A1-A10に "ABC" と文字を打ちます。
$wb = Get-ExcelBook("Book1.xlsx")
for ($i = 1; $i -le 10; $i++)
{
$cell = "A"+$i
$wb.worksheets.item(1).Range($cell).Value2= "ABC"
}
従来のVBAは、.Net Framework に未対応であり、時代遅れの感があります。
といって、VSTO は配布が難しく、一般的ではないと感じています。
こうなったら、Office のマクロ環境が PowerShell になれば良いのにと思う今日この頃です。
(2013/01/24 追記)
発想を変えて、ExcelとPowerShellを融合させてみました。
d65617a1-558c-4f58-a5aa-9eef1e379694|0|.0|96d5b379-7e1d-4dac-a6ba-1e50db561b04
Tags:
Development
by manamana
24. 12月 2010 16:23
iText.NET を使ったプロジェクトを IIS(x64) の環境設定したところ、次のようなエラー表示がされました。
Apache.Crimson.dll の読み込みに失敗している・・・ 開発環境ではとしっかり動いているのだが??
iText.NET は32bit環境で作られていて、64bitに対応する予定はありません。
通常の Windows アプリの場合、WOW の働きで 32bit アプリがそのまま動きますが、
IIS から iText.NET を利用する場合には、アプリケーションプール-詳細設定で、
32bitアプリの有効化を明示してやる必要があるのでした。忘れていたけど...orz
Visual Studio のデバッグ環境ではこの設定が自動的に行われているのでしょう。
また忘れないようにメモメモ。
40071a20-91db-4e75-93b9-dd8abe7e08f0|0|.0|96d5b379-7e1d-4dac-a6ba-1e50db561b04
Tags:
Development | Server
by manamana
14. 9月 2010 22:23
とある Excel データを Access に転送していたのですが、ちょっとはまりました。
↑を見てもらうと分かりますが、セルには 12345 と入力していますが、表示は *12,345 です。
これは、セルの書式をユーザー定義する事で実現していました。
ですから、この様に式で参照すると 12345 と表示されます。 ※F1の書式は「標準」
-->
Excel -> Access へコピペすると、 何故か '*' 部分が消えてしまいます。 (※Access の Field はどちらも Text 型)
「',' はいいけど、どうしても '*' 付きでコピペしたい」 としばし悩み、結局ユーザー関数を作りました。
単純に、Range.Text() で String を返すだけの関数を用意します。
それをワークシート関数の様に利用するだけです。
-->
これなら Excel -> Access へコピペしても '*' は消えません ・・・ 理由はわからないけど、まぁいいや。
9/15 追記
寝ながら考えた理由: Excel->Access のコピペ時に "標準" の書式に整形するから
今回のようなコピペをしたいなら、 Excel-> Text Editor -> Access の順にコピペすれば良い事に気づきました。
クリップボード上のデータを調査すれば裏は取れると思いますが、さすがにそれは面倒だな~
3167c0dd-6f4f-4428-aa53-21177c16fd71|0|.0|96d5b379-7e1d-4dac-a6ba-1e50db561b04
Tags:
Development
by manamana
16. 8月 2010 15:32
ASP.NET Dynamic Data を調査していてはまったので、その部分をメモ。
ASP.NET Dynamic Data は DB から自動的に CRUD コードを作成してくれる便利機能です。
デザイナーが自動的にコードを作るのは良いけど、出力されたコードに手を入れるのは(ほぼ)不可能です。
それを回避するために、「メタデータ・クラス」が用意されています。
メタデータ・クラスは、データの構成や挙動を定義するための特殊なクラスで、デザイナーとは独立して編集可能です。
メタデータ・クラスで利用可能な主な属性
分類 | 属性 | 概要 | 基本 | ScaffoldColumn(flag) | 対象のフィールドを自動生成の対象とするか | ScaffoldTable(flag) | 対象のテーブルを自動生成の対象とするか | DefaultValue(value) | 新規データ入力時に適用するデフォルト値 | 表示 | Description(msg) | データ入力時にツールチップとして表示するメッセージ | DisplayColumn(displayCol [,sortCol [,sortDesc]]) | 外部キーで関連付けられた参照先テーブルの表示すべき列を指定(sortDescはsortCol列について降順でソートするか) | DisplayFormat() | データ・フィールドを表示するための書式を指定 プロパティ | 概要 | ApplyFormatInEditMode | 編集モード時に書式文字列を適用するか | ConvertEmptyStringToNull | 空文字列をNothing/nullに自動変換するか | DataFormatString | 書式文字列 | NullDisplayText | 値がNothing/nullのときの表示テキスト | | | UIHint(name) | フィールド値の表示/編集に使用するユーザー・コントロールを指定 | 検証 | Range(min, max) | データ・フィールドが取り得る値の範囲を定義 | RegularExpression(pattern) | 指定された正規表現でフィールド値を検証 | Required() | フィールド値が必須かどうかを指定 | StringLength(max) | フィールドが受け入れ可能な最大文字数 | DataType(type) | データ・フィールドと関連付いた追加的な型情報を指定 | Validation() | 検証にかかわる属性の基本クラス(Validation属性のプロパティは、すべての検証属性で共通して利用可) プロパティ | 概要 | ErrorMessage | 検証エラー時に表示するエラー・メッセージ | ErrorMessageResourceType | エラー・メッセージとして使用するリソースの型 | ErrorMessageResourceName | エラー・メッセージとして使用するリソースの名前 | | | |
Partial 機能を使ってカスタマイズ部分を独立させ、それらを特定の約束事(この場合 MetadataType)で関連付ける事により、
特定のプロパティ(≒フィールド)の出力や値の検査を調節できるわけです。
Visual Studio では、いろいろなコードが自動作成されて便利ですが、カスタマイズ時にはかえって大変でした。
この仕組みも初めは???でしたが、手放せない機能になりそうです。
5ca55952-c2e2-443a-888e-c7c404bbbe7c|0|.0|96d5b379-7e1d-4dac-a6ba-1e50db561b04
Tags:
Development
by manamana
7. 4月 2010 11:36
長らくテスト版が続いていた VS2010 ですが、4/12 にリリースされるみたいです。
というのは、MSDN の延長の絡みでそんな情報を得たからです。
究極のオファー ~[期間限定]上位エディションへの自動移行~ (microsoft)
「Visual Studio 2010 のリリース時に所有している Visual Studio with MSDN Subscription の
レベルに応じた各エディションへ移行することができます」との事で、それが 4/12 という話。
マイクロソフト、4月12日に謎の発表イベントを予告 (engadget)
一瞬これの事かと思いましたが・・・さすがに違うでしょうね。
Visual Studio 2010 Ready Day (microsoft)
こっちは VS2010 イベントの告知です。ラウンチツアーが全国各地で行われるようです。
VS2010 の特徴は・・・より完成度の上がった統合開発環境でしょうか??
Expression との統合はありがたいですし、話題の Azure に対応しているので要注目です。
VSTO 絡みだと、Office 2010 がまだなので大した情報はありません。
でも、C# でもオプション引数が可能になるのは一部の人は喜びそうです。(C#は魂を売ったとも言えるけど)
VS の機能としては、(Office開発が出来る)Professional で満足していますが、自動移行なら試してみたいです。
あぁ、でもその前に、延長の資金を捻り出さないとね。
be5f672d-0fda-4586-8be8-716379b8c92b|0|.0|96d5b379-7e1d-4dac-a6ba-1e50db561b04
Tags:
Development