HTTP経由でキューブにアクセスする方法

ネットワークが特殊な環境で2383ポートが使用できず、80(または443)ポートが使用可能な場合、HTTP経由でキューブにアクセスする方法があります。

詳しくは公式サイトに載っていますので手順通りに設定すれば問題ないかと思います。

※SQL Server 2012 へのリンクページですが、デフォルトのページが一部英語であったため、すべて日本語になっている上記のリンクに飛ばしています。

 

上記のリンク先の説明で気をつける点があります。

まず「msmdpump.dll」「msmdpump.ini」「Resources」の配置先が「C:inetpubwwwrootolap」と「C:inetpubwwwrootolapisapi」の2パターンが書いてありますが、isapiフォルダはなくても問題ありません。接続先のURLを短くしたいのであれば olap フォルダの直下に上記の3つを入れてしまった方がいいでしょう。

もう一点「msmdpump.ini」ファイル内の「ServerName」のサーバー名は「IISから見たキューブ(Anarysis Services)があるサーバーの名前」です。ですので、IISとキューブが同じサーバーにある場合はそのまま「localhost」で問題ありません。勘違いして外から見たIISサーバー名を指定するとつながらなくなってしまう場合があります。私はこれで結構はまってしまいました。

]]>

[VBScript][VBA] セルの入力項目にエラーがあるかどうかをチェックする

メモです。

通常セルに入力されている値を取得する場合は

<なんちゃら>.Cells(row, col).Value

で取得できますが、セルの入力項目にエラーがある場合、上記のプログラムでアクセスするとエラーになってしまいます。

セルの内容がエラーであるかどうかは以下のようにして事前にチェックすることができます。


Set objExcel = CreateObject("Excel.Application")
Set objSheet = <なんちゃら>
If objExcel.WorksheetFunction.IsError(objSheet.Cells(row, col)) Then
  ' エラーがあった場合の処理
Else
  ' エラーがなかった場合の処理
End If
]]>

[VBScript][VBA] Excel で入力されている一番下の行位置と一番右の列位置を取得する

メモです。

行位置

ActiveSheet.UsedRange.Rows(ActiveSheet.UsedRange.Rows.Count).Row

列位置

ActiveSheet.UsedRange.Columns(ActiveSheet.UsedRange.Columns.Count).Column

.NET Framework で Microsoft.Office.Interop.Excel を使う場合でも同様に取得できます。

]]>

Excel オブジェクトから結合されたセルの値を取得する

Excel で「A1」から「B2」の4セルが結合され値が設定されている場合に、Cells プロパティから4セルどこを指定しても値を取りたいと思うことがあると思いますが、実際に値の愛っているセルは結合されたセルの一番左上のセルのみであるため、ほかの位置を指定すると空の値が返ります。

【例】

A1:B2の結合セルに「10」が入力されていた場合

  • sheet.Cells(1, 1) ⇒ 10
  • sheet.Cells(1, 2) ⇒ “”
  • sheet.Cells(2, 1) ⇒ “”
  • sheet.Cells(2, 2) ⇒ “”

結合セルのどこを指定しても値を取得したい場合は「MergeArea」プロパティを使うと有効です。MergeArea.Cells の位置は必ず (1, 1)にして値が必ず存在するセルを指定します。

【例】

value = sheet.Cells(2, 2).MergeArea.Cells(1, 1).Value   ‘ = 10

]]>

DCOM を使用して Excel を実行する際の実行ユーザーアカウントを強制的に変更する

【概要】

通常 DCOM を使用して Excel オブジェクトを扱った場合、Excel の実行権限はプログラムを実行したユーザーの権限になります。Administrators で実行した場合は Administrators、Users 権限であれば Users, IIS から起動した場合は IIS ユーザー(IIS のバージョンや設定によって名前が変わるので IIS ユーザーとします)となります。

しかし、プログラムの実行ユーザーによって権限がないために本来使用したい機能があったとしても使用できずにエラーになってしまう場合があります。そういう場合は DCOM の実行権限を強制的に特定のユーザーの権限にしてしまう方法があります。

ただし、一般ユーザーであるにもかかわらず Administrators 権限で実行させることもできてしまいますので、セキュリティ観点で十分に注意する必要があります。

【手順】

  1. スタートメニューのプログラムとファイルの検索入力で「dcomcnfg」と入力して「dcomcnfg.exe」を実行
  2. 「コンポーネント サービス」⇒「コンピューター」⇒「マイ コンピューター」⇒「DCOMの構成」を展開し、「Microsoft Excel Application」を右クリックし、「プロパティ」を選択
  3. プロパティが開いたら「ID」タブを選択し、ユーザーから「このユーザー」を選択、実行したときに与える権限を持つユーザーとパスワードを入力
]]>

IIS 実行ユーザーで DCOM を使用して Excel を扱う方法 (Windows Server 2008, 2008 R2)

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 ではフォルダが存在するためこの問題は発生しません。

 

この問題を回避するためには以下の箇所にフォルダを作成する必要があります。

 

[Windows Server が 32bit の場合] 、または [Windows Server が 64bit かつ Office が 64bit の場合]

  • C:WindowsSystem32configsystemprofileDesktop

Windows Server が 64bit かつ Office が 32bit の場合

  • C:WindowsSysWOW64configsystemprofileDesktop
]]>

SSIS で Excel ファイルを読み込む際に IMEX パラメータを使用する方法

メモです。

接続マネージャーで「Excel 接続マネージャー」を作成後、Excel 接続マネージャーを選択しプロパティを表示する。

プロパティから「ConnectionString」の項目を探し、接続文字列に直接「IMEX=1」を追加する。

【例】

Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:xxxyyy.xlsx;Extended Properties="EXCEL 12.0;HDR=YES";

Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:xxxyyy.xlsx;Extended Properties="EXCEL 12.0;HDR=YES;IMEX=1";

]]>

エクスプローラーからの Office ファイル新規作成テンプレートを変更する

※ここでは Excel 中心の説明になっています。

Office をインストールするとエクスプローラーの右クリックメニューの新規作成に各 Office の新規ファイルが追加されます。

image

これを選択するとテキストファイルなどと同じように新規ファイルが作成されますが、Excel や PowerPoint などについては決められた形式で作成されます。例えば Excel ファイルであればシートは必ず3つ存在し、フォントがMS Pゴシックになっている、などがあります。これは、Excel のオプションにある新規作成の初期状態とは別々に管理されています。

新規作成の初期テンプレートは実は Excel の設定ではなく、テンプレートファイルをコピーして作成されるようになっています。テンプレートファイルは「C:WindowsShellNew」に存在しているので、これらのファイルを書きかえることによって新規作成の初期状態も変更することができます。

image

Windows Vista や Windows7, 8 の場合、UAC の権限によってこのフォルダは読み取り専用になっているので、ファイルを変更する場合は管理者権限で読み取り権限を解除するか、一度別なフォルダでテンプレートを作成してから管理者権限でファイルを上書きする必要があります。

ちなみに XXX12.xlsx と書いてあるファイルは Office 2007 の形式のファイルです(2007, 2010 用)。2003 以前のファイル (97-2003 形式) は XXX9.xls になります。

]]>