如何在 VSTO 的“另存为”对话框中 select 目录而不是文件?

How to select a directory instead of a file in a Save As dialog in VSTO?

我正在使用 VSTO 和 C# 创建一个 Excel 加载项,我想设置保存加载项结果文件的目录(它们的文件名以编程方式生成)。

我尝试在我的 C# 文件中使用 SaveFileDialog saveDlg = new SaveFileDialog();,但“文件另存为”对话框无法让我 select 一个目录…

你能帮我设置 saveDlg 的属性吗?

谢谢?

我改用了 FolderBrowserDialog,如下代码所示:

            FolderBrowserDialog folderDlg = new FolderBrowserDialog();

            if (folderDlg.ShowDialog() == DialogResult.OK)
            {
                string directory = folderDlg.SelectedPath;

                string fileName = directory + "\" + MyGeneratedFileName();

                … saves the file …     
            }

以下是您的一些选择:

string fileName;
string folderName;

//Option 1
// FolderBrowserDialog - returns only path to the folder
FolderBrowserDialog fileFolderBrowserDialog = new FolderBrowserDialog();
fileFolderBrowserDialog.ShowDialog();
folderName = fileFolderBrowserDialog.SelectedPath;
fileName = string.Concat(fileSaveAsDialog.FileName, "\", "your generated file name.xlsx");

//Option 2
//FileDialog - returns full path to the file
//TODO: Set up this dialog with proper file extensions
FileDialog fileSaveAsDialog = new SaveFileDialog();
fileSaveAsDialog.AddExtension = true;
fileSaveAsDialog.Filter = "Excel Workbooks (*.xls, *.xlsx)|*.xls;*.xlsx|Excel Macro-Enabled Workbooks | *.xlsm |All files *.*| *.*";
fileSaveAsDialog.ShowDialog();
fileName = fileSaveAsDialog.FileName;

//Option 3
// Excel SaveAs method
// if file full name is generated programatically - 
// you may save it without prompting user
Excel.Application xlApp = Globals.ThisAddIn.Application;
Excel.Workbook xlWB = xlApp.ActiveWorkbook; //or new Excel.Workbook(); or .Workbooks["Workbook name"]
fileName = "C:\Users\username\Desktop\my Excel wb.xlsx";
xlWB.SaveAs(fileName);