C# との相互運用性を使用し、Excel でオリジナルを変更して保存します。これを否定するにはどうすればよいでしょうか?

StackOverflow https://stackoverflow.com/questions/29141

  •  09-06-2019
  •  | 
  •  

質問

問題:Excel スプレッドシート テンプレートを読み込みます。別のファイル名を指定して Save コマンドを使用し、相互運用オブジェクトを終了します。これにより、元のテンプレート ファイルが保存されます。好まれる結果ではありません。

public void saveAndExit(string filename)
{        
    excelApplication.Save(filename);
    excelApplication.Quit();
}

開いた元のファイルはc: testing template.xlsで渡されるファイル名はc: testing 7777(date).xls

誰か答えがある人はいますか?

(wbk.Close() にはパラメーターを渡す必要がありますが、私が選んだ答えは最も正確で徹底的なものでした。ありがとう。)

役に立ちましたか?

解決

Excel の相互運用はかなり面倒です。私が持っていた古いプロジェクトを掘り出し、少しいじってみました。これがあなたが探しているものだと思います。他のコメント投稿者は正しいですが、少なくとも私の経験では、VBA で同じオブジェクト (相互運用ラッパーなし) を使用した場合に SaveAs() を呼び出すには、予想よりもはるかに多くの作業が必要です。

Microsoft.Office.Interop.Excel.Workbook wbk = excelApplication.Workbooks[0];  //or some other way of obtaining this workbook reference, as Jason Z mentioned
wbk.SaveAs(filename, Type.Missing, Type.Missing, Type.Missing,
            Type.Missing, Type.Missing, XlSaveAsAccessMode.xlNoChange, 
            Type.Missing, Type.Missing, Type.Missing, Type.Missing,
            Type.Missing);
wbk.Close();
excelApplication.Quit();

Type.Missings のすべてを愛さなければなりません。しかし、それらは必要だと思います。

他のヒント

ExcelApplication を使用する代わりに、Workbook オブジェクトを使用して SaveAs() メソッドを呼び出すことができます。そこに更新されたファイル名を渡すことができます。

ワークシートから名前を付けて保存を試してみましたか?

  1. 「名前を付けて保存」についても同様です
  2. Interop を実行する必要があるときは、必ず別の VB.NET クラス ライブラリを作成し、ロジックを VB で記述します。C# で面倒な作業をする価値はありません
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top