わいえむねっと

Contents
Categories
Calendar
2026/05
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
Monthly Archives
~2000/01
Recent Entries
RSS1.0
Templates
Information
Processed: 0.061 sec
Chashed: -
2010/03/21 Sun
のどの痛みと発熱がひかないので、「のどの痛み・発熱に」の銀のベンザブロックを買ってくる。
あと、イソジン。
それと桜えび。
いや、だからなんでこのタイミングで桜えびなんだ。
2010/03/20 Sat
一晩のうちに熱が上がって下がって。
でもまだ熱っぽくて。
なにか飲むものをとコンビニにでかけてウーロン茶を買ってきた。
あと、紅生姜。
なんで紅生姜。
2010/03/19 Fri
三連休を前にまた体調を崩してしまったので会社のホワイトボードの自分の欄に

3/23 休

と書き殴ってオフィスの戸締りをして携帯の電源を切ってふらふら帰る。
2010/03/18 Thu
後頭神経痛は解消されたものの、半年くらい前に子会社の内輪モメに巻き込まれて引き取ったプロジェクトの仕様変更依頼がきてあたまいたい。 さぁ三日連続のお好み焼きを焼こう!と風呂上がりに流しの前に立った時点でタマゴを切らしていたことに気が付いて、帰り道になにか忘れているような気がしていたのはこれかぁぁぁ!?とひとしきりじたばた。
しかしそうすると夕飯はどうしよう、もう23時だしいいかーと思ったりもしてみたものの、結局着替えてタマゴだけ買ってくるのでした。

青海苔をかけすぎていただきます。
2010/03/17 Wed
10%くらいの精度しかなかったものをこの半日で90%くらいの精度までまで引き上げて、まさかこれだけ向上するとはーと自分以外に人のいないフロアでくねくねしてみたりしていましたが、そういえば昨年の今頃も2時間くらいかかっていた処理を一晩で数分で処理できるようにしてみたりとかしていたので改善というのは得てしてそういうものなのかもしれないな!と思ってみたりしたものの、どう考えてもそれは元がひどいだけだな。
2010/03/16 Tue
風邪は治ったものの引き続き頭が痛くてなんだえーと思っていたら、これあれですね。ここのところこぶさただったのですっかり忘れてましたけど、例によっての後頭神経痛じゃないのさ。 フロアが移転して自販機がなくなってしまってからコーヒーはもっぱらインスタントでしたが、なんとなく今日は缶コーヒーを。
つーか、なんとなくもなにも単に暑かったからだよ!
インスタントではホットで飲まざるを得ないので。

三寒四温とはいうけれど、そんなにころころと気温を変えられたら、また風邪をひいてしまいますですよ。
2010/03/15 Mon
頭痛が止まないのでとっとと帰ってひとっぷろ浴びて酒を一杯というか五、六杯ひっかけて布団にもぐってラジオをたれ流しながら貝ひもをかじりつつパフォーマンス調整とかそんな感じのことをだらだらと。
つーか、遅すぎるんだよ!バカ!
2010/03/14 Sun
熱は下がった気がする。 VBとC#の遅延バインディングの違いについてにゃんにゃん言っている人がいたので、

Visual Basic .NET による Office オートメーション サーバーでのバインディング
http://support.mi​crosoft.co​m/default.as​px?scid=kb;JA;304661

Visual C# .NET で Office オートメーション サーバーをバインドする方法
http://support.mi​crosoft.co​m/default.as​px?scid=kb;JA;302902

をぼけと眺めてみる。

Visual Basic .NET では、IDispatch::GetIDsOfNames メソッドを使用して、そのオブジェクトでサポートされているメソッドおよびプロパティを確認し、IDispatch::Invoke メソッドを使用して、それらのメソッドやプロパティを呼び出すことができます。

Visual C# では、IDispatch::GetIDsOfNames メソッドを使用して、そのオブジェクトでサポートされているメソッドおよびプロパティを確認し、IDispatch::Invoke メソッドを使用して、それらのメソッドやプロパティを呼び出すことができます。

書いてあることは変わらんなーと思いつつサンプルコードを見てみたら全然違ってて噴いた。
以下、サンプルコード抜粋。

Visual Basic .NET 事前バインディング
Dim objApp As Excel.Application
Dim objBooks As Excel.Workbooks

objApp = New Excel.Application()
objBooks = objApp.Workbooks

Visual Basic .NET 遅延バインディング
Dim objApp As Object
Dim objBooks As Object

objApp = CreateObject("Excel.Application")
objBooks = objApp.Workbooks

Visual C# .NET 事前バインディング
Excel.Application objApp;
Excel.Workbooks objBooks;

objApp = new Excel.Application();
objBooks = objApp.Workbooks;

Visual C# .NET 遅延バインディング
object objApp_Late;
object objBooks_Late;

Type objClassType; 
objClassType = Type.GetTypeFromProgID("Excel.Application"); 
objApp_Late = Activator.CreateInstance(objClassType);
objBooks_Late = objApp_Late.GetType().InvokeMember( "Workbooks", BindingFlags.GetProperty, null, objApp_Late, null );

ああ、これは確かに面倒だ。

ただやっぱり、

このような遅延バインディングには、事前バインディングでは避けられないバージョン依存関係を部分的に回避できるという利点があります。

が必要になる場面はあるわけで、さりとて

ただし、オートメーション コードの完全性をコンパイル時にチェックできなくなり、メソッドやプロパティの適切な呼び出しを支援する Intellisense 機能が提供されないという欠点もあります。

は嬉しくないわけで。
ままならない。
2010/03/13 Sat
少し大きめの皿が欲しいなと思っていたら
お気に入りの皿が真っ二つに割れたから
七月六日はサラダ記念日

※熱で朦朧としています 冷たいものが欲しいと冷凍庫からシャーベットというかシャーベット状の焼酎を取り出して飲んで余計に熱くなって寝る。

ホッピー - Wikipedia
http://ja.wikiped​ia.org/wiki/%E3%83%9B%​E3%83%83%E​3%83%94%E3​%83%BC
一部ではジョッキに入れた焼酎をシャーベット状に凍らせる店もある。
2010/03/12 Fri
熱っぽいけどとりあえず出社して、とりあえずバファリンを投与。 Excel.Application.Run でVBマクロを叩いていたコードをVBマクロなんか使う必要ないよ!なんだよこれ!と削除したら、Excel.Workbook.Close が終了しなくなってしまったので調べる。

(環境)
Microsoft Visual C# 2008
Microsoft Excel 10.0 Object Library

・Excel.Application.DisplayAlerts を true にしたところ
 クリップボードの警告ダイアログが表示された。
 ダイアログを操作すれば Excel.Workbook.Close が通る。
・ダイアログは表示させたくないので

プログラムでクリップボードの警告メッセージを無効にする方法
http://support.mi​crosoft.co​m/kb/287392/ja
方法 2 : CutCopyMode を終了する
Visual Basic for Applications マクロを使用してセルの切り取りまたはコピーを行う場合、ブックを閉じる行の直前に次の行を挿入します。
workbook.Application.CutCopyMode = False

 を参考に Excel.Workbook.Application.CutCopyMode を False にしようしたけど
 XlCutCopyMode の定義が

public enum XlCutCopyMode
{
    xlCopy = 1,
    xlCut = 2,
}

とかで入らない。なんでだ。

(参考)
XlCutCopyMode 列挙型 (Microsoft_Office_Interop_Excel)
http://msdn.micro​soft.com/ja-jp/library/microsoft.​office.int​erop.excel​.xlcutcopy​mode(office.11).aspx
メンバ名 説明
xlCopy コピー モード
xlCut 切り取りモード

_Application_CutCopyMode プロパティ (Microsoft_Office_Interop_Excel)
http://msdn.micro​soft.com/ja-jp/library/microsoft.​office.int​erop.excel​._applicat​ion.cutcop​ymode(office.11).aspx
XlCutCopyMode で使用できるのは、次に示す XlCutCopyMode 列挙型の定数のいずれかになります。
取得する値 説明
False 切り取りモードとコピー モードがいずれも選択されていない状態。
xlCopy コピー モード。
xlCut 切り取りモード。

・とりあえず xlCopy をセットしてみたところ警告ダイアログはでなくなった。
・xlCut でも同様。セッターでなんかやってるっぽい。
・と思ったら、Excelのプロセスが残るようになってしまっていた。
・と思ったら、それは Excel.Workbook.Application にアクセスしたせいで
 余計なオブジェクトが増えたせいだった。
・CutCopyMode のセットを Excel.Application に対して行うように修正して解決。
・COM オブジェクトの操作はいろいろめんどくさいねという話。

状況は解決したけれど、そもそも Excel.Application.Run を叩いていたときはなんで平気だったのさともうちょっと調べてみる。

・Excel.Application.Run で叩いているVBマクロを空にすると終了しなくなる。
・徐々に削ってみたころ、Selection.AutoFilter を削ったところで終了しなくなった。
・逆に Selection.AutoFilter だけの場合は問題なし。
・と思ったら、AutoFilter のかかり具合によって挙動が違う。
・ただ、正常に終了する状態でも Excel.Application.DisplayAlerts を true にすると
 クリップボードの警告はでる。

AutoFilter がかかっている場合はクリップボードの警告は関係なく、AutoFilter がかかっていない場合はクリップボードの警告を抑止する必要があるのはなんでだ。なにか副作用でもあるのか。
根本原因が他のところにあるんじゃないかという気がしてならないけれど、風邪で朦朧としていて検証コードを書く気力がないのでとりあえずここまで。もげる。