C# との相互運用性を使用し、Excel でオリジナルを変更して保存します。これを否定するにはどうすればよいでしょうか?
質問
問題: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() メソッドを呼び出すことができます。そこに更新されたファイル名を渡すことができます。
ワークシートから名前を付けて保存を試してみましたか?
- 「名前を付けて保存」についても同様です
- Interop を実行する必要があるときは、必ず別の VB.NET クラス ライブラリを作成し、ロジックを VB で記述します。C# で面倒な作業をする価値はありません
所属していません StackOverflow