2016-10-06 15 views
0

ファイルを保存するダイアログボックスを使用して、ファイルを保存する場所を取得しています。SaveFileDialogファイルの保存場所の保存C#winforms

private string GetSaveLocationFromUser(string filter) 
{ 
    string location = string.Empty; 

    using (SaveFileDialog sfd = new SaveFileDialog()) 
    { 
     sfd.Filter = filter; 
     sfd.FilterIndex = 1; 
     sfd.RestoreDirectory = true; 
     sfd.InitialDirectory = GetFolderNameDefault(); 
     sfd.FileName = GetFileDefaultName(); 

     if (sfd.ShowDialog() == DialogResult.OK) 
     { 
      location = sfd.FileName; 
     } 
    } 
    return location; 
} 

これは私が実際にコードの後の私のファイルを保存するために行くときしかし、私はファイルが既に存在するため、ファイルを保存することができないという例外を取得しています、ファイルの場所を得ることに正常に動作します。

以下のコードは、選択した場所にExcelドキュメントを保存するためにClosedXMLを使用しています。

using (XLWorkbook wb = new XLWorkbook()) 
{ 
    wb.Worksheets.Add(data, ReportTitle); 
    wb.SaveAs(filename); 
    isSuccess = true; 
} 

ファイル名を1文字で変更すると、 test.xlsx - > test1.xlsxうまく動作します。これは、保存ファイルダイアログが選択されたときにそのファイルの場所にロックをかけていて、後でそのファイルに保存できないことを意味します。

どのような考えにも感謝します。

+0

は、ファイルが...それを上書きするか、ファイルが存在するかどうかを確認するコードを書くために存在する場合、通常は示すことになる、.SaveAs'メソッドのオーバーロードをチェックし、boolean型パラメータがあるかどうかを確認します。 。その後、新しいファイルを作成して保存する前に削除してください。単純な修正.. – MethodMan

+0

私はこれをもう一度やってみました。私はそのチェックをするとファイルが存在しないと言っています。私はちょうどとにかく削除しようとしたが、それは違いはありません。 – user3284707

答えて

0

Workbook.SaveAsのパラメータをxlLocalSessionChangesに設定して、常に変更を受け入れるようにしてください。ような何か:

wb.SaveAs(filename, Microsoft.Office.Interop.Excel.XlFileFormat.xlWorkbookDefault, Type.Missing, Type.Missing, true, false, XlSaveAsAccessMode.xlNoChange, XlSaveConflictResolution.xlLocalSessionChanges, Type.Missing, Type.Missing); 
+0

OPはExcel interopではなく[ClosedXML](https://github.com/closedxml/closedxml)を使用していると思います。私が見る限り、 'ClosedXML.Excel.XLWorkbook'の' wb.SaveAs() 'メソッドは、ファイル名(またはストリーム)以外のパラメータを持たず、[ソースコード](いずれの場合でも既存のファイルを上書きします。 – haindl

関連する問題