問題タブ [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.
c# - クリップボードを使用せずにExcelInteropを使用して、セルのブロックを1つのショットに貼り付けることはできますか?
DataSetからExcelブックにデータを転送しようとしています。残念ながら、ADO.NET経由でExcelにリンクし、標準SQLを使用してデータを選択して挿入するだけで得られる以上の制御が必要なため、Excelの相互運用機能を使用しています。
Formula
私の元のアルゴリズムでは、データセットのすべてのテーブル/行/アイテムをループし、Excelで各セルのを個別に設定していました。これは機能しましたが、すべてのデータを転送するのに30分近くかかりました。
StringBuilder
別の解決策を試すことにしました。各テーブルをタブ区切りの文字列に変換します(との組み合わせを使用しstring.Join()
、文字列をクリップボードにコピーし、相互運用機能を使用してExcelWorksheet
オブジェクトの貼り付けコマンドを呼び出します)。
これも機能し、時間を50%強短縮しますが、クリップボードを使用してデータを転送することについては少し不安があります。転送が行われている間にユーザーがクリップボードに関連する他のことを始めた場合はどうなりますか?また、クリップボードを仲介として使用するのではなく、文字列を直接貼り付けることができれば、さらに高速になるのではないかと思います。
それが私の質問です...クリップボードを使用せずに、C#文字列から直接Excelにデータのブロックを一度に「貼り付ける」ことができるコマンドはありますか?
excel - COM 相互運用を使用して Windows フォーム内に Excel ウィンドウを表示する方法
.net Windows アプリケーション内に Excel を表示したいと考えています。COM相互運用を使用してこれを行うにはどうすればよいですか
どんな助けでも大歓迎です。
助けてください ...!!
ありがとうございました
よはん
excel - Excel COM オブジェクトの存続
現在、Excel 2003 の相互運用メカニズムを使用してRangesを操作しています。
一部の範囲をクラスのプロパティとして addin に保存することがありますが、後でそれらにアクセスしようとすると、COM オブジェクトがランダムに無効になることがあり、COM オブジェクトの各プロパティが「 COMException」をスローします。それらにアクセスしようとすると。
Excelが割り当てるオブジェクトとアドインが使用しているオブジェクトとの間に強い関連性はないと言われています。そのため、 .Net/C#の観点から見ても、「真の」Range オブジェクトはいつでもExcelによって解放される可能性があります。それらへの参照があります。
それで、後で安全に使用するために Range オブジェクトを存続させる方法があるかどうか疑問に思っていましたか?
備考 : Ranges自体の代わりにRangesを表す文字列(例: "A1") を格納するなどの回避策を使用できますが、これによりコードがクリーンではなくなります。
よろしくお願いします。
c# - Interop.Excel で workbook.SaveAs() を使用して .xslm から .xslx を実行すると、問題なく実行されますが、ファイルは保存されません。
Interop.Excel バージョン 12
オフィス エクセル 2007
.xslm ファイルを開き、それを .xslx として変換 (保存) するコードを作成しました。この間に、いくつかの処理も行う必要がありますが、それは問題ではありません。コードは次のとおりです。
このコードは問題なく (例外なく) 実行されますが、ファイルは .xslx 拡張子で保存されません。一部のファイルセットでは機能するが、他のセットでは機能しないことがわかりました。たとえば、PF1.xslm という名前のファイルでは機能しません。Office Excel で PF1.xslm を開き、.xslx として保存できます。したがって、同じことがプログラムでも機能すると仮定します。
.net - vb.net の SQL データ テーブルから Excel ドキュメントを作成する
私のプロジェクトでは、Excel ドキュメントにエクスポートしたい要約データ テーブルがあります。この目的のために、次のコードを展開しました。
行を実行しようとしたとき:
次のエラーが表示されます:
Exception has been thrown by the target of an invocation
この時点で、何が問題なのかわかりません。私を手伝ってくれる人はいますか?
c# - Excel テンプレート: データの結合とワークブックの保存
私は Excel Interop への最初の進出であり、フライングスタートの後、壁にぶつかりました。
評価フォームである 1 つのシートと、評価の実行方法に関するガイダンス ノートを含む別のシートを含む Excel テンプレートがあります。
評価対象のプロジェクトの詳細が記載された XML ファイルもあります。
プロジェクトのタイトル、アプリケーション番号、および会社名を最初のシートにマージし、[アプリケーション番号] - [プロジェクトのタイトル].xlsx というファイル名でシートを保存する必要があります。
最初の部分は正常に動作しています。私は XML をロードしましたが、コードはデータを本来あるべきフォームに入れています。
私の問題は保存部分です。.SaveAs メソッドを見つけたところ、いくつかのファイルが作成されましたが、それらは開きません。次に、HRESULT エラー 0x800A03EC が表示されます - Web を検索しても、これについては何も説明されていません。this.SaveAs() がワークブックではなくワークシートを参照していると何かが言っていますが、私はそこを推測しています。
私は愚かなことをしたことを願っています。それは簡単な修正です。
参考までに、ここに私のコードを示しますが、私が言うように、それがどれほど役立つかはわかりません。
これらのファイルを保存する方法を知っている人はいますか?
読んでくれてありがとう
編集 -
この記事を見つけました
C# と Excel の相互運用の問題、Excel ファイルの保存がスムーズでない
その提案を含むようにコードを変更しました
しかし、それは同じことをしています。
期限が迫っているので、手動でコピー、貼り付け、保存を開始する必要があると思います:(
c# - 新しい Excel シートの DragDrop で「オブジェクト参照が値に設定されていません」と表示される
私はdevExpressを使用しています。Office 2007. c#. 結果を 1/2/3 Excel シートにドラッグ アンド ドロップすると正常に動作しますが、結果を新しいシートにドロップすると、オブジェクト参照が値のインスタンスに設定されません。提案?
excel - 優れたデータの書き込み
c#を使用してExcelファイルにデータを書き込みたいのですが、セルごとにデータを書き込みたいです。これをどのように行うことができますか。
c# - C# から Excel にエクスポート
C# から Excel にデータを書き込もうとしていますが、デバッグ中に例外があります。
タイプ 'System.__ComObject' の COM オブジェクトをインターフェイス タイプ 'Microsoft.Office.Interop.Excel.Range' にキャストできません。IID '{00020846-0000-0000-C000-000000000046}' を持つインターフェイスの COM コンポーネントでの QueryInterface 呼び出しが次のエラーのために失敗したため、この操作は失敗しました:
コード :
c# - Excelの相互運用機能はOffice2007を搭載したマシンでは機能しますが、Office2010を搭載したマシンでは失敗します
Excel相互運用機能を使用してExcelファイルからデータを読み取るC#WPF(.NET 4.0)アプリケーションがあります。
このアプリをExcel2007を搭載した開発マシンで実行すると、正常に動作します。Excel 2010がインストールされている別のマシンで実行すると、次のエラーメッセージが表示されて失敗します。
System.Runtime.InteropServices.COMException(0x80040154):CLSID {00024500-0000-0000-C000-000000000046}のコンポーネントのCOMクラスファクトリの取得に失敗しました。次のエラーが原因です:80040154クラスが登録されていません(HRESULT:0x80040154(REGDB_E_CLASSNOTREG ))。
Microsoft.Office.Interop.Excel.Application
次のように、オブジェクトを作成しようとすると失敗します。
私のプロジェクトにはMicrosoft.Office.Interop.Excel.dll
(バージョン14.0.0.0、ランタイムバージョンv2.0.50727)への参照があります。これは次の場所にあります。
C:\ Program Files \ Microsoft Visual Studio 10.0 \ Visual Studio Tools for Office \ PIA \ Office14 \ Microsoft.Office.Interop.Excel.dll
参照されているdllのデフォルト設定でアプリを実行しようとしました:
- ローカルコピー=False
- 埋め込み相互運用タイプ=True
- 特定のバージョン=True
また、参照されているdllで次の設定を使用してアプリを実行しようとしました。
- ローカルコピー=True
- 相互運用タイプの埋め込み=False
- 特定のバージョン=True
しかし、Office 2010を搭載したマシンでは、これらの試みはどちらも機能しませんでした。
その他の注意事項:Office 2010を搭載したマシンは64ビット(Windows 7付き)です。私の開発マシンはX86とWindowsXPです。
質問
「クラスが登録されていません」という例外の原因とその修正方法を教えてください。
編集
Alexの回答に応えて、アプリをAny CPU、X86、X64としてビルドしようとしましたが、違いはありませんでした。同じ「クラスが登録されていません」というエラーが引き続き発生します。
編集2
Office2010を搭載した32ビットマシンでアプリを試してみました。エラーはありません。したがって、特定のマシンに問題があるか、64ビットとOffice2010の組み合わせである可能性があります。
編集3
さて、Office2010を搭載した別の64ビットマシンでテストしました。エラーはありません。これは特定のマシンに何か問題があることを意味していると思います。それは私のソフトウェアのせいではありません。ああプログラミング。