在C#中打开Excel工作簿

当我尝试通过C#应用程序打开Excel表格时遇到一个奇怪的问题。 它使用类似于以下内容的templatePathC:\template.xls为例。

 Workbook excel_workbook = this.excel.Workbooks.Open(templatePath, mMissingValue, false, mMissingValue, mMissingValue, mMissingValue, mMissingValue, mMissingValue, mMissingValue, mMissingValue, mMissingValue, mMissingValue, mMissingValue, mMissingValue, mMissingValue); 

然后在一些操作中涉及到excel_workbook对象。 问题是, excel_workbook.name = template1 ,而不是模板,导致在单击保存时显示Save As对话框。 这种行为从业务angular度打破了工作stream程。

有人会帮助吗? 注意到其他工作表正常工作。

我不知道如何强制Excel不显示对话框,但您可以尝试使用SpreadsheetGear for .NET或其他.NET组件,而不是Excel自动化,以避免这样的问题 – 最有可能得到一些性能改善。

你可以在这里看到活的ASP.NET示例,并在这里下载一个免费的试用版,如果你想尝试一下。

免责声明:我自己的SpreadsheetGear LLC

没有办法阻止Excel(或其他Office应用程序)显示对话窗口。 实际上,Microsoft不build议在服务器端场景中使用Office应用程序。 市场上有很多第三方组件可以做同样的工作(甚至更好)。 从大约一年前进行的对比testing来看,Spire.XLS for .NET在以下方面是最好的:1.读取/写入excel 2.支持embedded图像3.结果大小Excel文件非常小4.方便API和Office的非常相似5.multithreading和多进程支持

阅读更多: http : //www.e-iceblue.com/xls/xlsintro.htm

你显式地传入'ReadOnly'参数为'false',所以这种行为很奇怪。

我在这里有两个想法:

(1)您确定您的工作簿是.XLS文件,而不是.XLT? 如果它是一个.XLT,如“C:\ template.xlt”而不是“C:\ template.xls”,那么您看到的行为是NORMAL,因为您的工作簿正在作为模板打开。 将扩展名更改为“.XLS”,您将获得所需的行为。

(2)如果你不能按照你想要的方式来执行,那么改变你的过程来调用“Workbooks.Open”,然后立即调用“Workbooks.SaveAs”,并将工作簿名称和/或文件path位置设置为任何位置想。 此后,用户(或通过代码)对“保存”的任何调用将保存工作簿而不打开“另存为”对话框。

更新

好吧,其他的想法:

您应该尝试手动打开工作簿,然后尝试保存它。 你有同样的问题吗? 当这个工作簿是唯一的开放工作簿,或者只有其他人打开工作簿时,才会发生这种情况吗? 重命名工作簿有帮助吗?

但底线是,这确实听起来像是一种奇怪的腐败。 如果以上都没有产生任何有趣的东西 – 或者可能即使他们这样做 – 你可能会重新开始一个新的工作簿。 从一个空白的工作簿开始,给它一个相同的名字,并把它放在同一个位置。 它现在工作(至less在开放和储蓄方面)。 然后尝试添加您的数据和其他方面。 这将是工作,但你应该能够重新build立这个工作簿,并使其工作。

迈克