問題タブ [excel-interop]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
excel - .NET 4.0のジェネリックオブジェクトで相互運用オブジェクトを使用できませんか?
私はVS2010で作業しており、アプリケーションを.NET 4にアップグレードする作業を行っています。アプリケーションはExcelをベースとして構築されており、Excelを使用するために.NETのいくつかの改善点を利用したいと考えています。しかし、一般的な辞書でExcelInteropオブジェクトを使用したことが原因と思われる奇妙なエラーに遭遇しました。生成されたエラーは次のとおりです。
問題のある実際のプロパティは次のとおりです。
ジェネリックオブジェクトで相互運用オブジェクトを使用できませんか?その場合、これは.NET4.0の重大な制限です。Embed Interopプロパティをfalseに設定しようとしましたが、何も変わらないようです。これを回避する方法があれば教えてください。
c# - `Series.Values`(Excelチャート)から値にアクセスするにはどうすればよいですか?
Microsoft.Office.Interop.Excel
名前空間を使用していて、グラフを作成しています。ある時点で、あるシリーズの値を取得したい。MSDNでは、オブジェクトにプロパティがあると書かれています。これは、オブジェクトまたはを返します。私は。を想定しています。私のコードには、次のステートメントがあります。Series
Values
Range
array of values
object[]
私はInvalidCastException
次のメッセージを受け取ります:Unable to cast object of type 'System.Object[*]' to type 'System.Object[]'.
Visual Studio 2008を使用してデバッグすると、の種類を調べることができ、series.Values
と表示されますobject{object[1..7]}
。これは(私が理解しているように)それがとして宣言されているobject
が、実際のタイプはであるということを意味しobject[1..7]
ます。しかしobject[1..7]
、実際には私がキャストできるタイプではなく、どちらもキャストできませんobject[*]
。
配列が0ではなく1から始まるという事実と関係があるのではないかと思います(または推測します)(おそらくVBが原因です)。私はあなたがC#で1ベースの配列を定義できることさえ知りませんでした...
c# - 自分でクリーンアップする Excel Interop オブジェクトと GC.Collect() でクリーンアップする Excel Interop オブジェクト
質問:
この質問に対する Mike Rosenblum の回答に対して質問したいです。質問は、Excel 相互運用オブジェクトのクリーンアップに関するものでした。提案されたいくつかの解決策 (たとえば、ラッパー、複数のドットを使用しない、Excel プロセスを強制終了する) が、私はこの問題に対する Mike Rosenblum の解決策が最も気に入りました (このトピックに関する長い記事)。
それが基本的に言っていることは、周りに浮かんでいるすべての参照についてあまり心配しないということです. いくつかの主要なもの(ApplicationClass
、Workbook
および などWorksheet
)を保持するだけです。最初にガベージ コレクションを呼び出して、浮遊しているすべてのオブジェクトをクリーンアップし、次にMarshal.FinalReleaseComObject
(重要度の逆順で) 呼び出して、まだ残っているメイン参照を明示的にクリーンアップします。
これについて 2 つの質問があります。
最初に: どのオブジェクトへの参照を保持する必要があるかを判断するにはどうすればよいですか? Mike Rosenblum の例ではRanges
、 、Worksheets
、Workbooks
およびのみを保持してApplicationClasses
います。
2 番目: オブジェクトが他にもある場合、それらをクリーンアップする順序 (つまり、「重要な順序」) を決定するにはどうすればよいですか?
前もって感謝します。
更新 1:
MattC
注文に関して重要なのは、アプリが最後にリリースされることだけであることが示唆されています。ただし、私の参考文献では次の文があります。より多くの順序があることを意味します。
nobugz
すべてを に設定してからnull
ガベージ コレクションを実行するだけで十分であることが示唆されていますが、それは Mike Rosenblum の記事からの次の引用と矛盾しているように思われます。ただし、Microsoft Office アプリケーションは、オブジェクトが解放される順序に敏感であり、残念ながら、変数 =を設定して呼び出しても、オブジェクトの解放順序は保証されません。Nothing
GC.Collect()
Nothing
GC.Collect()
更新 2:
追加情報: 私自身のアプリケーションでは、チャートを使って多くのことを行います。プロパティなどをいろいろ設定しています。 なるほど、新しいCOMオブジェクトを作るところが多いですね。ダブル ドットを使用しないように注意し、Marshal.FinalReleaseComObject
終了したすべてのオブジェクトを呼び出すようにしました。多くのネスティングが発生するため、ラッパー アプローチは使用しませんでした。
EXCEL.exe
アプリが作業を終了した後、閉じませんでした。しかし...同じ作業をもう一度行うようにアプリに指示したところ、閉じました。もちろん、EXCEL.exe
閉じなかった新しいオープン。今、すべてのMarshal.FinalReleaseComObject
呼び出しを削除しましたが、アプリはまったく同じように動作します。EXCEL.exe
アプリに作業をやり直すように指示するまで、滞在しますが、その後、新しい開始EXCEL.exe
と滞在が続きます。
編集:また、COM以外の他の作業を行うようにアプリに指示すると、しばらくするとEXCEL.exe
消えますが、新しいものEXCEL.exe
は表示されません。
ここから導き出せる結論はわかりません...
c# - C#Excel-列のプロパティを管理する
シナリオは、約150のデータ列を持つExcelレポートを生成することです。次に、Width、BackgroundColor、Fontなどの列のプロパティを管理する必要があります。
私が使用しているアプローチは、リフレクションに依存しています。列ヘッダーテキスト用に約150個の定数を持つクラスがあります。列のプロパティを格納する別のカスタム属性クラス。これらの属性は定数に適用されます。
リフレクションを使用した列の作成中に、すべての定数にアクセスして、ヘッダーテキスト(クラスの定数の順序で列の順序を定義)と列のプロパティの属性を作成しています。
編集:定数を取得するためのコード
主な目的は、Excelファイルの生成を一般的/保守性の低いものにすることです。アプローチは問題ありませんか、それとも他のより良い選択肢がありますか。
編集2:定数クラス
c# - リストの値を Excel にエクスポートする
こんにちは、値のリストを含むリスト コンテナーを使用しています。リストの値を直接 Excel にエクスポートしたいと考えています。直接行う方法はありますか?
c# - アセンブリを動的にロードし、そのタイプの変数を作成します
アセンブリを動的にロードして、そのタイプの変数を作成しようとしています。
私は過去2日間からこれに取り組んでおり、Excelタイプ(作成する必要のあるタイプ)の変数を宣言する方法を教えてください
どんな助けでも大いに感謝します
c# - Microsoft Office InteropExcel12.0がIIS7で機能しない
Microsoft Office Interop Excel 12.0コンポーネントを使用して、ASP.NETWebアプリケーションでピボットテーブルExcelシートを作成しています。Visual Studio 2008からデバッグ/リリースモードで実行すると、Excelファイルが正しく作成されます。
しかし、IIS 7にソリューションを展開すると、最初にいくつかのアクセス許可の問題が発生しました。これは、DCOMCNFGファイルでアクセス許可を与えることで解決しました。Excelファイルを開こうとすると、次のエラーが発生します。
使用可能なメモリまたはディスク容量が不足しているため、MicrosoftOfficeExcelはこれ以上ドキュメントを開いたり保存したりできません。•より多くのメモリを使用できるようにするには、不要になったワークブックまたはプログラムを閉じます。•ディスク領域を解放するには、保存先のディスクから不要になったファイルを削除します。
これらは、Excelアプリケーションオブジェクトを開いたり閉じたりするために使用したコードです。
vb.net - Excel.Workbook を閉じるときの COMException (0x80010108 - RPC_E_DISCONNECTED)
次のコードを実行すると、以下の例外が発生します。
注: すべてのデータが正しく取得されたようです。
このエラーを診断して解決するのを手伝ってください。
.net - C#.NET を使用して生成された Excel シートにページ番号を表示する
C# コードを使用して生成された Excel シートにページ番号を含めたり入力したりする方法を知っている人はいますか?
Microsoft.Office.Interop.Excel で利用可能なライブラリを使用してファイルを生成します。
ただし、デフォルトでは出力にページ番号が表示されません。私はこれを有効にすることを知っています
Excel のオプション (表示 --> ヘッダーとフッター ...) ですが、これを C# で自動化したいと考えています。
これは可能ですか? はいの場合は、同じスニペットを親切に共有してください。
ありがとう定数学習者
c# - 別のプロジェクトを作成せずにVSTOでUDF
別のプロジェクトを作成せずにExcel2007アドインにUDFを実装する方法はありますか?これが汚いトリックを使用する必要があるとしても、私はそれについて知りたいです。実際、私はこれを行うための既存の方法について知りたいです。
それで、私ができない場合...この問題に関する公式のMSの対応について何か聞いたが、どこにも見つからない。誰かがリンクを提供できますか?
ありがとう。