4

タイトルに示されているように、1つのソリューションに2つのプロジェクトがあるとしましょう。私は3つ持っていますが、最後の1つは単なる例です。1つのプロジェクトはExcelWorkbookEWB)と呼ばれます

ここに画像の説明を入力してください

もう1つはWindowsFormCore)と呼ばれます。EWBこれを表示/開く/開始したいと思いCoreます。私は最初のものへの参照を追加しました:

ここに画像の説明を入力してください

その特定のワークブックのシートを見ることができます。別のプロジェクトのフォームを表示するときほど簡単ではありません。念のために言っておきますが、引数EWB.Sheet1を取るコンストラクターは含まれていません0。そのコンストラクターには2つの引数があります...

これらの議論は次のとおりです。

  • Microsoft.Office.Tools.Excel.Factoryファクトリ
  • IServiceProvider serviceProvider

このプロジェクトでは、次のように述べています。

ここに画像の説明を入力してください

ボタンクリックイベントでそのワークブックを開きたいのですが、方法がわかりません。

  • 始めよう
  • それを示す
  • それを開く
  • また ...

これをどのように行うことができるか考えていますか?どんな助けでもありがたいです!

これが私が別のプロジェクトからフォームを開く方法であり、これが私がそれを開きたい方法です EWB

using WindowsFormsApplication1;

private void CoreBtn_Click(object sender, EventArgs e)
        {
            Form1 newForm = new Form1();
            newForm.Show();
        }
4

4 に答える 4

3

Microsoft.Office.Interop.Excelおよびへの参照を追加しますusing Excel = Microsoft.Office.Interop.Excel;

始めるための簡単なコードを次に示します。

Excel.Application xlApp = new Excel.Application();  // create new Excel application
xlApp.Visible = true;                               // application becomes visible
xlApp.Workbooks.Open(@"C:\workbook.xlsx");          // open the workbook from file path

xlApp.Quit();                                       // close the application when you are done

詳細については、Excelオブジェクトモデルを参照してください。

于 2013-01-17T21:51:50.183 に答える
1

Excelプロジェクトは対応するVBAプロジェクトと非常によく似ています。プロジェクトに特定のブックを開いたときにのみアクセスできる機能が含まれている場合は、その特定のブックの「背後」にあるVBAコードをVBAエディターで記述します。これはVSTOです。 「ワークブック」プロジェクト。Excel2007以降では、マクロ対応のワークブック(.xlsm)であり、以前のバージョンでは、コード(マクロ)を実行するワークブックです。

ただし、プロジェクトにアプリケーション(Excel)レベルで「実行」され、ブックが開かれているかどうかに関係なく使用できる機能が含まれている場合、特定のブックが開かれているかどうかは言うまでもなく、Excelアドインを作成しています。アドインは、Excelの起動時に読み込まれ、好きなように「リッスン」します。これにより、開いているブックにそのようなファイル名プレフィックスが付いている場合、またはアクティブ化するワークシートに特定のラベル/名前が付いている場合に、特定の機能を有効にできます。フォーム(WinForms)またはウィンドウ(WPF)の表示、データベースレコードのフェッチ、挿入、更新、削除、Webサービスとの通信など。

実行中のアドインからブックを開くには、Excelオブジェクトモデル(Application.Workbooks.Open())を使用してファイルを開きます。問題のブックをソリューションに含める必要はありません。ワークブックプロジェクトが必要になるのは、そのワークブックでマクロを実行する必要がある場合(この場合、VBAオプションもあります)、または完全を期すために、バージョン管理のために「テンプレート」として含める場合のみです。

これで解決しました。他のWinFormsアプリから特定のワークブックを使用してExcelを起動するには、パラメーターなしのコンストラクターとShow()メソッドのみを使用します。パラメーターなしのコンストラクターを持ち、メソッドを公開するランチャーをラップする必要がありますShow()http:/ /office.microsoft.com/en-us/excel-help/command-line-switches-for-excel-HA010158030.aspxコマンドラインExcelドキュメントが便利な場合があります-または、Porkbuttsの回答に示されているようにExcelオブジェクトモデルを参照してください) 。他の方法もあるかもしれませんが、スタンドアロンのWinFormsアプリでVSTOを使用するオプションがない場合は、コマンドラインの起動が最も簡単だと思います。

于 2013-01-22T04:35:08.567 に答える
0

まず、プロジェクトの範囲、つまりコード(DLL、LIBS、EXE)がわからないため、これは多くのことを前提としています。

ExcelWorkbookはWindowsフォームプロジェクトであると想定しています。

ExcelWorkbookプロジェクトをビルドします。これで、ExecutableファイルExcelWorkbook.exeが作成されます。

「コア」プロジェクトで、「参照」を右クリックし、「追加」を選択します。

参照ボタンを選択し、ExcelWorkbook.exeの実行可能ファイルを見つけて[OK]を選択します。

これで、ExcelWorkbookプロジェクトへの参照が表示されます。

ExcelWorkbookプロジェクトを利用するクラス/フォームに、usingステートメントを追加します

eBook =ExcelWorkbook//または任意の任意の名前を使用する

これで、ExcelWorkbookプロジェクトを参照できます

public eBook.Form1 _excelWorkbookProject;


_excelWorkbookProject = new eBook.Form1()

フォームの場合はそれを表示します _excelWorkbookProject.ShowDialog();//トップレベルのウィンドウのままにしておきたい場合。

また

_excelWorkbookProject.Show();
于 2013-01-17T22:48:34.483 に答える
0

ExcelWorkbookプロジェクトでアセンブリプロセスを作成し、プロセスがアクティブであるかどうかをWindowsフォームコアで確認するのはどうでしょうか。

System.Diagnostics.Processを使用して、実行中のプロセスの開始と停止を検出できます。

于 2013-01-10T12:45:19.297 に答える