我已经搜索过,我发现没有任何东西可以直接点击我正在寻找的东西(或者我的搜索没有点击组合词)。
在C#中,我使用Interop.Excel创建了Excel工作表,在其中插入了一些数据并创建了一个图表。当我执行xlWorkBook.SaveAs时,这一切都正常。
我想要做的是提示用户使用自己的文件名将自动化工作簿放在某处。我已经尝试过(http://p2p.wrox.com/vb-how/63900-disabling-second-excel-save-prompt.html)他基本上做了一个新的SaveFileDialog然后如果它==确定他构建了他的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
答案 0 :(得分:3)
这是一种简单的方法。 : - )
myFilename = xlapp.GetSaveAsFilename
xlWorkbook.SaveAs filename:=myFilename
答案 1 :(得分:1)
如果您在保存文件后将文件存储在某处,则可以使用“响应”。
以下是一个例子:
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();
这应该提示用户将文件存储在他们的计算机上。
答案 2 :(得分:0)
这就是我做的,看起来很疯狂,但很有效。
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;
}