如何提示用户保存自动化的Excel文件

我已经search,没有发现我直接find的东西(也许我的search没有打到单词的组合)。

在C#中,我创build了一个使用Interop.Excel的Excel工作表,我在其中插入一些数据并创build一个图表。 这一切工作正常,当我做一个xlWorkBook.SaveAs。

我想要做的是提示用户将自动工作簿放在具有自己的文件名的地方。 我已经尝试( http://p2p.wrox.com/vb-how/63900-disabling-second-excel-save-prompt.html ),他基本上做了一个新的SaveFileDialog,然后如果它==好,他build立他的Excel表然后他说他的工作簿.SaveAs(FilePathFromSaveAsDialog)导致提示。 当我尝试它时,我得到“显示模式对话框,当应用程序未在UserInteractive模式下运行不是一个有效的操作”错误。 我会粘贴我所有的代码,但它是在一个单独的系统上,但是它只是:

using Excel = Microsoft.Office.Interop.Office //....then on click of link button.... Excel.Application xlApp; Excel.Workbook xlWorbook; Excel.Workbooks xlWorkbooks; Excel.Sheets xlSheets; Excel.Worksheet xlWorkSheet; object misValue = System.Reflection.Missing.Value; xlApp = new Excel.ApplicationClass(); xlWorkBooks = xlApp.Workbooks; xlWorkBook = xlWorbooks.Add(misValue); xlSheets = xlWorkBook.Worksheets; xlWorkSheet = (Excel.Worksheet)xlSheets.get_Item(1); //....Now I fill my Excel sheet data and make my chart >>> then I close like below... xlApp.DisplayAlerts = true; //HERE IS WHERE I WANT TO EITHER PASS THE PATH AND FILE NAME FROM USER OR USE A PROMPT xlWorkBook.SaveAs("Test.xls", Excel.XFileFormat.XlWorkbookNormal, misValue, misValue, misValue, misValue, Excel.XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue, misValue); xlWorkBook.Close(true, misValue, misValue); xlApp.Quit(); //finally I release all my objects via Marshal.ReleaseComObject then GC.Collect 

如果在保存文件后将文件保存在某处,则可以使用“响应”。

这是一个例子:

  const string fName = @"C:\Test.xls"; FileInfo fi = new FileInfo(fName); long sz = fi.Length; Response.ClearContent(); Response.ContentType = Path.GetExtension(fName); Response.AddHeader("Content-Disposition", string.Format("attachment; filename = {0}",System.IO.Path.GetFileName(fName))); Response.AddHeader("Content-Length", sz.ToString("F0")); Response.TransmitFile(fName); Response.End(); 

这应该提示用户他们想要在他们的机器上存储文件。

这是简单的方法。 🙂

 myFilename = xlapp.GetSaveAsFilename xlWorkbook.SaveAs filename:=myFilename 

这就是我所做的,似乎很疯狂,但工作。

xlWorkBook.SaveAs(saveExcel(), Excel.XlFileFormat.xlWorkbookNormal, misValue, misValue, misValue, misValue, Excel.XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue, misValue);//import method

internal object saveExcel()//method

  { SaveFileDialog sfd = new SaveFileDialog();// Create save the CSV sfd.Filter = "Text File|*.xls";// filters for text files only sfd.DefaultExt = "xls"; sfd.AddExtension = true; sfd.FileName = "AutodeskScripts.xls"; sfd.Title = "Save Excel File"; if (sfd.ShowDialog() == DialogResult.OK) { return sfd.FileName; } else { return null; }