1

次の Excel Interop オブジェクトが宣言されているとします。

    Dim ExcelToKeepHidden As New Microsoft.Office.Interop.Excel.Application
    Dim SheetToCopy As Microsoft.Office.Interop.Excel.Workbook
    ...
    Dim ExcelToShow As New Microsoft.Office.Interop.Excel.Application

基本的に、私はバックグラウンドでExcelの非表示のインスタンスを保持しています(これにはシートが含まれていますSheetToCopy-ユーザーの注意から離れてすべての核心的な作業を続けています)。次に、ボタンShow Excel Sheetがあります。ユーザーがそれをクリックすると、私のSheetToCopyオブジェクトを取得して、そのコピーをExcelToShowアプリケーションに作成する必要があります。

つまり、元のファイルはさらに操作するためSheetToCopyExcelToKeepHiddenアプリケーションに残りますがExcelToShow、ユーザーがボタンをクリックした時点でシートのコピーが表示されます。

したがって、私の課題はSheetToCopy.Copy()、新しいシートが Excel のまったく異なるインスタンスにあるため、メソッドをそのまま使用できないことです。また、私が行っている操作の種類のために、フィルターを適用しているため、セルの範囲をコピーすることはできず、そのpaste機能では書式設定などを維持できません.

基本的に、私が見ている唯一の解決策は、同じExcelアプリケーションでシートのコピーを新しいワークブックに作成し、それを閉じてから2番目のExcelアプリケーションで再度開くことですが、これを達成するためのより良い方法??

何かご意見は??(VB または C# コードはまったく問題ありません)

ありがとう!!!!)

4

1 に答える 1

1

私自身の質問への回答として(他の誰かが同様の問題に直面した場合に備えて)。

ただし、以下を使用して 2 つのアプリケーション間でデータを貼り付けることはできません。

RangeWeWant.Copy()
NewSheet.Range(RangeWeWant.Address).PasteSpecial(Microsoft.Office.Interop.Excel.XlPasteType.xlPasteFormats)
NewSheet.Range(RangeWeWant.Address).Value = RangeWeWant.Value

Range.PasteSpecialモジュールはエラーをスローするため、はスローSheet.PasteSpecialしません!

したがって、このコードは私にとってはうまくいきました:

RangeWeWant.Copy()
NewSheet.Range(RangeWeWant.Address).Range("A1").Select()
NewSheet.PasteSpecial(Format:="Microsoft Excel 8.0 Format")
NewSheet.Range(RangeWeWant.Address).Value = RangeWeWant.Value

これが簡単な解決策であることは知っていますが、それは完全にうまくいきました!!!

これが他の誰かにも役立つことを願っています!!

于 2013-05-21T15:55:24.573 に答える