C#和Excel互操作问题,保存Excel文件不流畅。

10

我能够打开并向Excel文件写入,但当我尝试通过传递路径来保存文件时,保存操作会提示保存对话框。我希望它静默地将文件保存在指定的路径上。

代码如下:

excelApp.Save(exportToDirectory);
excelApp.Quit();

其中,exportToDirectory 是:"C:\files\strings.xlsx"。

PS:我已经检查过 Excel 版本和类似的问题。

谢谢。

7个回答

15
你需要使用Workbook.SaveAs而不是Application.Save:
Excel.Application app = new Excel.Application();
Excel.Workbook wb = app.Workbooks.Add(missing);
...
wb.SaveAs(@"C:\temp\test.xlsx", missing, missing, missing, missing,
          missing, Excel.XlSaveAsAccessMode.xlExclusive,
          missing, missing, missing, missing, missing);

你知道Excel.XlSaveAsAccessMode.xlExclusive的数值是多少吗?我需要将它传递给Windows脚本文件中的这个函数。 - MrVimes
1
@MrVimes 对于你来说已经晚了,但是这里是未来参考的代码:public enum XlSaveAsAccessMode { xlNoChange = 1, xlShared = 2, xlExclusive = 3 } - killercowuk

15

设置以下属性也可能有帮助:

excelApp.DisplayAlerts = false;
excelApp.ScreenUpdating = false;
excelApp.Visible = false;
excelApp.UserControl = false;
excelApp.Interactive = false;

我尝试了很多解决方案,但这是唯一一个像应该那样工作的!非常有用!谢谢!! - Fryla- Cristian Marucci

3

只需将 ActiveWorkbook.Saved 属性设置为 true,就可以在没有任何对话框的情况下退出 Quit();


2

Well, here's how Microsoft does it:

// Save the Workbook and quit Excel.
m_objBook.SaveAs(m_strSampleFolder + "Book1.xls", m_objOpt, m_objOpt, 
    m_objOpt, m_objOpt, m_objOpt, Excel.XlSaveAsAccessMode.xlNoChange, 
    m_objOpt, m_objOpt, m_objOpt, m_objOpt);
m_objBook.Close(false, m_objOpt, m_objOpt);
m_objExcel.Quit();

请查看他们的知识库文章之一。


1
我发现excelApp.ActiveWorkbook.save()可以保存文件,然后我可以退出而不需要询问。

1

myBook.Saved = true;
myBook.SaveCopyAs(xlsFileName);
myBook.Close(null, null, null);
myExcel.Workbooks.Close();
myExcel.Quit();

myBook.Saved = true;
myBook.SaveCopyAs(xlsFileName);
myBook.Close(null, null, null);
myExcel.Workbooks.Close();
myExcel.Quit();


这对我来说效果最好,而不是评分最高的答案。我喜欢这个解决方案的原因是它不会影响用户打开的其他Excel文件。 - ytoledano

1

ExcelApp.Interactive = false 可以抑制任何对话框。

excelApp.ActiveWorkbook.SaveAs(exportDirectory)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接