- PR -

関連付けられていない拡張子のオープン

投稿者投稿内容
HIDEKI_a
会議室デビュー日: 2005/11/01
投稿数: 6
投稿日時: 2005-11-01 18:34
明智重蔵さん、じゃんぬねっとさん ご回答ありがとうございます。

今日のこれ以降は問題発生端末が使用出来ないので
明日に確認をしてみますね。
(付加条件が無いかも再度確認してみます)

> aaaa.xlsを
> aaaaにリネームしてダブルクリックすればエクセルで開けるはず

★問題発生端末で上記すら出来ないのか確認してみます。
(自分の端末では確認がとれました)

じゃんぬねっとさん >
 アプリケーションを選択すれば起動できるため、
 ブックのプロパティ情報を見る前に、拡張子だけで
 ファイル判別がされている気もします。
 端末間で何かの設定が違うかも確認してみます。


※調査している傍ら、こちらの現場では
 「拡張子の後ろに数字入れるのやめよう」という
 運用方針も検討されているようです…
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-11-01 18:41
引用:

HIDEKI_aさんの書き込み (2005-11-01 18:34) より:

アプリケーションを選択すれば起動できるため、
ブックのプロパティ情報を見る前に、拡張子だけで
ファイル判別がされている気もします。


とりあえず、拡張子を優先していますね。
起動するアプリケーションが存在しない拡張子では、ブックのプロパティを見ているっぽいです。

引用:

調査している傍ら、こちらの現場では
「拡張子の後ろに数字入れるのやめよう」という
運用方針も検討されているようです…


その方がいいでしょうね。
AAA_20050407.xls などの方が素直でしょう。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
まどか
ぬし
会議室デビュー日: 2005/09/06
投稿数: 372
お住まい・勤務地: ますのすし管区
投稿日時: 2005-11-01 19:06
引用:

起動するアプリケーションが存在しない拡張子では、ブックのプロパティを見ているっぽいです。


いかにMS同士とはいえ、勝手に動作するわけは無いと思うので
インストールオプションにシェルエクステンションみたいなものがあって
それの導入・未導入で動作が違うとか。

あとは右クリック−アプリケーションの選択で「いつもこのアプリケーションで開く」をチェックして開いたとき
フォルダオプションのファイルタイプにはでてきませんね。
#数字の羅列かなんかのエントリになるんじゃなかったかな?<見たことはある
#つまり1025で探しても出てこないと思います。
Tdnr_Sym
ぬし
会議室デビュー日: 2005/09/13
投稿数: 464
お住まい・勤務地: 明石・神戸
投稿日時: 2005-11-01 21:05
こんばんは。

いろいろ実験してみましたが…
関連付けられた拡張子が見つからない場合、別の方法でアプリケーションを探しているようですね。

推測でしかないのですが…
開こうとしているファイルが複合ファイル(OLE構造化記憶)の場合、
ルートストレージに設定されているクラスID(プログラムID)から起動しているのではないでしょうか。
#複合ファイルの場合、Visual Studio付属のDocFile Viewerで内容を見ることができます。

具体的な起動方法は分かりませんが(OLEサーバーはいろいろな方法で起動できますから)
構造化ファイルからプログラムIDを取得する方法は次のようなコードになります。

コンパイラ:VC++7.1
コード:

#include <stdio.h>
#include <objidl.h>
#include <atlconv.h>

void main(int argc, char* argv[])
{
USES_CONVERSION;
HRESULT hr;

// 開きたいファイルのパス名
WCHAR* pszFile = L"c:\\AAA.xls.1025";

// 複合ファイルであるか判定
hr = ::StgIsStorageFile(pszFile);
if (hr != S_OK) {
printf("複合ファイルではありません\n");
return;
}

// 複合ファイルのオープン
IStorage* pRootStorage = NULL;
hr = ::StgOpenStorage(pszFile, NULL, STGM_READ | STGM_SHARE_EXCLUSIVE, NULL, 0, &pRootStorage);

if (FAILED(hr)) {
printf("ファイルのオープンに失敗しました\n");
return;
}

if (pRootStorage) {

// クラスIDの取得
STATSTG stat;
pRootStorage->Stat(&stat, STATFLAG_DEFAULT);

// クラスIDをプログラムIDに変換
LPOLESTR pszProgID;
::ProgIDFromCLSID(stat.clsid, &pszProgID);

if (pszProgID) {
printf("%s\n", OLE2A(pszProgID));
::CoTaskMemFree(pszProgID);
}
else {
printf("不明なプログラムID");
}

// ストレージの破棄
pRootStorage->Release();
}

return;
}



出力結果:
Excel.Sheet.8

#汚いコードでスイマセン。

#なぜかコード中の"¥"マークが2重になってしまいます。掲示板のバグ?
#…あれ、プレビューの時だけなのかな!?

[ メッセージ編集済み 編集者: Tdnr_Sym 編集日時 2005-11-01 21:11 ]

[ メッセージ編集済み 編集者: Tdnr_Sym 編集日時 2005-11-01 21:13 ]
明智重蔵
大ベテラン
会議室デビュー日: 2005/09/05
投稿数: 127
投稿日時: 2005-11-02 10:28
窓の手で、関連付けされてないアプリは、エクセルで開くと設定をしている
ツワモノなユーザーがいるかもしれませんね

もしくはdosのassocコマンドで数字の拡張子を全てexcelに関連付けしてるとか


OracleSQLパズル
http://oraclesqlpuzzle.hp.infoseek.co.jp


[ メッセージ編集済み 編集者: 明智重蔵 編集日時 2005-11-02 10:31 ]
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2005-11-02 10:43
引用:

明智重蔵さんの書き込み (2005-11-02 10:28) より:

窓の手で、関連付けされてないアプリは、エクセルで開くと設定をしている
ツワモノなユーザーがいるかもしれませんね:wink:
もしくはdosのassocコマンドで数字の拡張子を全てexcelに関連付けしてるとか


それがあるなら、むしろ逆ではないかと思いますが...
起動しなくするようにしているのではないかと思います。
新規端末でもセットアップをしたのですが、やはり起動していました。

つまり、何も設定していないドノーマルの端末でも Excel、Word が起動するということです。
自宅でも試しましたが、全部起動しました。(5 / 5 台中)

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
Tdnr_Sym
ぬし
会議室デビュー日: 2005/09/13
投稿数: 464
お住まい・勤務地: 明石・神戸
投稿日時: 2005-11-02 10:44
こんにちは。

引用:

明智重蔵さんの書き込み (2005-11-02 10:28) より:
窓の手で、関連付けされてないアプリは、エクセルで開くと設定をしている
ツワモノなユーザーがいるかもしれませんね

もしくはdosのassocコマンドで数字の拡張子を全てexcelに関連付けしてるとか



いえ、そんなことしていないですが、私のPCでも再現します。

AAA.xls.1025 -> エクセルが起動
AAA.doc.1025 -> ワードが起動
AAA.ppt.1025 -> パワーポイントが起動

【環境】
OS:WindowsXP SP2
Office:Microsoft Office 2000

ちなみに、エクスプローラはファイルの拡張子を常に表示する設定にしています。
HIDEKI_a
会議室デビュー日: 2005/11/01
投稿数: 6
投稿日時: 2005-11-02 10:56
じゃんぬねっとさん、まどかさん、Tdnr_Symさん、明智重蔵さん
ご返答ありがとうございました。

今朝に少し確認をしたのですが、リネームして拡張子無しは
問題無く開けました。

他にVBAにて、
 @Workbooks("AAA.xls").Activate
 AWorkbooks("AAA.xls.1025").Activate
のような順序で処理を行った場合はエラーとならないことが
確認できました。
(いきなりAを実行した場合は端末によってはエラー)

★それと現場で「拡張子の後ろに数字は付けない」と
 運用を変えて頂くことになりました。

 よって問題の原因は判明出来ませんでしたが、
 一旦は質問を取り消させて下さい。
 (その後に何か判明しましたら書き込みはしますね。
  VBAの動作で判明したことがヒントになりそうな…)

シェルエクステンション、ルートストレージ、VC++のコードなど
終盤は分からない事だらけでしたが、ご丁寧に調査・回答を頂き
誠にありがとうございました。

スキルアップ/キャリアアップ(JOB@IT)