2017-06-20 22 views
2

Excelシートに数行を書き込んで、簡単なC#プログラムを使用して保存しようとしています。しかし、毎回「このファイルを保存しますか?」というダイアログボックスが表示されます。はい、いいえ、オプションをキャンセルします。はいを選択して、更新されたデータでファイルを保存できるようにします。C#でExcelワークシートの名前を付けて保存ダイアログボックスの処理方法

string ID = "123456"; 

Microsoft.Office.Interop.Excel.Application xlApp; 
Microsoft.Office.Interop.Excel.Workbook xlWorkBook; 
Microsoft.Office.Interop.Excel.Worksheet xlWorkSheet; 
xlApp = new Microsoft.Office.Interop.Excel.Application(); 
      xlWorkBook = xlApp.Workbooks.Open(@"D:\Projects\Data\DataSheet.xlsx", 0, true, 5, "", "", true, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0); 
      xlWorkSheet = 
(Microsoft.Office.Interop.Excel.Worksheet) xlWorkBook.Worksheets["source"]; 
//putting the value in excel. 
xlWorkSheet.Cells[2, 2] = ID; 

xlApp.Visible = true; 
//xlApp.ActiveWorkbook.save(); 

xlWorkBook.SaveAs(@"D:\Projects\Data\DataSheet.xlsx", Microsoft.Office.Interop.Excel.XlFileFormat.xlWorkbookDefault, Type.Missing, Type.Missing, 
     false, false, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange, 
     Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing); 

xlWorkBook.Close(false, Type.Missing, Type.Missing); 
xlApp.Workbooks.Close(); 
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlWorkBook); 

xlApp.Quit(); 
GC.Collect(); 
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp); 

そのは、Excelシートに値を入力するが、それはそれを保存しない:ここでは

はコードです。誰かがこの問題を短くする手助けができますか?よりよいアプローチを提案しますか?

+0

可能な重複[名前を付けて保存コマンドが動作しませんが、SaveCopyAsはありません](https://stackoverflow.com/questions/17450447/saveas-command-does-:C#では、私はこれは次のようになりますと信じて – dovid

+1

絶対に必要な場合を除いて、決して 'GC.Collect()'を呼ぶことはないでしょう。imoを防ぐのが良いでしょう。リソースが必要なときに収集する必要があります – EpicKip

+0

_「保存するが保存するよう依頼する」_に基づいて回答を追加しましたが、それはあなたの問題ではないことに気付きました。 'xlWorkBook.SaveAs(@" D:Projects \ Data \ DataSheet.xlsx ")'は追加引数なしで動作しますか?コードの欲しいところにメッセージがポップアップしていますか? – gms0ulman

答えて

1

は、手動でtrueSavedプロパティを設定してみてください:

xlWorkBook.SaveAs(...); 
xlWorkBook.Saved = true; 
xlApp.Workbooks.Close() //not sure if required before: xlWorkBook.Close() 

編集

をあなたがthe Close() methodに引数を供給することができます。

xlWorkBook.SaveAs(...); 
xlWorkBook.Saved = true; 
xlWorkBook.Close(false); //new line 
xlApp.Workbooks.Close(); OR xlApp.Workbooks.Close(false); 
+0

これを使用しても、「DataSheet.xlsxという名前のファイルが既に存在します。置き換えますか?」というメッセージが表示されます。はい、いいえ、キャンセルボタンがあります。 「はい」を選択するか、単にこれらのメッセージが表示されずに保存と閉じるブックを実行する方法がありますか。ありがとうございます。 – Ansh

+0

@Ansh AFC - [DisplayAlertsをfalseに設定できます](https://msdn.microsoft.com/VBA/Excel-VBA/articles/application-displayalerts-property-excel) – gms0ulman

+0

可能な方法はありますかSaveAsではなくSaveを使用しますか? – Ansh

関連する問題