DOBON.NETプログラミング道掲示板
HOME
HELP
新規作成
新着記事
ツリー表示
スレッド表示
トピック表示
発言ランク
ファイル一覧
検索
過去ログ
■35638
/ 1階層)
GetObjectでExcelファイルを加工するとExcelファイルが壊れる
□投稿者/ 魔界の仮面弁士
大御所(1578回)-(2024/12/11(Wed) 16:44:32)
2024/12/11(Wed) 16:50:44 編集(投稿者)
■
No35636
に返信(suekunさんの記事)
> vb.netでgetobjectでExcelファイルを読込み保存するとExcelファイルが破損します。
一口に「破損」としか書かれていませんが、
具体的にはどういう状態になってしまうのでしょうか?
保存処理自体が失敗するのか、
保存処理時にエラーメッセージが出るのか、
保存は行われるが、保存結果が「シート数 0 の不正なブック」になるのか
.xlsx 形式で保存したはずが .xls 形式になってしまうのか、
処理が無応答状態となってフリーズするのか、など。
また、全面的に Marshal.ReleaseComObject メソッドの呼び出しが漏れているように見えます。
「非表示の EXCEL.EXE」がタスクマネージャー上で残留するなどしていた場合に
誤動作を引き起こしてしまう危険性があります。念のため、
コードを修正する前に Windows を再起動しておきましょう。
で…既に起動済みの Excel インスタンスに対して
= GetObject(,"Excel.Application")
などでアクセスするのならば良いですが、
= GetObject("Z:\Example.xlsx")
などでのアクセスはあまりお奨めしません。
Excel が起動していない状態で『GetObject(ワークブックファイルパス)』を呼び出した場合、
その時点で「非表示状態の Excel.exe」が Embedded モードで起動することがあり、
このインスタンスが誤動作の要因となることがしばしばあります。
(Application インスタンスだけでなく、Window インスタンスも不可視状態で起動します)
GetObject で起動した場合に解放させにくいという問題は、
VB6 などから呼び出した場合にも言えることなのですが、
VB.NET からの呼び出しにおいては、COM オブジェクトの
解放手続きの手間がさらに増えるので、個人的にはあまりお奨めしません。
> wb.Close()
Workbook オブジェクト自身を Close した時点で、内部の COM オブジェクトは
『COM クライアント側から切断された状態』になります。
それ自体は想定された動作ですが、.NET 側としては、切断状態にあるオブジェクトを
そのまま保持しているだけなので、もはやこの変数を通じて Excel を操作することはできなくなります。
(不要になったExcel本体を明示的に終了させる時などに困る)
操作後も Excel インスタンスを使い続ける必要があるならば、GetObject は使わず、
新規に Excel.Application インスタンスを New して、それを起点として操作する設計の方が無難です。
GetObject を起点した場合も、Application プロパティを通じて、Excel.Application インスタンスに
アクセスすることはできますが、それによって取得したインスタンスが、
新しく起動した Exce なのか、自身以外の他のアプリなどからも参照されている状態なのかは区別できません。
他のアプリなども同じインスタンスを操作していた場合、勝手に Application を
勝手に(Quit メソッドなどで)終了させてしまうと、まだ使用している他の処理が
『COM サーバー側から切断された状態』に陥ってしまい、やはり予期せぬ動作の要因となりえます。
違反を報告
Javascriptを有効にしてください
この投稿が掲示板のルールに違反しており、何らかの対処が必要であると思われる場合は、以下のフォームを利用して管理人に報告することができます。
マルチポストの報告は、返信フォームの上にある「マルチポストの報告」リンクをご利用ください。
この機能の悪用は絶対にしないでください。
悪用されたと管理人が判断した場合は、予告なしで厳しい対処がなされる可能性があります。
確認等の目的で、入力されたメールアドレス宛に返信メールが送信される可能性があります。メールの受信ができないメールアドレスは入力しないでください。
下のフォームが使用できない場合は、
メールフォーム
を使って管理人にご報告ください。
お名前(必須)
メールアドレス(必須)
本文(必須)
(違反理由など)
削除キー/
編集
削除
前の記事
(元になった記事)
次の記事
(この記事の返信)
←GetObjectでExcelファイルを加工するとExcelファイルが壊れる
/suekun
→Re[2]: GetObjectでExcelファイルを加工するとExcelファイルが壊れる
/suekun
上記関連ツリー
GetObjectでExcelファイルを加工するとExcelファイルが壊れる
/ suekun
(24/12/11(Wed) 11:53)
#35636
├
Re[1]: GetObjectでExcelファイルを加工するとExcelファイルが壊れる
/ suekun
(24/12/11(Wed) 15:14)
#35637
└
GetObjectでExcelファイルを加工するとExcelファイルが壊れる
/ 魔界の仮面弁士
(24/12/11(Wed) 16:44)
#35638
←Now
└
Re[2]: GetObjectでExcelファイルを加工するとExcelファイルが壊れる
/ suekun
(24/12/11(Wed) 17:03)
#35639
└
Re[3]: GetObjectでExcelファイルを加工するとExcelファイルが壊れる
/ 魔界の仮面弁士
(24/12/11(Wed) 18:15)
#35640
└
Re[4]: GetObjectでExcelファイルを加工するとExcelファイルが壊れる
/ suekun
(24/12/12(Thu) 07:28)
#35641
└
Re[5]: GetObjectでExcelファイルを加工するとExcelファイルが壊れる
/ 魔界の仮面弁士
(24/12/12(Thu) 16:11)
#35642
├
Re[6]: GetObjectでExcelファイルを加工するとExcelファイルが壊れる
/ 魔界の仮面弁士
(24/12/12(Thu) 16:23)
#35643
├
Re[6]: GetObjectでExcelファイルを加工するとExcelファイルが壊れる
/ suekun
(24/12/13(Fri) 08:56)
#35644
└
Re[6]: GetObjectでExcelファイルを加工するとExcelファイルが壊れる
/ suekun
(24/12/18(Wed) 15:31)
#35645
解決
済
み!
上記ツリーを一括表示
/
上記ツリーをトピック表示
上記の記事へ返信
入力内容にタグは利用できません。
引用部分(行頭に「>」や「■」が付いている部分)が全体の 80% 以上のコメントは投稿できません。
半角カナは使用しないでください。文字化けの原因になります。
削除キーを覚えておくと、自分の記事の編集・削除ができます。
記事中に No*** のように書くとその記事にリンクされます(No は半角英字/*** は半角数字)。
使用例)
No123 → 記事No123の記事リンクになります(指定表示)。
No123,130,134 → 記事No123/130/134 の記事リンクになります(複数表示)。
No123-130 → 記事No123〜130 の記事リンクになります(連続表示)。
投稿前に必ずお読みください
初めて投稿される方は、必ず「
書き込みのルールについて(12/4/2更新)
」をお読みください。
読むのが面倒、ルールを守りたくないという方は、「
お気楽掲示板
」へ投稿してください。
質問を投稿する場合は、「
質問をする際のアドバイス
」を参考にしてください。
投稿は、明記のない限り、パブリックドメインになります。
マルチポストされた投稿を報告する時は匿名で投稿し、マルチポストされている場所を併記してください。以下のリンクをクリックしていただくと、自動で下のフォームが埋まりますので、その後「送信」ボタンを押してご投稿ください。
マルチポストの報告をする
マルチポストの報告をするが、マルチポスト先の投稿が嫌がらせである(元の投稿者とは別人が行なっている)可能性が高い
(投稿日時に開きがあり、こちらの投稿の方が早い場合は、その可能性が高いです)
Name
/
E-Mail
/
Title
/
URL
/
Comment/ 通常モード->
図表モード->
(適当に改行して下さい/半角10000文字以内)
■No35638に返信(魔界の仮面弁士さんの記事) > 2024/12/11(Wed) 16:50:44 編集(投稿者) > > ■No35636に返信(suekunさんの記事) >>vb.netでgetobjectでExcelファイルを読込み保存するとExcelファイルが破損します。 > 一口に「破損」としか書かれていませんが、 > 具体的にはどういう状態になってしまうのでしょうか? > > 保存処理自体が失敗するのか、 > 保存処理時にエラーメッセージが出るのか、 > 保存は行われるが、保存結果が「シート数 0 の不正なブック」になるのか > .xlsx 形式で保存したはずが .xls 形式になってしまうのか、 > 処理が無応答状態となってフリーズするのか、など。 > > > また、全面的に Marshal.ReleaseComObject メソッドの呼び出しが漏れているように見えます。 > > 「非表示の EXCEL.EXE」がタスクマネージャー上で残留するなどしていた場合に > 誤動作を引き起こしてしまう危険性があります。念のため、 > コードを修正する前に Windows を再起動しておきましょう。 > > > > で…既に起動済みの Excel インスタンスに対して > = GetObject(,"Excel.Application") > などでアクセスするのならば良いですが、 > = GetObject("Z:\Example.xlsx") > などでのアクセスはあまりお奨めしません。 > > Excel が起動していない状態で『GetObject(ワークブックファイルパス)』を呼び出した場合、 > その時点で「非表示状態の Excel.exe」が Embedded モードで起動することがあり、 > このインスタンスが誤動作の要因となることがしばしばあります。 > (Application インスタンスだけでなく、Window インスタンスも不可視状態で起動します) > > GetObject で起動した場合に解放させにくいという問題は、 > VB6 などから呼び出した場合にも言えることなのですが、 > VB.NET からの呼び出しにおいては、COM オブジェクトの > 解放手続きの手間がさらに増えるので、個人的にはあまりお奨めしません。 > > > >>wb.Close() > > Workbook オブジェクト自身を Close した時点で、内部の COM オブジェクトは > 『COM クライアント側から切断された状態』になります。 > > それ自体は想定された動作ですが、.NET 側としては、切断状態にあるオブジェクトを > そのまま保持しているだけなので、もはやこの変数を通じて Excel を操作することはできなくなります。 > (不要になったExcel本体を明示的に終了させる時などに困る) > > 操作後も Excel インスタンスを使い続ける必要があるならば、GetObject は使わず、 > 新規に Excel.Application インスタンスを New して、それを起点として操作する設計の方が無難です。 > > GetObject を起点した場合も、Application プロパティを通じて、Excel.Application インスタンスに > アクセスすることはできますが、それによって取得したインスタンスが、 > 新しく起動した Exce なのか、自身以外の他のアプリなどからも参照されている状態なのかは区別できません。 > 他のアプリなども同じインスタンスを操作していた場合、勝手に Application を > 勝手に(Quit メソッドなどで)終了させてしまうと、まだ使用している他の処理が > 『COM サーバー側から切断された状態』に陥ってしまい、やはり予期せぬ動作の要因となりえます。
File
/
アップ可能拡張子=> /
.gif
/
.jpg
/
.png
/.zip
1) 太字の拡張子は画像として認識されます。
2) 画像は初期状態で縮小サイズ250×250ピクセル以下で表示されます。
3) 同名ファイルがある、またはファイル名が不適切な場合、
ファイル名が自動変更されます。
4) アップ可能ファイルサイズは1回
20KB
(1KB=1024Bytes)までです。
5) ファイルアップ時はプレビューは利用できません。
6) スレッド内の合計ファイルサイズ:[0/300KB]
残り:[300KB]
Icon
/
ホイールロボ
くるりロボ
ぱんだ
ふとめネコ
ねずみ
こあら
疑問ねこ
ランダム
管理者用
(画像を選択/
サンプル一覧
)
削除キー
/
(半角8文字以内)
解決
済
み!
BOX/
解決したらチェックしてください!(スレッドを閉じる目的ではチェックしないでください!)
クリエイティブ・コモンズ・ライセンス
を Comment の末尾に挿入するには、以下のリンクをクリックしてください。(Javascript で挿入しているだけです。)
表示(CC BY)
|
表示-改変禁止(CC BY-ND)
|
表示-継承(CC BY-SA)
|
表示-非営利(CC BY-NC)
|
表示-非営利-改変禁止(CC BY-NC-ND)
|
表示-非営利-継承(CC BY-NC-SA)
プレビュー/
クッキーに保存しない/
Mode/
通常管理
表示許可
Pass/
HOME
HELP
新規作成
新着記事
ツリー表示
スレッド表示
トピック表示
発言ランク
ファイル一覧
検索
過去ログ
-
Child Tree
-