メモです。
行位置
ActiveSheet.UsedRange.Rows(ActiveSheet.UsedRange.Rows.Count).Row
列位置
ActiveSheet.UsedRange.Columns(ActiveSheet.UsedRange.Columns.Count).Column
.NET Framework で Microsoft.Office.Interop.Excel を使う場合でも同様に取得できます。
]]>Excel で「A1」から「B2」の4セルが結合され値が設定されている場合に、Cells プロパティから4セルどこを指定しても値を取りたいと思うことがあると思いますが、実際に値の愛っているセルは結合されたセルの一番左上のセルのみであるため、ほかの位置を指定すると空の値が返ります。
【例】
A1:B2の結合セルに「10」が入力されていた場合
結合セルのどこを指定しても値を取得したい場合は「MergeArea」プロパティを使うと有効です。MergeArea.Cells の位置は必ず (1, 1)にして値が必ず存在するセルを指定します。
【例】
value = sheet.Cells(2, 2).MergeArea.Cells(1, 1).Value ‘ = 10
]]>【概要】
通常 DCOM を使用して Excel オブジェクトを扱った場合、Excel の実行権限はプログラムを実行したユーザーの権限になります。Administrators で実行した場合は Administrators、Users 権限であれば Users, IIS から起動した場合は IIS ユーザー(IIS のバージョンや設定によって名前が変わるので IIS ユーザーとします)となります。
しかし、プログラムの実行ユーザーによって権限がないために本来使用したい機能があったとしても使用できずにエラーになってしまう場合があります。そういう場合は DCOM の実行権限を強制的に特定のユーザーの権限にしてしまう方法があります。
ただし、一般ユーザーであるにもかかわらず Administrators 権限で実行させることもできてしまいますので、セキュリティ観点で十分に注意する必要があります。
Windows Server 2008 や Windows Server 2008 R2 で ASP.NET プログラムから DCOM を使用して Excel を扱おうとしてもエラーがでて Excel を扱うことができません。これは IIS 実行ユーザーが Excel を使用するために必要なフォルダが Windows Server 2008, 2008 R2 に存在しないために発生する問題です。
IIS の実行ユーザーに依存するので、ASP.NET から直接 Excel を扱う場合や、ASP.NET から起動したプログラム(exe, bat, vbs 等)すべてに影響します。ちなみに Windows Server 2003, 2003 R2 ではフォルダが存在するためこの問題は発生しません。
この問題を回避するためには以下の箇所にフォルダを作成する必要があります。
ドメイン環境であれば認証はある程度 Active Directory に任せられるので楽なのですが、ワークグループ環境では各サービスごとに認証が異なっていたりなど、ハマリどころが多いです。とりあえずわかる範囲でまとめていますが(自分用)、もしかしたら間違っているところもあるかもしれませんので参考程度に見てください。
足りない項目は後で追加するかもしれません。また何か違う内容、または追記すべき項目があればコメントください。
]]>はまったので簡単にメモします。
■クライアントPC
■サーバーPC
レポート ビルダーを使うクライアントからサーバーにあるデータ ソースを参照し、クエリデザインを開こうとしたときに認証エラーになる場合があります。
【エラー例】
逆にサーバー内で直接レポート ビルダーで編集するときや、レポート マネージャーから(サーバー、クライアントからアクセスどちらでも)データ ソースの接続テストを行った場合には問題ない場合があります。
これのよくある原因としては、データソースのホスト名指定に「localhost」を指定している場合に発生します。
サーバー上で編集している場合は自分自身(localhost)にデータソースが存在するのでエラーが発生しません。クライアントからレポート マネージャーを開いてデータソースの接続テストを行った場合にも、実際にプロセスが動いているのはサーバーなのでこちらもエラーになりません。
レポート ビルダーからサーバーのデータソースを参照した場合は、データソース自体はサーバーにあるのですが、そのデータソースを使って実行するプロセスはクライアントになるため、localhost はクライアントPCを指すことになり、データ ソース(テーブルなど)が存在しないため、エラーになることがあります。
ですので、レポート マネージャーに配置するデータ ソースが参照するホスト名は localhost にはせず、必ずサーバー名、または IP アドレスを明示的に指定する必要があります。
]]>完全に盲点な仕様でした。ASP.NET で Web サイトを構築していたのですが、なぜかホスト名でアクセスするとセッションに保存していたデータが消失してしまうという謎の原因が発生し、解決の糸口が見つからなかったので MSDN フォーラムで質問していました。
ホスト名にアンダーバーをいれた場合、Cookie が保存されないのは IE だけの仕様なんですね(IE 6~9 で確認)。ほかのブラウザでは問題なく Cookie は保存されるようでした。
検索してみると結構出てくるみたいです。
ひさびさに大ハマリしてしまいました orz
]]>