Excelを開いたままでPowerShell

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を融合させてみました。

Tags:

Development

IIS(x64) で 32bit DLL を使う

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 のデバッグ環境ではこの設定が自動的に行われているのでしょう。
また忘れないようにメモメモ。

Tags:

Development | Server

Excelセルを表示そのままAccessにコピペ

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 の順にコピペすれば良い事に気づきました。
クリップボード上のデータを調査すれば裏は取れると思いますが、さすがにそれは面倒だな~

 

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 では、いろいろなコードが自動作成されて便利ですが、カスタマイズ時にはかえって大変でした。
この仕組みも初めは???でしたが、手放せない機能になりそうです。

Tags:

Development

VS2010 究極のオファー

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 で満足していますが、自動移行なら試してみたいです。 
あぁ、でもその前に、延長の資金を捻り出さないとね。

 

Tags:

Development


スポンサーリンク

Calendar

<<  11月 2024  >>
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

View posts in large calendar

Month List

Twitter