2017-08-15 62 views
-1

我一直在編寫保存名稱/位置的硬編碼,但現在我需要詢問用戶保存位置和文件名。我有這樣的語法,但我怎麼實際上通過選擇的位置&輸入文件名到我的ToExcel()方法知道文件名並保存位置?從SaveFileDialog傳遞文件名和位置到變量

private void btnSave_Click(object sender, EventArgs e) 
{ 
    //Creating Save File Dialog 
    SaveFileDialog save = new SaveFileDialog(); 
    //Showing the dialog 
    save.ShowDialog(); 
    //Setting default directory 
    save.InitialDirectory = @"C:\"; 
    save.RestoreDirectory = true; 
    //Setting title 
    save.Title = "Select save location and input file name"; 
    //filtering to only show .xml files in the directory 
    save.DefaultExt = "xml"; 
    //Write Data To Excel 
    ToExcel(); 
} 

private void ToExcel() 
{ 
    var file = new FileInfo(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.DesktopDirectory), "Test_" + DateTime.Now.ToString("M-dd-yyyy-HH.mm.ss") + ".xlsx")); 

    using (var package = new ExcelPackage(file)) 
    { 
     ExcelWorksheet ws = package.Workbook.Worksheets.Add("Test"); 
     ws.Cells[1, 1].Value = "One"; 
     ws.Cells["A1:C1"].Style.Font.Bold = true; 
     package.Save(); 
     MessageBox.Show("Saved!"); 
    } 
} 
+1

您應該使用OpenFileDialog來選擇現有文件,Save用於創建不存在的文件,FolderBrowserDialog用於選擇文件夾 – MikeT

+1

也可以說'//過濾只顯示目錄中的.xml文件這不是正確的過濾你將使用此代碼'openFileDialog1.Filter =「txt文件(* .txt)| * .txt |所有文件(*。*)| *。*」;'DefaultExt用於確定使用什麼擴展名if沒有指定 – MikeT

回答

2

首先ShowDialog應該是你通話的最後一行,你已經配置

然後使用FileName屬性來訪問所選擇的文件名

終於傳遞到任何你需要傳遞後它即

private void btnSave_Click(object sender, EventArgs e) 
{ 
    SaveFileDialog save = new SaveFileDialog(); 
    save.InitialDirectory = @"C:\"; 
    save.RestoreDirectory = true; 
    save.Title = "Select save location file name"; 
    save.DefaultExt = "xml"; // surely should be xlsx?? 

    //Showing the dialog 
    if(save.ShowDialog() == DialogResult.OK) 
    { 
     ToExcel(save.FileName); 
    } 
} 
private void ToExcel(string saveFile){...} 

此外,如果你想獲得一個FileInfo的Directorty檢查FileInfo.Directory財產

+0

Aww男子,我用FileName和FileNames做了它,並且你擊敗了我。 – Aaron

+0

我得到'DialogResult'的編譯錯誤不包含'Ok'的定義 – BellHopByDayAmetuerCoderByNigh

+0

@BellHopByDayAmetuerCoderByNigh嘗試「save.ShowDialog()== true」 - 我相信這是一個c#4.0的東西。仍然是一個很好的回答,他只需要將它更新爲C#4.0。 – Aaron